[{"data":1,"prerenderedAt":173802},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker-ming-ling-xue-xi":3,"wiki-doc-nav":1089},{"id":4,"title":5,"body":6,"description":395,"extension":1082,"meta":1083,"navigation":1084,"path":1085,"seo":1086,"stem":1087,"__hash__":1088},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":8,"toc":1077},"minimark",[9,13,18,27,31,34,381,384,387,390,397,403,406,409,412,415,443,446,459,465,647,658,674,968,971,999,1014,1023,1073],[10,11,5],"h1",{"id":12},"_5docker命令学习",[14,15,17],"h3",{"id":16},"_51参考文档","5.1.参考文档",[19,20,21],"p",{},[22,23,24],"a",{"href":24,"rel":25},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[26],"nofollow",[14,28,30],{"id":29},"_52常用命令","5.2.常用命令",[19,32,33],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[35,36,37,54],"table",{},[38,39,40],"thead",{},[41,42,43,48,51],"tr",{},[44,45,47],"th",{"align":46},"left","命令",[44,49,50],{"align":46},"描述",[44,52,53],{"align":46},"示例",[55,56,57,69,80,91,102,113,124,135,145,156,167,178,188,199,210,221,231,241,251,261,272,283,294,305,316,327,337,348,359,370],"tbody",{},[41,58,59,63,66],{},[60,61,62],"td",{"align":46},"docker run",[60,64,65],{"align":46},"创建并启动一个新的容器。",[60,67,68],{"align":46},"docker run -it ubuntu bash",[41,70,71,74,77],{},[60,72,73],{"align":46},"docker build",[60,75,76],{"align":46},"通过指定的 Dockerfile 创建一个新的镜像。",[60,78,79],{"align":46},"docker build -t myimage .",[41,81,82,85,88],{},[60,83,84],{"align":46},"docker pull",[60,86,87],{"align":46},"从 Docker 仓库拉取镜像。",[60,89,90],{"align":46},"docker pull ubuntu",[41,92,93,96,99],{},[60,94,95],{"align":46},"docker push",[60,97,98],{"align":46},"将本地镜像推送到 Docker 仓库。",[60,100,101],{"align":46},"docker push myimage",[41,103,104,107,110],{},[60,105,106],{"align":46},"docker stop",[60,108,109],{"align":46},"停止一个正在运行的容器。",[60,111,112],{"align":46},"docker stop container_id",[41,114,115,118,121],{},[60,116,117],{"align":46},"docker start",[60,119,120],{"align":46},"启动一个已经存在的容器。",[60,122,123],{"align":46},"docker start container_id",[41,125,126,129,132],{},[60,127,128],{"align":46},"docker restart",[60,130,131],{"align":46},"重新启动容器。",[60,133,134],{"align":46},"docker restart container_id",[41,136,137,140,143],{},[60,138,139],{"align":46},"docker ps",[60,141,142],{"align":46},"列出当前正在运行的容器。",[60,144,139],{"align":46},[41,146,147,150,153],{},[60,148,149],{"align":46},"docker rm",[60,151,152],{"align":46},"删除一个或多个停止的容器。",[60,154,155],{"align":46},"docker rm container_id",[41,157,158,161,164],{},[60,159,160],{"align":46},"docker exec",[60,162,163],{"align":46},"在一个正在运行的容器中执行命令。",[60,165,166],{"align":46},"docker exec -it container_id bash",[41,168,169,172,175],{},[60,170,171],{"align":46},"docker logs",[60,173,174],{"align":46},"查看容器的日志输出。",[60,176,177],{"align":46},"docker logs container_id",[41,179,180,183,186],{},[60,181,182],{"align":46},"docker images",[60,184,185],{"align":46},"列出本地所有镜像。",[60,187,182],{"align":46},[41,189,190,193,196],{},[60,191,192],{"align":46},"docker rmi",[60,194,195],{"align":46},"删除一个或多个镜像。",[60,197,198],{"align":46},"docker rmi myimage",[41,200,201,204,207],{},[60,202,203],{"align":46},"docker network",[60,205,206],{"align":46},"管理 Docker 网络。",[60,208,209],{"align":46},"docker network ls",[41,211,212,215,218],{},[60,213,214],{"align":46},"docker volume",[60,216,217],{"align":46},"管理 Docker 数据卷。",[60,219,220],{"align":46},"docker volume ls",[41,222,223,226,229],{},[60,224,225],{"align":46},"docker-compose up",[60,227,228],{"align":46},"启动 docker-compose.yml 中定义的所有服务。",[60,230,225],{"align":46},[41,232,233,236,239],{},[60,234,235],{"align":46},"docker-compose down",[60,237,238],{"align":46},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[60,240,235],{"align":46},[41,242,243,246,249],{},[60,244,245],{"align":46},"docker info",[60,247,248],{"align":46},"显示 Docker 系统的详细信息。",[60,250,245],{"align":46},[41,252,253,256,259],{},[60,254,255],{"align":46},"docker stats",[60,257,258],{"align":46},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[60,260,255],{"align":46},[41,262,263,266,269],{},[60,264,265],{"align":46},"docker inspect",[60,267,268],{"align":46},"查看容器或镜像的详细信息（JSON 格式）。",[60,270,271],{"align":46},"docker inspect container_id",[41,273,274,277,280],{},[60,275,276],{"align":46},"docker save",[60,278,279],{"align":46},"将一个镜像保存为 tar 文件。",[60,281,282],{"align":46},"docker save -o myimage.tar myimage",[41,284,285,288,291],{},[60,286,287],{"align":46},"docker load",[60,289,290],{"align":46},"从 tar 文件中加载镜像。",[60,292,293],{"align":46},"docker load -i myimage.tar",[41,295,296,299,302],{},[60,297,298],{"align":46},"docker tag",[60,300,301],{"align":46},"为镜像添加标签（tag）。",[60,303,304],{"align":46},"docker tag myimage myimage:v1",[41,306,307,310,313],{},[60,308,309],{"align":46},"docker buildx build",[60,311,312],{"align":46},"使用 Buildx 构建多架构镜像。",[60,314,315],{"align":46},"docker buildx build -t myimage .",[41,317,318,321,324],{},[60,319,320],{"align":46},"docker buildx create",[60,322,323],{"align":46},"创建一个新的 Buildx 构建实例。",[60,325,326],{"align":46},"docker buildx create –use",[41,328,329,332,335],{},[60,330,331],{"align":46},"docker buildx ls",[60,333,334],{"align":46},"列出所有可用的 Buildx 构建实例。",[60,336,331],{"align":46},[41,338,339,342,345],{},[60,340,341],{"align":46},"docker buildx use",[60,343,344],{"align":46},"设置当前的 Buildx 构建实例。",[60,346,347],{"align":46},"docker buildx use mybuilder",[41,349,350,353,356],{},[60,351,352],{"align":46},"docker buildx bake",[60,354,355],{"align":46},"使用 Bake 文件批量构建镜像。",[60,357,358],{"align":46},"docker buildx bake -f bake.hcl",[41,360,361,364,367],{},[60,362,363],{"align":46},"docker buildx build –push",[60,365,366],{"align":46},"构建镜像并推送到镜像仓库。",[60,368,369],{"align":46},"docker buildx build –push -t myimage .",[41,371,372,375,378],{},[60,373,374],{"align":46},"docker buildx build –platform",[60,376,377],{"align":46},"构建镜像并为多个平台生成支持。",[60,379,380],{"align":46},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,382,383],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,385,386],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,388,389],{},"docker images 可以查看已经下载的镜像",[19,391,392],{},[393,394],"img",{"alt":395,"src":396},"","\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,398,399],{},[400,401,402],"strong",{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,404,405],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,407,408],{},"docker container logs 查看容器日志",[19,410,411],{},"docker top 查看容器里的进程",[19,413,414],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[416,417,421],"pre",{"className":418,"code":419,"language":420,"meta":395,"style":395},"language-bash shiki shiki-themes github-light github-dark","如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n","bash",[422,423,424],"code",{"__ignoreMap":395},[425,426,429,433,437,440],"span",{"class":427,"line":428},"line",1,[425,430,432],{"class":431},"sScJk","如：docker",[425,434,436],{"class":435},"sZZnC"," cp",[425,438,439],{"class":435}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[425,441,442],{"class":435}," \u002Fmydata\u002Fnginx\n",[19,444,445],{},"docker run时在启动容器的时候会有几个常用的选项：",[447,448,449,453,456],"ul",{},[450,451,452],"li",{},"-d选项：表示后台运行",[450,454,455],{},"-P选项：随机端口映射",[450,457,458],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[14,460,462],{"id":461},"_53run命令的参数非常重要",[400,463,464],{},"5.3.run命令的参数（非常重要）",[35,466,467,480],{},[38,468,469],{},[41,470,471,474,477],{},[44,472,473],{"align":46},"参数\u002F配置",[44,475,476],{"align":46},"功能说明",[44,478,479],{"align":46},"重要性与参考依据",[55,481,482,493,504,515,526,537,548,559,570,581,592,603,614,625,636],{},[41,483,484,487,490],{},[60,485,486],{"align":46},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[60,488,489],{"align":46},"指定容器名称，便于后续管理",[60,491,492],{"align":46},"替代随机生成的容器名。",[41,494,495,498,501],{},[60,496,497],{"align":46},"–gpus all",[60,499,500],{"align":46},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[60,502,503],{"align":46},"用于CUDA加速等GPU依赖任务。",[41,505,506,509,512],{},[60,507,508],{"align":46},"-e NVIDIA_DRIVER_CAPABILITIES=all",[60,510,511],{"align":46},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[60,513,514],{"align":46},"确保容器内GPU功能完整67。",[41,516,517,520,523],{},[60,518,519],{"align":46},"-dit",[60,521,522],{"align":46},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[60,524,525],{"align":46},"允许容器在后台运行并支持交互操作。",[41,527,528,531,534],{},[60,529,530],{"align":46},"–privileged",[60,532,533],{"align":46},"赋予容器完全主机权限（可访问设备、内核模块等）",[60,535,536],{"align":46},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[41,538,539,542,545],{},[60,540,541],{"align":46},"–net=host",[60,543,544],{"align":46},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[60,546,547],{"align":46},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[41,549,550,553,556],{},[60,551,552],{"align":46},"–group-add audio–group-add video–group-add dialout",[60,554,555],{"align":46},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[60,557,558],{"align":46},"避免权限问题（如避免无法调用摄像头、麦克风）。",[41,560,561,564,567],{},[60,562,563],{"align":46},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[60,565,566],{"align":46},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[60,568,569],{"align":46},"支持容器内运行图形界面应用（如OpenCV可视化）。",[41,571,572,575,578],{},[60,573,574],{"align":46},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[60,576,577],{"align":46},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[60,579,580],{"align":46},"实现容器内图形显示。",[41,582,583,586,589],{},[60,584,585],{"align":46},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[60,587,588],{"align":46},"挂载X11认证文件（只读）",[60,590,591],{"align":46},"确保容器有权连接宿主机显示服务。",[41,593,594,597,600],{},[60,595,596],{"align":46},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[60,598,599],{"align":46},"挂载Wayland显示协议相关目录",[60,601,602],{"align":46},"支持Wayland协议的图形显示。",[41,604,605,608,611],{},[60,606,607],{"align":46},"–ulimit nofile=1024:524288",[60,609,610],{"align":46},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[60,612,613],{"align":46},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[41,615,616,619,622],{},[60,617,618],{"align":46},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[60,620,621],{"align":46},"挂载宿主机用户目录到容器内同名路径",[60,623,624],{"align":46},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[41,626,627,630,633],{},[60,628,629],{"align":46},"-w \u002Fhome\u002Ftungchiahui",[60,631,632],{"align":46},"设置容器启动后的默认工作目录",[60,634,635],{"align":46},"直接进入项目路径，方便执行命令2324。",[41,637,638,641,644],{},[60,639,640],{"align":46},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[60,642,643],{"align":46},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[60,645,646],{"align":46},"提供预配置的深度学习与机器人开发环境。",[19,648,649,650,653,654,657],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[422,651,652],{},"sudo","加不加",[422,655,656],{},"sudo -E","都无所谓。",[19,659,660,661,663,664,666,667,670,671,673],{},"用户已经被加到docker组了，不用",[422,662,652],{},"也行跑，其次，",[422,665,652],{},"运行的话，你的",[422,668,669],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[422,672,669],{},"更不可能变了。",[416,675,677],{"className":418,"code":676,"language":420,"meta":395,"style":395},"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",[422,678,679,696,708,719,733,741,749,757,768,778,788,803,816,829,839,850,860,876,912,941,954,962],{"__ignoreMap":395},[425,680,681,683,686,689,693],{"class":427,"line":428},[425,682,652],{"class":431},[425,684,685],{"class":435}," docker",[425,687,688],{"class":435}," run",[425,690,692],{"class":691},"sj4cs"," --name=ros_opencv_cuda",[425,694,695],{"class":691}," \\\n",[425,697,699,703,706],{"class":427,"line":698},2,[425,700,702],{"class":701},"sVt8B","--gpus ",[425,704,705],{"class":435},"all",[425,707,695],{"class":691},[425,709,711,714,717],{"class":427,"line":710},3,[425,712,713],{"class":701},"-e ",[425,715,716],{"class":435},"NVIDIA_DRIVER_CAPABILITIES=all",[425,718,695],{"class":691},[425,720,722,724,727,730],{"class":427,"line":721},4,[425,723,713],{"class":701},[425,725,726],{"class":435},"DISPLAY=",[425,728,729],{"class":701},"$DISPLAY ",[425,731,732],{"class":691},"\\\n",[425,734,736,739],{"class":427,"line":735},5,[425,737,738],{"class":701},"-dit ",[425,740,732],{"class":691},[425,742,744,747],{"class":427,"line":743},6,[425,745,746],{"class":701},"--privileged ",[425,748,732],{"class":691},[425,750,752,755],{"class":427,"line":751},7,[425,753,754],{"class":701},"--net=host ",[425,756,732],{"class":691},[425,758,760,763,766],{"class":427,"line":759},8,[425,761,762],{"class":701},"--group-add ",[425,764,765],{"class":435},"audio",[425,767,695],{"class":691},[425,769,771,773,776],{"class":427,"line":770},9,[425,772,762],{"class":701},[425,774,775],{"class":435},"video",[425,777,695],{"class":691},[425,779,781,783,786],{"class":427,"line":780},10,[425,782,762],{"class":701},[425,784,785],{"class":435},"dialout",[425,787,695],{"class":691},[425,789,791,793,796,798,801],{"class":427,"line":790},11,[425,792,713],{"class":701},[425,794,795],{"class":435},"XAUTHORITY=",[425,797,669],{"class":701},[425,799,800],{"class":435},"\u002F.Xauthority",[425,802,695],{"class":691},[425,804,806,808,811,814],{"class":427,"line":805},12,[425,807,713],{"class":701},[425,809,810],{"class":435},"WAYLAND_DISPLAY=",[425,812,813],{"class":701},"$WAYLAND_DISPLAY ",[425,815,732],{"class":691},[425,817,819,821,824,827],{"class":427,"line":818},13,[425,820,713],{"class":701},[425,822,823],{"class":435},"XDG_RUNTIME_DIR=",[425,825,826],{"class":701},"$XDG_RUNTIME_DIR ",[425,828,732],{"class":691},[425,830,832,834,837],{"class":427,"line":831},14,[425,833,713],{"class":701},[425,835,836],{"class":435},"QT_QPA_PLATFORM=xcb",[425,838,695],{"class":691},[425,840,842,845,848],{"class":427,"line":841},15,[425,843,844],{"class":701},"-v ",[425,846,847],{"class":435},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[425,849,695],{"class":691},[425,851,853,855,858],{"class":427,"line":852},16,[425,854,844],{"class":701},[425,856,857],{"class":435},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[425,859,695],{"class":691},[425,861,863,866,869,871,874],{"class":427,"line":862},17,[425,864,865],{"class":701},"-v $HOME",[425,867,868],{"class":435},"\u002F.Xauthority:",[425,870,669],{"class":701},[425,872,873],{"class":435},"\u002F.Xauthority:ro",[425,875,695],{"class":691},[425,877,879,881,884,887,890,893,896,899,901,903,905,907,910],{"class":427,"line":878},18,[425,880,844],{"class":701},[425,882,883],{"class":435},"\u002Frun\u002Fuser\u002F",[425,885,886],{"class":701},"$(",[425,888,889],{"class":431},"id",[425,891,892],{"class":691}," -u",[425,894,895],{"class":701},")",[425,897,898],{"class":435},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[425,900,886],{"class":701},[425,902,889],{"class":431},[425,904,892],{"class":691},[425,906,895],{"class":701},[425,908,909],{"class":435},"\u002Fwayland-0",[425,911,695],{"class":691},[425,913,915,917,919,921,923,925,927,930,932,934,936,939],{"class":427,"line":914},19,[425,916,844],{"class":701},[425,918,883],{"class":435},[425,920,886],{"class":701},[425,922,889],{"class":431},[425,924,892],{"class":691},[425,926,895],{"class":701},[425,928,929],{"class":435},":\u002Frun\u002Fuser\u002F",[425,931,886],{"class":701},[425,933,889],{"class":431},[425,935,892],{"class":691},[425,937,938],{"class":701},") ",[425,940,732],{"class":691},[425,942,944,946,949,952],{"class":427,"line":943},20,[425,945,865],{"class":701},[425,947,948],{"class":435},":",[425,950,951],{"class":701},"$HOME ",[425,953,732],{"class":691},[425,955,957,960],{"class":427,"line":956},21,[425,958,959],{"class":701},"-w $HOME ",[425,961,732],{"class":691},[425,963,965],{"class":427,"line":964},22,[425,966,967],{"class":701},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,969,970],{},"注意：",[972,973,974,983,986,989],"ol",{},[450,975,976,978,979,982],{},[422,977,716],{}," ",[422,980,981],{},"--gpus all","没有英伟达显卡请注释。",[450,984,985],{},"--name后面请自己为容器起名。",[450,987,988],{},"最后一行仓库名称请你自己找对应的镜像填上。",[450,990,991,992,998],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[993,994,995],"em",{},[400,996,997],{},"请不要加","。",[416,1000,1002],{"className":418,"code":1001,"language":420,"meta":395,"style":395},"--ulimit nofile=1024:524288 \\\n",[422,1003,1004],{"__ignoreMap":395},[425,1005,1006,1009,1012],{"class":427,"line":428},[425,1007,1008],{"class":431},"--ulimit",[425,1010,1011],{"class":435}," nofile=1024:524288",[425,1013,695],{"class":691},[19,1015,1016,1017,1022],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[993,1018,1019],{},[400,1020,1021],{},"不建议","**.**",[416,1024,1026],{"className":418,"code":1025,"language":420,"meta":395,"style":395},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[422,1027,1028,1055,1064],{"__ignoreMap":395},[425,1029,1030,1033,1036,1038,1040,1042,1044,1046,1048,1051,1053],{"class":427,"line":428},[425,1031,1032],{"class":431},"--user",[425,1034,1035],{"class":701}," $(",[425,1037,889],{"class":431},[425,1039,892],{"class":691},[425,1041,895],{"class":701},[425,1043,948],{"class":435},[425,1045,886],{"class":701},[425,1047,889],{"class":431},[425,1049,1050],{"class":691}," -g",[425,1052,938],{"class":701},[425,1054,732],{"class":691},[425,1056,1057,1059,1062],{"class":427,"line":698},[425,1058,844],{"class":701},[425,1060,1061],{"class":435},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[425,1063,695],{"class":691},[425,1065,1066,1068,1071],{"class":427,"line":710},[425,1067,844],{"class":701},[425,1069,1070],{"class":435},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[425,1072,695],{"class":691},[1074,1075,1076],"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 .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":395,"searchDepth":698,"depth":698,"links":1078},[1079,1080,1081],{"id":16,"depth":710,"text":17},{"id":29,"depth":710,"text":30},{"id":461,"depth":710,"text":464},"md",{},true,"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":5,"description":395},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",[1090,6162,7270,8690,11678,13029,14518,15605,24368,24381,24975,25001,25125,25366,25431,25449,25462,25509,25632,25800,25999,26178,26383,26519,26614,26651,26664,26974,27713,28420,28441,29228,30859,31010,31023,31035,31336,51148,51163,51180,51213,54085,77433,93578,93599,93712,93833,94603,95266,95627,95665,95771,95871,95914,95940,96001,97655,97756,97781,98272,98772,99852,100135,100877,101379,101391,103407,105071,106574,108272,110189,112108,114130,117600,118032,118495,119244,122188,122536,122558,122914,126221,126233,126636,126659,126806,126973,127178,127479,128036,128693,130624,132222,132871,134365,135796,137031,138725,140477,142887,143003,143938,144149,145034,146269,146497,146510,147665,150077,152445,155766,158243,159887,161664,163677,166729,168909,171436,173630],{"id":1091,"title":1092,"body":1093,"description":395,"extension":1082,"meta":6157,"navigation":1084,"path":6158,"seo":6159,"stem":6160,"__hash__":6161},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":1094,"toc":6129},[1095,1098,1103,1106,1110,1121,1125,1129,1132,1135,1138,1141,1144,1173,1177,1180,1183,1186,1189,1241,1245,1263,1265,1279,1282,1290,1293,2146,2153,2169,2173,2259,2263,2269,2355,2359,2397,2401,2465,2469,2473,2479,2490,2494,2499,2503,2508,2512,2517,2521,2525,2530,2788,2793,2931,2936,3192,3195,3203,3207,3212,3315,3318,3624,3633,3734,3737,3740,3743,3746,4006,4011,4151,4154,4333,4336,4464,4467,4619,4623,4628,4631,4642,4650,4653,4760,4764,4768,4773,4823,4828,4833,4857,4862,4915,4918,4923,5100,5105,5390,5395,5792,5796,5801,5858,5863,5871,5874,6014,6017,6126],[10,1096,1092],{"id":1097},"_1基础入门",[1099,1100,1102],"h2",{"id":1101},"_11注释","1.1注释",[19,1104,1105],{},"\u002F\u002F或者\u002F* *\u002F",[1099,1107,1109],{"id":1108},"_12命名","1.2命名",[972,1111,1112,1115,1118],{},[450,1113,1114],{},"字母数字下划线",[450,1116,1117],{},"开头必须是字母或_",[450,1119,1120],{},"不能使用关键词",[1099,1122,1124],{"id":1123},"_13数据类型","1.3数据类型",[14,1126,1128],{"id":1127},"_131整形","1.3.1整形",[19,1130,1131],{},"short 短整形 2",[19,1133,1134],{},"int 整形 4",[19,1136,1137],{},"long 长整形 win4 linux32位4 linux64位8",[19,1139,1140],{},"long long 长长整形 8",[19,1142,1143],{},"利用sizeof可以求数据类型占用的内存空间大小",[416,1145,1149],{"className":1146,"code":1147,"language":1148,"meta":395,"style":395},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[422,1150,1151,1166],{"__ignoreMap":395},[425,1152,1153,1157,1160,1163],{"class":427,"line":428},[425,1154,1156],{"class":1155},"szBVR","sizeof",[425,1158,1159],{"class":701},"(",[425,1161,1162],{"class":1155},"int",[425,1164,1165],{"class":701},")\n",[425,1167,1168,1170],{"class":427,"line":698},[425,1169,1156],{"class":1155},[425,1171,1172],{"class":701},"(num)\n",[14,1174,1176],{"id":1175},"_132浮点型","1.3.2浮点型",[19,1178,1179],{},"float 单精度 4节 7位有效数字",[19,1181,1182],{},"double 双精度 8节 15-16有效数字",[19,1184,1185],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,1187,1188],{},"注意点：",[416,1190,1192],{"className":1146,"code":1191,"language":1148,"meta":395,"style":395},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[422,1193,1194,1218],{"__ignoreMap":395},[425,1195,1196,1199,1202,1205,1208,1211,1214],{"class":427,"line":428},[425,1197,1198],{"class":1155},"float",[425,1200,1201],{"class":701}," f1",[425,1203,1204],{"class":1155},"=",[425,1206,1207],{"class":691},"3.14",[425,1209,1210],{"class":1155},"f",[425,1212,1213],{"class":701},";",[425,1215,1217],{"class":1216},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[425,1219,1220,1222,1225,1227,1230,1233,1236,1238],{"class":427,"line":698},[425,1221,1198],{"class":1155},[425,1223,1224],{"class":701}," f2",[425,1226,1204],{"class":1155},[425,1228,1229],{"class":691},"3",[425,1231,1232],{"class":1155},"e",[425,1234,1235],{"class":691},"2",[425,1237,1213],{"class":701},[425,1239,1240],{"class":1216}," \u002F\u002F科学记数法\n",[14,1242,1244],{"id":1243},"_133字符型","1.3.3字符型",[416,1246,1248],{"className":1146,"code":1247,"language":1148,"meta":395,"style":395},"char ch='a'\n",[422,1249,1250],{"__ignoreMap":395},[425,1251,1252,1255,1258,1260],{"class":427,"line":428},[425,1253,1254],{"class":1155},"char",[425,1256,1257],{"class":701}," ch",[425,1259,1204],{"class":1155},[425,1261,1262],{"class":435},"'a'\n",[19,1264,1188],{},[972,1266,1267,1270,1273,1276],{},[450,1268,1269],{},"在显示字符型变量时，只能单引号，双引号x",[450,1271,1272],{},"单引号内只能一个字符，不能字符串",[450,1274,1275],{},"c和c++字符型变量只占用一个字符",[450,1277,1278],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,1280,1281],{},"ASCII码大致由以下两部分组成：",[972,1283,1284,1287],{},[450,1285,1286],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[450,1288,1289],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,1291,1292],{},"ASCII码表格：",[35,1294,1295,1335],{},[38,1296,1297],{},[41,1298,1299,1305,1310,1314,1319,1323,1327,1331],{},[44,1300,1301,1304],{},[400,1302,1303],{},"ASCII","值",[44,1306,1307],{},[400,1308,1309],{},"控制字符",[44,1311,1312,1304],{},[400,1313,1303],{},[44,1315,1316],{},[400,1317,1318],{},"字符",[44,1320,1321,1304],{},[400,1322,1303],{},[44,1324,1325],{},[400,1326,1318],{},[44,1328,1329,1304],{},[400,1330,1303],{},[44,1332,1333],{},[400,1334,1318],{},[55,1336,1337,1363,1388,1413,1438,1464,1489,1514,1540,1565,1590,1616,1642,1667,1693,1719,1745,1769,1794,1819,1844,1869,1894,1919,1944,1969,1994,2019,2044,2069,2094,2120],{},[41,1338,1339,1342,1345,1348,1351,1354,1357,1360],{},[60,1340,1341],{},"0",[60,1343,1344],{},"NUT",[60,1346,1347],{},"32",[60,1349,1350],{},"(space)",[60,1352,1353],{},"64",[60,1355,1356],{},"@",[60,1358,1359],{},"96",[60,1361,1362],{},"、",[41,1364,1365,1368,1371,1374,1377,1380,1383,1386],{},[60,1366,1367],{},"1",[60,1369,1370],{},"SOH",[60,1372,1373],{},"33",[60,1375,1376],{},"!",[60,1378,1379],{},"65",[60,1381,1382],{},"A",[60,1384,1385],{},"97",[60,1387,22],{},[41,1389,1390,1392,1395,1398,1401,1404,1407,1410],{},[60,1391,1235],{},[60,1393,1394],{},"STX",[60,1396,1397],{},"34",[60,1399,1400],{},"\"",[60,1402,1403],{},"66",[60,1405,1406],{},"B",[60,1408,1409],{},"98",[60,1411,1412],{},"b",[41,1414,1415,1417,1420,1423,1426,1429,1432,1435],{},[60,1416,1229],{},[60,1418,1419],{},"ETX",[60,1421,1422],{},"35",[60,1424,1425],{},"#",[60,1427,1428],{},"67",[60,1430,1431],{},"C",[60,1433,1434],{},"99",[60,1436,1437],{},"c",[41,1439,1440,1443,1446,1449,1452,1455,1458,1461],{},[60,1441,1442],{},"4",[60,1444,1445],{},"EOT",[60,1447,1448],{},"36",[60,1450,1451],{},"$",[60,1453,1454],{},"68",[60,1456,1457],{},"D",[60,1459,1460],{},"100",[60,1462,1463],{},"d",[41,1465,1466,1469,1472,1475,1478,1481,1484,1487],{},[60,1467,1468],{},"5",[60,1470,1471],{},"ENQ",[60,1473,1474],{},"37",[60,1476,1477],{},"%",[60,1479,1480],{},"69",[60,1482,1483],{},"E",[60,1485,1486],{},"101",[60,1488,1232],{},[41,1490,1491,1494,1497,1500,1503,1506,1509,1512],{},[60,1492,1493],{},"6",[60,1495,1496],{},"ACK",[60,1498,1499],{},"38",[60,1501,1502],{},"&",[60,1504,1505],{},"70",[60,1507,1508],{},"F",[60,1510,1511],{},"102",[60,1513,1210],{},[41,1515,1516,1519,1522,1525,1528,1531,1534,1537],{},[60,1517,1518],{},"7",[60,1520,1521],{},"BEL",[60,1523,1524],{},"39",[60,1526,1527],{},",",[60,1529,1530],{},"71",[60,1532,1533],{},"G",[60,1535,1536],{},"103",[60,1538,1539],{},"g",[41,1541,1542,1545,1548,1551,1553,1556,1559,1562],{},[60,1543,1544],{},"8",[60,1546,1547],{},"BS",[60,1549,1550],{},"40",[60,1552,1159],{},[60,1554,1555],{},"72",[60,1557,1558],{},"H",[60,1560,1561],{},"104",[60,1563,1564],{},"h",[41,1566,1567,1570,1573,1576,1578,1581,1584,1587],{},[60,1568,1569],{},"9",[60,1571,1572],{},"HT",[60,1574,1575],{},"41",[60,1577,895],{},[60,1579,1580],{},"73",[60,1582,1583],{},"I",[60,1585,1586],{},"105",[60,1588,1589],{},"i",[41,1591,1592,1595,1598,1601,1604,1607,1610,1613],{},[60,1593,1594],{},"10",[60,1596,1597],{},"LF",[60,1599,1600],{},"42",[60,1602,1603],{},"*",[60,1605,1606],{},"74",[60,1608,1609],{},"J",[60,1611,1612],{},"106",[60,1614,1615],{},"j",[41,1617,1618,1621,1624,1627,1630,1633,1636,1639],{},[60,1619,1620],{},"11",[60,1622,1623],{},"VT",[60,1625,1626],{},"43",[60,1628,1629],{},"+",[60,1631,1632],{},"75",[60,1634,1635],{},"K",[60,1637,1638],{},"107",[60,1640,1641],{},"k",[41,1643,1644,1647,1650,1653,1655,1658,1661,1664],{},[60,1645,1646],{},"12",[60,1648,1649],{},"FF",[60,1651,1652],{},"44",[60,1654,1527],{},[60,1656,1657],{},"76",[60,1659,1660],{},"L",[60,1662,1663],{},"108",[60,1665,1666],{},"l",[41,1668,1669,1672,1675,1678,1681,1684,1687,1690],{},[60,1670,1671],{},"13",[60,1673,1674],{},"CR",[60,1676,1677],{},"45",[60,1679,1680],{},"-",[60,1682,1683],{},"77",[60,1685,1686],{},"M",[60,1688,1689],{},"109",[60,1691,1692],{},"m",[41,1694,1695,1698,1701,1704,1707,1710,1713,1716],{},[60,1696,1697],{},"14",[60,1699,1700],{},"SO",[60,1702,1703],{},"46",[60,1705,1706],{},".",[60,1708,1709],{},"78",[60,1711,1712],{},"N",[60,1714,1715],{},"110",[60,1717,1718],{},"n",[41,1720,1721,1724,1727,1730,1733,1736,1739,1742],{},[60,1722,1723],{},"15",[60,1725,1726],{},"SI",[60,1728,1729],{},"47",[60,1731,1732],{},"\u002F",[60,1734,1735],{},"79",[60,1737,1738],{},"O",[60,1740,1741],{},"111",[60,1743,1744],{},"o",[41,1746,1747,1750,1753,1756,1758,1761,1764,1767],{},[60,1748,1749],{},"16",[60,1751,1752],{},"DLE",[60,1754,1755],{},"48",[60,1757,1341],{},[60,1759,1760],{},"80",[60,1762,1763],{},"P",[60,1765,1766],{},"112",[60,1768,19],{},[41,1770,1771,1774,1777,1780,1782,1785,1788,1791],{},[60,1772,1773],{},"17",[60,1775,1776],{},"DCI",[60,1778,1779],{},"49",[60,1781,1367],{},[60,1783,1784],{},"81",[60,1786,1787],{},"Q",[60,1789,1790],{},"113",[60,1792,1793],{},"q",[41,1795,1796,1799,1802,1805,1807,1810,1813,1816],{},[60,1797,1798],{},"18",[60,1800,1801],{},"DC2",[60,1803,1804],{},"50",[60,1806,1235],{},[60,1808,1809],{},"82",[60,1811,1812],{},"R",[60,1814,1815],{},"114",[60,1817,1818],{},"r",[41,1820,1821,1824,1827,1830,1832,1835,1838,1841],{},[60,1822,1823],{},"19",[60,1825,1826],{},"DC3",[60,1828,1829],{},"51",[60,1831,1229],{},[60,1833,1834],{},"83",[60,1836,1837],{},"S",[60,1839,1840],{},"115",[60,1842,1843],{},"s",[41,1845,1846,1849,1852,1855,1857,1860,1863,1866],{},[60,1847,1848],{},"20",[60,1850,1851],{},"DC4",[60,1853,1854],{},"52",[60,1856,1442],{},[60,1858,1859],{},"84",[60,1861,1862],{},"T",[60,1864,1865],{},"116",[60,1867,1868],{},"t",[41,1870,1871,1874,1877,1880,1882,1885,1888,1891],{},[60,1872,1873],{},"21",[60,1875,1876],{},"NAK",[60,1878,1879],{},"53",[60,1881,1468],{},[60,1883,1884],{},"85",[60,1886,1887],{},"U",[60,1889,1890],{},"117",[60,1892,1893],{},"u",[41,1895,1896,1899,1902,1905,1907,1910,1913,1916],{},[60,1897,1898],{},"22",[60,1900,1901],{},"SYN",[60,1903,1904],{},"54",[60,1906,1493],{},[60,1908,1909],{},"86",[60,1911,1912],{},"V",[60,1914,1915],{},"118",[60,1917,1918],{},"v",[41,1920,1921,1924,1927,1930,1932,1935,1938,1941],{},[60,1922,1923],{},"23",[60,1925,1926],{},"TB",[60,1928,1929],{},"55",[60,1931,1518],{},[60,1933,1934],{},"87",[60,1936,1937],{},"W",[60,1939,1940],{},"119",[60,1942,1943],{},"w",[41,1945,1946,1949,1952,1955,1957,1960,1963,1966],{},[60,1947,1948],{},"24",[60,1950,1951],{},"CAN",[60,1953,1954],{},"56",[60,1956,1544],{},[60,1958,1959],{},"88",[60,1961,1962],{},"X",[60,1964,1965],{},"120",[60,1967,1968],{},"x",[41,1970,1971,1974,1977,1980,1982,1985,1988,1991],{},[60,1972,1973],{},"25",[60,1975,1976],{},"EM",[60,1978,1979],{},"57",[60,1981,1569],{},[60,1983,1984],{},"89",[60,1986,1987],{},"Y",[60,1989,1990],{},"121",[60,1992,1993],{},"y",[41,1995,1996,1999,2002,2005,2007,2010,2013,2016],{},[60,1997,1998],{},"26",[60,2000,2001],{},"SUB",[60,2003,2004],{},"58",[60,2006,948],{},[60,2008,2009],{},"90",[60,2011,2012],{},"Z",[60,2014,2015],{},"122",[60,2017,2018],{},"z",[41,2020,2021,2024,2027,2030,2032,2035,2038,2041],{},[60,2022,2023],{},"27",[60,2025,2026],{},"ESC",[60,2028,2029],{},"59",[60,2031,1213],{},[60,2033,2034],{},"91",[60,2036,2037],{},"[",[60,2039,2040],{},"123",[60,2042,2043],{},"{",[41,2045,2046,2049,2052,2055,2058,2061,2063,2066],{},[60,2047,2048],{},"28",[60,2050,2051],{},"FS",[60,2053,2054],{},"60",[60,2056,2057],{},"\u003C",[60,2059,2060],{},"92",[60,2062,1732],{},[60,2064,2065],{},"124",[60,2067,2068],{},"|",[41,2070,2071,2074,2077,2080,2082,2085,2088,2091],{},[60,2072,2073],{},"29",[60,2075,2076],{},"GS",[60,2078,2079],{},"61",[60,2081,1204],{},[60,2083,2084],{},"93",[60,2086,2087],{},"]",[60,2089,2090],{},"125",[60,2092,2093],{},"}",[41,2095,2096,2099,2102,2105,2108,2111,2114,2117],{},[60,2097,2098],{},"30",[60,2100,2101],{},"RS",[60,2103,2104],{},"62",[60,2106,2107],{},">",[60,2109,2110],{},"94",[60,2112,2113],{},"^",[60,2115,2116],{},"126",[60,2118,2119],{},"`",[41,2121,2122,2125,2128,2131,2134,2137,2140,2143],{},[60,2123,2124],{},"31",[60,2126,2127],{},"US",[60,2129,2130],{},"63",[60,2132,2133],{},"?",[60,2135,2136],{},"95",[60,2138,2139],{},"_",[60,2141,2142],{},"127",[60,2144,2145],{},"DEL",[19,2147,2148,2149,2152],{},"ASCII 码大致由以下",[400,2150,2151],{},"两部分组","成：",[447,2154,2155,2162],{},[450,2156,2157,2158,2161],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[400,2159,2160],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[450,2163,2164,2165,2168],{},"ASCII 打印字符：数字 ",[400,2166,2167],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[14,2170,2172],{"id":2171},"_134转义字符","1.3.4转义字符",[416,2174,2176],{"className":1146,"code":2175,"language":1148,"meta":395,"style":395},"\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",[422,2177,2178,2183,2199,2213,2218,2231,2236],{"__ignoreMap":395},[425,2179,2180],{"class":427,"line":428},[425,2181,2182],{"class":1216},"\u002F\u002F换行符\n",[425,2184,2185,2188,2191,2194,2196],{"class":427,"line":698},[425,2186,2187],{"class":701},"cout ",[425,2189,2190],{"class":1155},"\u003C\u003C",[425,2192,2193],{"class":435},"\"hello world\u002Fn\"",[425,2195,1213],{"class":701},[425,2197,2198],{"class":1216}," \u002F\u002F就等同于如下：\n",[425,2200,2201,2203,2205,2208,2210],{"class":427,"line":710},[425,2202,2187],{"class":701},[425,2204,2190],{"class":1155},[425,2206,2207],{"class":435},"\"hello world\"",[425,2209,2190],{"class":1155},[425,2211,2212],{"class":701},"endl;\n",[425,2214,2215],{"class":427,"line":721},[425,2216,2217],{"class":1216},"\u002F\u002F反斜杠\n",[425,2219,2220,2222,2224,2227,2229],{"class":427,"line":735},[425,2221,2187],{"class":701},[425,2223,2190],{"class":1155},[425,2225,2226],{"class":435},"\"\u002F\u002F\"",[425,2228,2190],{"class":1155},[425,2230,2212],{"class":701},[425,2232,2233],{"class":427,"line":743},[425,2234,2235],{"class":1216},"\u002F\u002F水平制表符\n",[425,2237,2238,2240,2242,2245,2248,2251,2253,2256],{"class":427,"line":751},[425,2239,2187],{"class":701},[425,2241,2190],{"class":1155},[425,2243,2244],{"class":435},"\"aaaa",[425,2246,2247],{"class":691},"\\t",[425,2249,2250],{"class":435},"helloworld\"",[425,2252,2190],{"class":1155},[425,2254,2255],{"class":701},"endl;",[425,2257,2258],{"class":1216}," \u002F\u002F输出窗口时有对齐效果\n",[14,2260,2262],{"id":2261},"_135字符串型","1.3.5字符串型",[19,2264,2265,2266,2268],{},"char 变量名",[425,2267],{},"=\"字符串值\"",[416,2270,2272],{"className":1146,"code":2271,"language":1148,"meta":395,"style":395},"\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",[422,2273,2274,2279,2284,2289,2294,2308,2321,2326,2331,2342],{"__ignoreMap":395},[425,2275,2276],{"class":427,"line":428},[425,2277,2278],{"class":1216},"\u002F\u002Fc风格字符串\n",[425,2280,2281],{"class":427,"line":698},[425,2282,2283],{"class":1216},"\u002F\u002F注意事项：\n",[425,2285,2286],{"class":427,"line":710},[425,2287,2288],{"class":1216},"\u002F\u002F1.char字符串名[]\n",[425,2290,2291],{"class":427,"line":721},[425,2292,2293],{"class":1216},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[425,2295,2296,2298,2301,2303,2305],{"class":427,"line":735},[425,2297,1254],{"class":1155},[425,2299,2300],{"class":701}," str[]",[425,2302,1204],{"class":1155},[425,2304,2207],{"class":435},[425,2306,2307],{"class":701},";\n",[425,2309,2310,2312,2314,2317,2319],{"class":427,"line":743},[425,2311,2187],{"class":701},[425,2313,2190],{"class":1155},[425,2315,2316],{"class":701},"str",[425,2318,2190],{"class":1155},[425,2320,2212],{"class":701},[425,2322,2323],{"class":427,"line":751},[425,2324,2325],{"class":1216},"\u002F\u002Fc++风格字符串\n",[425,2327,2328],{"class":427,"line":759},[425,2329,2330],{"class":1216},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[425,2332,2333,2336,2338,2340],{"class":427,"line":770},[425,2334,2335],{"class":701},"string str2",[425,2337,1204],{"class":1155},[425,2339,2207],{"class":435},[425,2341,2307],{"class":701},[425,2343,2344,2346,2348,2351,2353],{"class":427,"line":780},[425,2345,2187],{"class":701},[425,2347,2190],{"class":1155},[425,2349,2350],{"class":701},"str2",[425,2352,2190],{"class":1155},[425,2354,2212],{"class":701},[14,2356,2358],{"id":2357},"_136布尔类型bool","1.3.6布尔类型bool",[416,2360,2362],{"className":1146,"code":2361,"language":1148,"meta":395,"style":395},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[422,2363,2364,2379],{"__ignoreMap":395},[425,2365,2366,2369,2372,2374,2377],{"class":427,"line":428},[425,2367,2368],{"class":1155},"bool",[425,2370,2371],{"class":701}," flag",[425,2373,1204],{"class":1155},[425,2375,2376],{"class":691},"true",[425,2378,2307],{"class":701},[425,2380,2381,2384,2387,2390,2392,2394],{"class":427,"line":698},[425,2382,2383],{"class":701},"cout",[425,2385,2386],{"class":1155},"\u003C\u003Csizeof",[425,2388,2389],{"class":701},"(flag)",[425,2391,2190],{"class":1155},[425,2393,2255],{"class":701},[425,2395,2396],{"class":1216}," \u002F\u002F查看布尔占内存空间\n",[1099,2398,2400],{"id":2399},"_14键盘输入cin","1.4键盘输入cin",[416,2402,2404],{"className":1146,"code":2403,"language":1148,"meta":395,"style":395},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[422,2405,2406,2419,2436,2447],{"__ignoreMap":395},[425,2407,2408,2410,2413,2415,2417],{"class":427,"line":428},[425,2409,1162],{"class":1155},[425,2411,2412],{"class":701}," a",[425,2414,1204],{"class":1155},[425,2416,1341],{"class":691},[425,2418,2307],{"class":701},[425,2420,2421,2423,2425,2428,2430,2432,2434],{"class":427,"line":698},[425,2422,2383],{"class":701},[425,2424,2190],{"class":1155},[425,2426,2427],{"class":435},"\"请给整型变量a赋值\"",[425,2429,2190],{"class":1155},[425,2431,22],{"class":701},[425,2433,2190],{"class":1155},[425,2435,2212],{"class":701},[425,2437,2438,2441,2444],{"class":427,"line":710},[425,2439,2440],{"class":701},"cin ",[425,2442,2443],{"class":1155},">>",[425,2445,2446],{"class":701}," a;\n",[425,2448,2449,2451,2453,2456,2459,2461,2463],{"class":427,"line":721},[425,2450,2187],{"class":701},[425,2452,2190],{"class":1155},[425,2454,2455],{"class":435}," \"整型变量a=\"",[425,2457,2458],{"class":1155}," \u003C\u003C",[425,2460,22],{"class":701},[425,2462,2190],{"class":1155},[425,2464,2212],{"class":701},[1099,2466,2468],{"id":2467},"_15运算符","1.5运算符",[14,2470,2472],{"id":2471},"_151算术运算符","1.5.1算术运算符",[19,2474,2475,2478],{},[393,2476],{"alt":395,"src":2477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[972,2480,2481,2484,2487],{},[450,2482,2483],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[450,2485,2486],{},"两个小数不可以做取模运算",[450,2488,2489],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[14,2491,2493],{"id":2492},"_152赋值运算符","1.5.2赋值运算符",[19,2495,2496],{},[393,2497],{"alt":395,"src":2498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[14,2500,2502],{"id":2501},"_153比较运算符","1.5.3比较运算符",[19,2504,2505],{},[393,2506],{"alt":395,"src":2507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[14,2509,2511],{"id":2510},"_154逻辑运算符","1.5.4逻辑运算符",[19,2513,2514],{},[393,2515],{"alt":395,"src":2516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[1099,2518,2520],{"id":2519},"_16程序流程结构","1.6程序流程结构",[14,2522,2524],{"id":2523},"_161选择结构","1.6.1选择结构",[972,2526,2527],{},[450,2528,2529],{},"if语句\n单行、多行、多条件if语句",[416,2531,2533],{"className":1146,"code":2532,"language":1148,"meta":395,"style":395},"\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",[422,2534,2535,2540,2555,2560,2574,2579,2584,2593,2606,2610,2623,2627,2632,2636,2649,2653,2658,2678,2682,2695,2699,2727,2731,2748,2753,2758,2763,2777,2782],{"__ignoreMap":395},[425,2536,2537],{"class":427,"line":428},[425,2538,2539],{"class":1216},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[425,2541,2542,2545,2548,2550,2553],{"class":427,"line":698},[425,2543,2544],{"class":1155},"if",[425,2546,2547],{"class":701},"(score",[425,2549,2107],{"class":1155},[425,2551,2552],{"class":691},"600",[425,2554,1165],{"class":701},[425,2556,2557],{"class":427,"line":710},[425,2558,2559],{"class":701},"{\n",[425,2561,2562,2565,2567,2570,2572],{"class":427,"line":721},[425,2563,2564],{"class":701},"    cout",[425,2566,2190],{"class":1155},[425,2568,2569],{"class":435},"'这是单行if语句'",[425,2571,2190],{"class":1155},[425,2573,2212],{"class":701},[425,2575,2576],{"class":427,"line":735},[425,2577,2578],{"class":701},"}\n",[425,2580,2581],{"class":427,"line":743},[425,2582,2583],{"class":1216},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[425,2585,2586,2588,2590],{"class":427,"line":751},[425,2587,2440],{"class":701},[425,2589,2443],{"class":1155},[425,2591,2592],{"class":701}," score\n",[425,2594,2595,2597,2599,2602,2604],{"class":427,"line":759},[425,2596,2544],{"class":1155},[425,2598,2547],{"class":701},[425,2600,2601],{"class":1155},"\u003C=",[425,2603,2552],{"class":691},[425,2605,1165],{"class":701},[425,2607,2608],{"class":427,"line":770},[425,2609,2559],{"class":701},[425,2611,2612,2614,2616,2619,2621],{"class":427,"line":780},[425,2613,2564],{"class":701},[425,2615,2443],{"class":1155},[425,2617,2618],{"class":435},"\"小于等于600\"",[425,2620,2190],{"class":1155},[425,2622,2212],{"class":701},[425,2624,2625],{"class":427,"line":790},[425,2626,2578],{"class":701},[425,2628,2629],{"class":427,"line":805},[425,2630,2631],{"class":1155},"else\n",[425,2633,2634],{"class":427,"line":818},[425,2635,2559],{"class":701},[425,2637,2638,2640,2642,2645,2647],{"class":427,"line":831},[425,2639,2564],{"class":701},[425,2641,2443],{"class":1155},[425,2643,2644],{"class":435},"\"大于600\"",[425,2646,2443],{"class":1155},[425,2648,2212],{"class":701},[425,2650,2651],{"class":427,"line":841},[425,2652,2578],{"class":701},[425,2654,2655],{"class":427,"line":852},[425,2656,2657],{"class":1216},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[425,2659,2660,2662,2665,2667,2669,2672,2674,2676],{"class":427,"line":862},[425,2661,2544],{"class":1155},[425,2663,2664],{"class":701}," (",[425,2666,1341],{"class":691},[425,2668,2057],{"class":1155},[425,2670,2671],{"class":701},"num",[425,2673,2057],{"class":1155},[425,2675,1460],{"class":691},[425,2677,1165],{"class":701},[425,2679,2680],{"class":427,"line":878},[425,2681,2559],{"class":701},[425,2683,2684,2686,2688,2691,2693],{"class":427,"line":914},[425,2685,2564],{"class":701},[425,2687,2190],{"class":1155},[425,2689,2690],{"class":435},"\"小于100\"",[425,2692,2190],{"class":1155},[425,2694,2212],{"class":701},[425,2696,2697],{"class":427,"line":943},[425,2698,2578],{"class":701},[425,2700,2701,2704,2707,2710,2713,2715,2718,2720,2722,2725],{"class":427,"line":956},[425,2702,2703],{"class":1155},"else",[425,2705,2706],{"class":1155}," if",[425,2708,2709],{"class":701}," (nmu",[425,2711,2712],{"class":1155},">=",[425,2714,1460],{"class":691},[425,2716,2717],{"class":1155},"&&",[425,2719,2671],{"class":701},[425,2721,2057],{"class":1155},[425,2723,2724],{"class":691},"200",[425,2726,1165],{"class":701},[425,2728,2729],{"class":427,"line":964},[425,2730,2559],{"class":701},[425,2732,2734,2736,2738,2741,2743,2745],{"class":427,"line":2733},23,[425,2735,2564],{"class":701},[425,2737,2190],{"class":1155},[425,2739,2740],{"class":435},"\"不小于100且小于200\"",[425,2742,2190],{"class":1155},[425,2744,2255],{"class":701},[425,2746,2747],{"class":1216}," \u002F\u002F可以无限else if,python中是elif：\n",[425,2749,2751],{"class":427,"line":2750},24,[425,2752,2578],{"class":701},[425,2754,2756],{"class":427,"line":2755},25,[425,2757,2631],{"class":1155},[425,2759,2761],{"class":427,"line":2760},26,[425,2762,2559],{"class":701},[425,2764,2766,2768,2770,2773,2775],{"class":427,"line":2765},27,[425,2767,2564],{"class":701},[425,2769,2190],{"class":1155},[425,2771,2772],{"class":435},"\"不小于200\"",[425,2774,2190],{"class":1155},[425,2776,2212],{"class":701},[425,2778,2780],{"class":427,"line":2779},28,[425,2781,2578],{"class":701},[425,2783,2785],{"class":427,"line":2784},29,[425,2786,2787],{"class":1216},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[972,2789,2790],{"start":698},[450,2791,2792],{},"三目运算符",[416,2794,2796],{"className":1146,"code":2795,"language":1148,"meta":395,"style":395},"\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",[422,2797,2798,2803,2808,2834,2856,2873,2878,2901,2916],{"__ignoreMap":395},[425,2799,2800],{"class":427,"line":428},[425,2801,2802],{"class":1216},"\u002F\u002F创建三个变量a,b,c\n",[425,2804,2805],{"class":427,"line":698},[425,2806,2807],{"class":1216},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[425,2809,2810,2812,2814,2816,2818,2821,2823,2825,2828,2830,2832],{"class":427,"line":710},[425,2811,1162],{"class":1155},[425,2813,2412],{"class":701},[425,2815,1204],{"class":1155},[425,2817,1848],{"class":691},[425,2819,2820],{"class":701},",b",[425,2822,1204],{"class":1155},[425,2824,1594],{"class":691},[425,2826,2827],{"class":701},",c",[425,2829,1204],{"class":1155},[425,2831,1341],{"class":691},[425,2833,2307],{"class":701},[425,2835,2836,2838,2840,2843,2845,2847,2849,2851,2853],{"class":427,"line":721},[425,2837,1437],{"class":701},[425,2839,1204],{"class":1155},[425,2841,2842],{"class":701},"(a",[425,2844,2107],{"class":1155},[425,2846,1412],{"class":701},[425,2848,2133],{"class":1155},[425,2850,22],{"class":701},[425,2852,948],{"class":1155},[425,2854,2855],{"class":701},"b)\n",[425,2857,2858,2860,2862,2865,2867,2869,2871],{"class":427,"line":735},[425,2859,2383],{"class":701},[425,2861,2190],{"class":1155},[425,2863,2864],{"class":435},"\"c=\"",[425,2866,2190],{"class":1155},[425,2868,1437],{"class":701},[425,2870,2190],{"class":1155},[425,2872,2212],{"class":701},[425,2874,2875],{"class":427,"line":743},[425,2876,2877],{"class":1216},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[425,2879,2880,2882,2884,2886,2888,2890,2892,2895,2897,2899],{"class":427,"line":751},[425,2881,2842],{"class":701},[425,2883,2107],{"class":1155},[425,2885,1412],{"class":701},[425,2887,2133],{"class":1155},[425,2889,22],{"class":701},[425,2891,948],{"class":1155},[425,2893,2894],{"class":701},"b)",[425,2896,1204],{"class":1155},[425,2898,1460],{"class":691},[425,2900,2307],{"class":701},[425,2902,2903,2905,2907,2909,2911,2913],{"class":427,"line":759},[425,2904,2383],{"class":701},[425,2906,2190],{"class":1155},[425,2908,22],{"class":701},[425,2910,2190],{"class":1155},[425,2912,2255],{"class":701},[425,2914,2915],{"class":1216}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[425,2917,2918,2920,2922,2924,2926,2928],{"class":427,"line":770},[425,2919,2383],{"class":701},[425,2921,2190],{"class":1155},[425,2923,1412],{"class":701},[425,2925,2190],{"class":1155},[425,2927,2255],{"class":701},[425,2929,2930],{"class":1216}," \u002F\u002F10   a>b,b还是原值\n",[972,2932,2933],{"start":710},[450,2934,2935],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[416,2937,2939],{"className":1146,"code":2938,"language":1148,"meta":395,"style":395},"\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",[422,2940,2941,2946,2954,2967,2977,2981,2995,3008,3018,3026,3031,3056,3077,3099,3120,3142,3163,3183,3188],{"__ignoreMap":395},[425,2942,2943],{"class":427,"line":428},[425,2944,2945],{"class":1216},"\u002F\u002F案例-电影打分\n",[425,2947,2948,2951],{"class":427,"line":698},[425,2949,2950],{"class":1155},"#include",[425,2952,2953],{"class":435},"\u003Ciostream>\n",[425,2955,2956,2959,2962,2965],{"class":427,"line":710},[425,2957,2958],{"class":1155},"using",[425,2960,2961],{"class":1155}," namespace",[425,2963,2964],{"class":431}," std",[425,2966,2307],{"class":701},[425,2968,2969,2971,2974],{"class":427,"line":721},[425,2970,1162],{"class":1155},[425,2972,2973],{"class":431}," main",[425,2975,2976],{"class":701},"()\n",[425,2978,2979],{"class":427,"line":735},[425,2980,2559],{"class":701},[425,2982,2983,2986,2989,2991,2993],{"class":427,"line":743},[425,2984,2985],{"class":1155},"    int",[425,2987,2988],{"class":701}," score",[425,2990,1204],{"class":1155},[425,2992,1341],{"class":691},[425,2994,2307],{"class":701},[425,2996,2997,2999,3001,3004,3006],{"class":427,"line":751},[425,2998,2564],{"class":701},[425,3000,2190],{"class":1155},[425,3002,3003],{"class":435},"\"电影打分：\"",[425,3005,2190],{"class":1155},[425,3007,2212],{"class":701},[425,3009,3010,3013,3015],{"class":427,"line":759},[425,3011,3012],{"class":701},"    cin",[425,3014,2443],{"class":1155},[425,3016,3017],{"class":701},"score;\n",[425,3019,3020,3023],{"class":427,"line":770},[425,3021,3022],{"class":1155},"    switch",[425,3024,3025],{"class":701},"(score)\n",[425,3027,3028],{"class":427,"line":780},[425,3029,3030],{"class":701},"    {\n",[425,3032,3033,3036,3039,3042,3044,3047,3049,3051,3054],{"class":427,"line":790},[425,3034,3035],{"class":1155},"        case",[425,3037,3038],{"class":691}," 10",[425,3040,3041],{"class":701},":cout",[425,3043,2190],{"class":1155},[425,3045,3046],{"class":435},"\"经典\"",[425,3048,2190],{"class":1155},[425,3050,2255],{"class":701},[425,3052,3053],{"class":1155},"break",[425,3055,2307],{"class":701},[425,3057,3058,3060,3063,3065,3067,3069,3071,3073,3075],{"class":427,"line":805},[425,3059,3035],{"class":1155},[425,3061,3062],{"class":691}," 9",[425,3064,3041],{"class":701},[425,3066,2190],{"class":1155},[425,3068,3046],{"class":435},[425,3070,2190],{"class":1155},[425,3072,2255],{"class":701},[425,3074,3053],{"class":1155},[425,3076,2307],{"class":701},[425,3078,3079,3081,3084,3086,3088,3091,3093,3095,3097],{"class":427,"line":818},[425,3080,3035],{"class":1155},[425,3082,3083],{"class":691}," 8",[425,3085,3041],{"class":701},[425,3087,2190],{"class":1155},[425,3089,3090],{"class":435},"\"非常好\"",[425,3092,2190],{"class":1155},[425,3094,2255],{"class":701},[425,3096,3053],{"class":1155},[425,3098,2307],{"class":701},[425,3100,3101,3103,3106,3108,3110,3112,3114,3116,3118],{"class":427,"line":831},[425,3102,3035],{"class":1155},[425,3104,3105],{"class":691}," 7",[425,3107,3041],{"class":701},[425,3109,2190],{"class":1155},[425,3111,3090],{"class":435},[425,3113,2190],{"class":1155},[425,3115,2255],{"class":701},[425,3117,3053],{"class":1155},[425,3119,2307],{"class":701},[425,3121,3122,3124,3127,3129,3131,3134,3136,3138,3140],{"class":427,"line":841},[425,3123,3035],{"class":1155},[425,3125,3126],{"class":691}," 6",[425,3128,3041],{"class":701},[425,3130,2190],{"class":1155},[425,3132,3133],{"class":435},"\"一般\"",[425,3135,2190],{"class":1155},[425,3137,2255],{"class":701},[425,3139,3053],{"class":1155},[425,3141,2307],{"class":701},[425,3143,3144,3146,3149,3151,3153,3155,3157,3159,3161],{"class":427,"line":852},[425,3145,3035],{"class":1155},[425,3147,3148],{"class":691}," 5",[425,3150,3041],{"class":701},[425,3152,2190],{"class":1155},[425,3154,3133],{"class":435},[425,3156,2190],{"class":1155},[425,3158,2255],{"class":701},[425,3160,3053],{"class":1155},[425,3162,2307],{"class":701},[425,3164,3165,3168,3170,3172,3175,3177,3179,3181],{"class":427,"line":862},[425,3166,3167],{"class":1155},"        default",[425,3169,3041],{"class":701},[425,3171,2190],{"class":1155},[425,3173,3174],{"class":435},"\"烂片\"",[425,3176,2190],{"class":1155},[425,3178,2255],{"class":701},[425,3180,3053],{"class":1155},[425,3182,2307],{"class":701},[425,3184,3185],{"class":427,"line":878},[425,3186,3187],{"class":701},"    }\n",[425,3189,3190],{"class":427,"line":914},[425,3191,2578],{"class":701},[19,3193,3194],{},"if和switch区别：",[447,3196,3197,3200],{},[450,3198,3199],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[450,3201,3202],{},"switch优点：结构清晰，执行效率高",[14,3204,3206],{"id":3205},"_162循环结构","1.6.2循环结构",[972,3208,3209],{},[450,3210,3211],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[416,3213,3215],{"className":1146,"code":3214,"language":1148,"meta":395,"style":395},"\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",[422,3216,3217,3222,3230,3234,3247,3261,3265,3285,3295,3299,3311],{"__ignoreMap":395},[425,3218,3219],{"class":427,"line":428},[425,3220,3221],{"class":1216},"\u002F\u002F打印0-9数字\n",[425,3223,3224,3226,3228],{"class":427,"line":698},[425,3225,1162],{"class":1155},[425,3227,2973],{"class":431},[425,3229,2976],{"class":701},[425,3231,3232],{"class":427,"line":710},[425,3233,2559],{"class":701},[425,3235,3236,3238,3241,3243,3245],{"class":427,"line":721},[425,3237,2985],{"class":1155},[425,3239,3240],{"class":701}," num",[425,3242,1204],{"class":1155},[425,3244,1341],{"class":691},[425,3246,2307],{"class":701},[425,3248,3249,3252,3255,3257,3259],{"class":427,"line":735},[425,3250,3251],{"class":1155},"    while",[425,3253,3254],{"class":701},"(num",[425,3256,2057],{"class":1155},[425,3258,1594],{"class":691},[425,3260,1165],{"class":701},[425,3262,3263],{"class":427,"line":743},[425,3264,3030],{"class":701},[425,3266,3267,3270,3273,3275,3277,3279,3282],{"class":427,"line":751},[425,3268,3269],{"class":431},"       std",[425,3271,3272],{"class":701},"::cout",[425,3274,2190],{"class":1155},[425,3276,2671],{"class":701},[425,3278,2190],{"class":1155},[425,3280,3281],{"class":431},"std",[425,3283,3284],{"class":701},"::endl;\n",[425,3286,3287,3290,3293],{"class":427,"line":759},[425,3288,3289],{"class":701},"        num",[425,3291,3292],{"class":1155},"++",[425,3294,2307],{"class":701},[425,3296,3297],{"class":427,"line":770},[425,3298,3187],{"class":701},[425,3300,3301,3304,3306,3309],{"class":427,"line":780},[425,3302,3303],{"class":431},"    system",[425,3305,1159],{"class":701},[425,3307,3308],{"class":435},"\"pause\"",[425,3310,1165],{"class":701},[425,3312,3313],{"class":427,"line":790},[425,3314,2578],{"class":701},[19,3316,3317],{},"注意：写好循环条件，避免死循环情况",[416,3319,3321],{"className":1146,"code":3320,"language":1148,"meta":395,"style":395},"\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",[422,3322,3323,3328,3335,3342,3352,3360,3364,3369,3396,3401,3406,3414,3441,3446,3451,3464,3474,3478,3488,3493,3506,3511,3525,3530,3545,3549,3562,3566,3571,3575,3589,3597,3602,3608,3614,3619],{"__ignoreMap":395},[425,3324,3325],{"class":427,"line":428},[425,3326,3327],{"class":1216},"\u002F\u002F循环结构-猜数字\n",[425,3329,3330,3332],{"class":427,"line":698},[425,3331,2950],{"class":1155},[425,3333,3334],{"class":435}," \u003Ciostream>\n",[425,3336,3337,3339],{"class":427,"line":710},[425,3338,2950],{"class":1155},[425,3340,3341],{"class":435}," \u003Cctime>\n",[425,3343,3344,3346,3348,3350],{"class":427,"line":721},[425,3345,2958],{"class":1155},[425,3347,2961],{"class":1155},[425,3349,2964],{"class":431},[425,3351,2307],{"class":701},[425,3353,3354,3356,3358],{"class":427,"line":735},[425,3355,1162],{"class":1155},[425,3357,2973],{"class":431},[425,3359,2976],{"class":701},[425,3361,3362],{"class":427,"line":743},[425,3363,2559],{"class":701},[425,3365,3366],{"class":427,"line":751},[425,3367,3368],{"class":1216},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[425,3370,3371,3374,3377,3380,3383,3385,3388,3390,3393],{"class":427,"line":759},[425,3372,3373],{"class":431},"    srand",[425,3375,3376],{"class":701},"((",[425,3378,3379],{"class":1155},"unsigned",[425,3381,3382],{"class":1155}," int",[425,3384,895],{"class":701},[425,3386,3387],{"class":431},"time",[425,3389,1159],{"class":701},[425,3391,3392],{"class":691},"NULL",[425,3394,3395],{"class":701},"));\n",[425,3397,3398],{"class":427,"line":770},[425,3399,3400],{"emptyLinePlaceholder":1084},"\n",[425,3402,3403],{"class":427,"line":780},[425,3404,3405],{"class":1216},"    \u002F\u002F1.系统生成随机数\n",[425,3407,3408,3411],{"class":427,"line":790},[425,3409,3410],{"class":1216},"    \u002F\u002Frand()%100",[425,3412,3413],{"class":1216}," \u002F\u002F生成0-99的随机数\n",[425,3415,3416,3418,3420,3422,3425,3428,3430,3432,3434,3436,3438],{"class":427,"line":805},[425,3417,2985],{"class":1155},[425,3419,3240],{"class":701},[425,3421,1204],{"class":1155},[425,3423,3424],{"class":431},"rand",[425,3426,3427],{"class":701},"()",[425,3429,1477],{"class":1155},[425,3431,1460],{"class":691},[425,3433,1629],{"class":1155},[425,3435,1367],{"class":691},[425,3437,1213],{"class":701},[425,3439,3440],{"class":1216}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[425,3442,3443],{"class":427,"line":818},[425,3444,3445],{"class":1216},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[425,3447,3448],{"class":427,"line":831},[425,3449,3450],{"class":1216},"    \u002F\u002F2.玩家猜测\n",[425,3452,3453,3455,3458,3460,3462],{"class":427,"line":841},[425,3454,2985],{"class":1155},[425,3456,3457],{"class":701}," val",[425,3459,1204],{"class":1155},[425,3461,1341],{"class":691},[425,3463,2307],{"class":701},[425,3465,3466,3468,3470,3472],{"class":427,"line":852},[425,3467,3251],{"class":1155},[425,3469,2664],{"class":701},[425,3471,1367],{"class":691},[425,3473,1165],{"class":701},[425,3475,3476],{"class":427,"line":862},[425,3477,3030],{"class":701},[425,3479,3480,3483,3485],{"class":427,"line":878},[425,3481,3482],{"class":701},"        cin",[425,3484,2443],{"class":1155},[425,3486,3487],{"class":701},"val;\n",[425,3489,3490],{"class":427,"line":914},[425,3491,3492],{"class":1216},"        \u002F\u002F3.判断玩家猜测\n",[425,3494,3495,3498,3501,3503],{"class":427,"line":943},[425,3496,3497],{"class":1155},"        if",[425,3499,3500],{"class":701},"(val",[425,3502,2057],{"class":1155},[425,3504,3505],{"class":701},"num) \n",[425,3507,3508],{"class":427,"line":956},[425,3509,3510],{"class":701},"        {\n",[425,3512,3513,3516,3518,3521,3523],{"class":427,"line":964},[425,3514,3515],{"class":701},"            cout",[425,3517,2190],{"class":1155},[425,3519,3520],{"class":435},"\"猜小了！\"",[425,3522,2190],{"class":1155},[425,3524,2212],{"class":701},[425,3526,3527],{"class":427,"line":2733},[425,3528,3529],{"class":701},"        }\n",[425,3531,3532,3535,3537,3540,3542],{"class":427,"line":2750},[425,3533,3534],{"class":1155},"        else",[425,3536,2706],{"class":1155},[425,3538,3539],{"class":701}," (val",[425,3541,2107],{"class":1155},[425,3543,3544],{"class":701},"num)\n",[425,3546,3547],{"class":427,"line":2755},[425,3548,3510],{"class":701},[425,3550,3551,3553,3555,3558,3560],{"class":427,"line":2760},[425,3552,3515],{"class":701},[425,3554,2190],{"class":1155},[425,3556,3557],{"class":435},"\"猜大了！\"",[425,3559,2190],{"class":1155},[425,3561,2212],{"class":701},[425,3563,3564],{"class":427,"line":2765},[425,3565,3529],{"class":701},[425,3567,3568],{"class":427,"line":2779},[425,3569,3570],{"class":1155},"        else\n",[425,3572,3573],{"class":427,"line":2784},[425,3574,3510],{"class":701},[425,3576,3578,3580,3582,3585,3587],{"class":427,"line":3577},30,[425,3579,3515],{"class":701},[425,3581,2190],{"class":1155},[425,3583,3584],{"class":435},"\"猜对了！\"",[425,3586,2190],{"class":1155},[425,3588,2212],{"class":701},[425,3590,3592,3595],{"class":427,"line":3591},31,[425,3593,3594],{"class":1155},"            break",[425,3596,2307],{"class":701},[425,3598,3600],{"class":427,"line":3599},32,[425,3601,3529],{"class":701},[425,3603,3605],{"class":427,"line":3604},33,[425,3606,3607],{"class":1216},"        \u002F\u002F猜对 退出游戏\n",[425,3609,3611],{"class":427,"line":3610},34,[425,3612,3613],{"class":1216},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[425,3615,3617],{"class":427,"line":3616},35,[425,3618,3187],{"class":701},[425,3620,3622],{"class":427,"line":3621},36,[425,3623,2578],{"class":701},[972,3625,3626],{"start":698},[450,3627,3628,3629,3632],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[400,3630,3631],{},"do...while会先执行一次循环语句","，在判断循环语句",[416,3634,3636],{"className":1146,"code":3635,"language":1148,"meta":395,"style":395},"\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",[422,3637,3638,3643,3651,3655,3667,3675,3679,3696,3703,3707,3720,3730],{"__ignoreMap":395},[425,3639,3640],{"class":427,"line":428},[425,3641,3642],{"class":1216},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[425,3644,3645,3647,3649],{"class":427,"line":698},[425,3646,1162],{"class":1155},[425,3648,2973],{"class":431},[425,3650,2976],{"class":701},[425,3652,3653],{"class":427,"line":710},[425,3654,2559],{"class":701},[425,3656,3657,3659,3661,3663,3665],{"class":427,"line":721},[425,3658,2985],{"class":1155},[425,3660,3240],{"class":701},[425,3662,1204],{"class":1155},[425,3664,1341],{"class":691},[425,3666,2307],{"class":701},[425,3668,3669,3672],{"class":427,"line":735},[425,3670,3671],{"class":1155},"    do",[425,3673,3674],{"class":701}," \n",[425,3676,3677],{"class":427,"line":743},[425,3678,3030],{"class":701},[425,3680,3681,3684,3686,3688,3690,3692,3694],{"class":427,"line":751},[425,3682,3683],{"class":431},"        std",[425,3685,3272],{"class":701},[425,3687,2190],{"class":1155},[425,3689,2671],{"class":701},[425,3691,2190],{"class":1155},[425,3693,3281],{"class":431},[425,3695,3284],{"class":701},[425,3697,3698,3700],{"class":427,"line":759},[425,3699,3289],{"class":701},[425,3701,3702],{"class":1155},"++\n",[425,3704,3705],{"class":427,"line":770},[425,3706,3187],{"class":701},[425,3708,3709,3711,3713,3715,3717],{"class":427,"line":780},[425,3710,3251],{"class":1155},[425,3712,3254],{"class":701},[425,3714,2057],{"class":1155},[425,3716,1594],{"class":691},[425,3718,3719],{"class":701},");\n",[425,3721,3722,3724,3726,3728],{"class":427,"line":790},[425,3723,3303],{"class":431},[425,3725,1159],{"class":701},[425,3727,3308],{"class":435},[425,3729,3719],{"class":701},[425,3731,3732],{"class":427,"line":805},[425,3733,2578],{"class":701},[19,3735,3736],{},"案例-水仙花数",[19,3738,3739],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,3741,3742],{},"例如：1^3+5^3+3^3=153",[19,3744,3745],{},"请用do...while语句，求出所有3位数的水仙花数",[416,3747,3749],{"className":1146,"code":3748,"language":1148,"meta":395,"style":395},"#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",[422,3750,3751,3757,3767,3775,3779,3784,3796,3802,3806,3811,3827,3843,3859,3874,3893,3908,3956,3960,3972,3976,3984,3988,4002],{"__ignoreMap":395},[425,3752,3753,3755],{"class":427,"line":428},[425,3754,2950],{"class":1155},[425,3756,3334],{"class":435},[425,3758,3759,3761,3763,3765],{"class":427,"line":698},[425,3760,2958],{"class":1155},[425,3762,2961],{"class":1155},[425,3764,2964],{"class":431},[425,3766,2307],{"class":701},[425,3768,3769,3771,3773],{"class":427,"line":710},[425,3770,1162],{"class":1155},[425,3772,2973],{"class":431},[425,3774,2976],{"class":701},[425,3776,3777],{"class":427,"line":721},[425,3778,2559],{"class":701},[425,3780,3781],{"class":427,"line":735},[425,3782,3783],{"class":1216},"    \u002F\u002F1.先打印所有三位数字\n",[425,3785,3786,3788,3790,3792,3794],{"class":427,"line":743},[425,3787,2985],{"class":1155},[425,3789,3240],{"class":701},[425,3791,1204],{"class":1155},[425,3793,1460],{"class":691},[425,3795,2307],{"class":701},[425,3797,3798,3800],{"class":427,"line":751},[425,3799,3671],{"class":1155},[425,3801,3674],{"class":701},[425,3803,3804],{"class":427,"line":759},[425,3805,3030],{"class":701},[425,3807,3808],{"class":427,"line":770},[425,3809,3810],{"class":1216},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[425,3812,3813,3816,3818,3820,3822,3824],{"class":427,"line":780},[425,3814,3815],{"class":1155},"        int",[425,3817,2412],{"class":701},[425,3819,1204],{"class":1155},[425,3821,1341],{"class":691},[425,3823,1213],{"class":701},[425,3825,3826],{"class":1216}," \u002F\u002F个位\n",[425,3828,3829,3831,3834,3836,3838,3840],{"class":427,"line":790},[425,3830,3815],{"class":1155},[425,3832,3833],{"class":701}," b",[425,3835,1204],{"class":1155},[425,3837,1341],{"class":691},[425,3839,1213],{"class":701},[425,3841,3842],{"class":1216}," \u002F\u002F十位\n",[425,3844,3845,3847,3850,3852,3854,3856],{"class":427,"line":805},[425,3846,3815],{"class":1155},[425,3848,3849],{"class":701}," c",[425,3851,1204],{"class":1155},[425,3853,1341],{"class":691},[425,3855,1213],{"class":701},[425,3857,3858],{"class":1216}," \u002F\u002F百位\n",[425,3860,3861,3864,3866,3868,3870,3872],{"class":427,"line":818},[425,3862,3863],{"class":701},"        a",[425,3865,1204],{"class":1155},[425,3867,2671],{"class":701},[425,3869,1477],{"class":1155},[425,3871,1594],{"class":691},[425,3873,2307],{"class":701},[425,3875,3876,3879,3881,3883,3885,3887,3889,3891],{"class":427,"line":831},[425,3877,3878],{"class":701},"        b",[425,3880,1204],{"class":1155},[425,3882,2671],{"class":701},[425,3884,1732],{"class":1155},[425,3886,1594],{"class":691},[425,3888,1477],{"class":1155},[425,3890,1594],{"class":691},[425,3892,2307],{"class":701},[425,3894,3895,3898,3900,3902,3904,3906],{"class":427,"line":841},[425,3896,3897],{"class":701},"        c",[425,3899,1204],{"class":1155},[425,3901,2671],{"class":701},[425,3903,1732],{"class":1155},[425,3905,1460],{"class":691},[425,3907,2307],{"class":701},[425,3909,3910,3912,3914,3916,3918,3920,3922,3924,3926,3928,3930,3932,3934,3936,3938,3940,3942,3944,3947,3950,3953],{"class":427,"line":852},[425,3911,3497],{"class":1155},[425,3913,2842],{"class":701},[425,3915,1603],{"class":1155},[425,3917,22],{"class":701},[425,3919,1603],{"class":1155},[425,3921,22],{"class":701},[425,3923,1629],{"class":1155},[425,3925,1412],{"class":701},[425,3927,1603],{"class":1155},[425,3929,1412],{"class":701},[425,3931,1603],{"class":1155},[425,3933,1412],{"class":701},[425,3935,1629],{"class":1155},[425,3937,1437],{"class":701},[425,3939,1603],{"class":1155},[425,3941,1437],{"class":701},[425,3943,1603],{"class":1155},[425,3945,3946],{"class":701},"c ",[425,3948,3949],{"class":1155},"==",[425,3951,3952],{"class":701}," num)",[425,3954,3955],{"class":1216}," \u002F\u002F如果是水仙花数，才打印\n",[425,3957,3958],{"class":427,"line":862},[425,3959,3510],{"class":701},[425,3961,3962,3964,3966,3968,3970],{"class":427,"line":878},[425,3963,3515],{"class":701},[425,3965,2190],{"class":1155},[425,3967,2671],{"class":701},[425,3969,2190],{"class":1155},[425,3971,2212],{"class":701},[425,3973,3974],{"class":427,"line":914},[425,3975,3529],{"class":701},[425,3977,3978,3980,3982],{"class":427,"line":943},[425,3979,3289],{"class":701},[425,3981,3292],{"class":1155},[425,3983,2307],{"class":701},[425,3985,3986],{"class":427,"line":956},[425,3987,3187],{"class":701},[425,3989,3990,3992,3995,3997,4000],{"class":427,"line":964},[425,3991,3251],{"class":1155},[425,3993,3994],{"class":701}," (num ",[425,3996,2057],{"class":1155},[425,3998,3999],{"class":691}," 1000",[425,4001,3719],{"class":701},[425,4003,4004],{"class":427,"line":2733},[425,4005,2578],{"class":701},[972,4007,4008],{"start":710},[450,4009,4010],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[416,4012,4014],{"className":1146,"code":4013,"language":1148,"meta":395,"style":395},"\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",[422,4015,4016,4021,4050,4054,4066,4070,4075,4086,4093,4097,4111,4115,4122,4126,4138,4147],{"__ignoreMap":395},[425,4017,4018],{"class":427,"line":428},[425,4019,4020],{"class":1216},"\u002F\u002F从数字0-9打印\n",[425,4022,4023,4026,4028,4030,4033,4035,4037,4040,4042,4044,4046,4048],{"class":427,"line":698},[425,4024,4025],{"class":1155},"for",[425,4027,1159],{"class":701},[425,4029,1162],{"class":1155},[425,4031,4032],{"class":701}," i",[425,4034,1204],{"class":1155},[425,4036,1341],{"class":691},[425,4038,4039],{"class":701},";i",[425,4041,2057],{"class":1155},[425,4043,1594],{"class":691},[425,4045,4039],{"class":701},[425,4047,3292],{"class":1155},[425,4049,1165],{"class":701},[425,4051,4052],{"class":427,"line":710},[425,4053,2559],{"class":701},[425,4055,4056,4058,4060,4062,4064],{"class":427,"line":721},[425,4057,2564],{"class":701},[425,4059,2190],{"class":1155},[425,4061,1589],{"class":701},[425,4063,2190],{"class":1155},[425,4065,2212],{"class":701},[425,4067,4068],{"class":427,"line":735},[425,4069,2578],{"class":701},[425,4071,4072],{"class":427,"line":743},[425,4073,4074],{"class":1216},"\u002F\u002F上式可以进行拆分\n",[425,4076,4077,4079,4081,4083],{"class":427,"line":751},[425,4078,1162],{"class":1155},[425,4080,4032],{"class":701},[425,4082,1204],{"class":1155},[425,4084,4085],{"class":691},"0\n",[425,4087,4088,4090],{"class":427,"line":759},[425,4089,4025],{"class":1155},[425,4091,4092],{"class":701},"(;;;)\n",[425,4094,4095],{"class":427,"line":770},[425,4096,2559],{"class":701},[425,4098,4099,4102,4105,4107,4109],{"class":427,"line":780},[425,4100,4101],{"class":1155},"    if",[425,4103,4104],{"class":701},"(i",[425,4106,2712],{"class":1155},[425,4108,1594],{"class":691},[425,4110,1165],{"class":701},[425,4112,4113],{"class":427,"line":790},[425,4114,3030],{"class":701},[425,4116,4117,4120],{"class":427,"line":805},[425,4118,4119],{"class":1155},"        break",[425,4121,2307],{"class":701},[425,4123,4124],{"class":427,"line":818},[425,4125,3187],{"class":701},[425,4127,4128,4130,4132,4134,4136],{"class":427,"line":831},[425,4129,2564],{"class":701},[425,4131,2190],{"class":1155},[425,4133,1589],{"class":701},[425,4135,2190],{"class":1155},[425,4137,2212],{"class":701},[425,4139,4140,4143,4145],{"class":427,"line":841},[425,4141,4142],{"class":701},"    i",[425,4144,3292],{"class":1155},[425,4146,2307],{"class":701},[425,4148,4149],{"class":427,"line":852},[425,4150,2578],{"class":701},[19,4152,4153],{},"小练习",[416,4155,4157],{"className":1146,"code":4156,"language":1148,"meta":395,"style":395},"#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",[422,4158,4159,4165,4175,4183,4187,4192,4197,4225,4229,4234,4239,4280,4284,4297,4301,4305,4309,4321,4325,4329],{"__ignoreMap":395},[425,4160,4161,4163],{"class":427,"line":428},[425,4162,2950],{"class":1155},[425,4164,2953],{"class":435},[425,4166,4167,4169,4171,4173],{"class":427,"line":698},[425,4168,2958],{"class":1155},[425,4170,2961],{"class":1155},[425,4172,2964],{"class":431},[425,4174,2307],{"class":701},[425,4176,4177,4179,4181],{"class":427,"line":710},[425,4178,1162],{"class":1155},[425,4180,2973],{"class":431},[425,4182,2976],{"class":701},[425,4184,4185],{"class":427,"line":721},[425,4186,2559],{"class":701},[425,4188,4189],{"class":427,"line":735},[425,4190,4191],{"class":1216},"    \u002F\u002F敲桌子案例\n",[425,4193,4194],{"class":427,"line":743},[425,4195,4196],{"class":1216},"    \u002F\u002F1.先输出1-100的数字\n",[425,4198,4199,4202,4204,4206,4208,4210,4212,4215,4217,4219,4221,4223],{"class":427,"line":751},[425,4200,4201],{"class":1155},"    for",[425,4203,1159],{"class":701},[425,4205,1162],{"class":1155},[425,4207,4032],{"class":701},[425,4209,1204],{"class":1155},[425,4211,1367],{"class":691},[425,4213,4214],{"class":701},"; i",[425,4216,2601],{"class":1155},[425,4218,1460],{"class":691},[425,4220,4214],{"class":701},[425,4222,3292],{"class":1155},[425,4224,1165],{"class":701},[425,4226,4227],{"class":427,"line":759},[425,4228,3030],{"class":701},[425,4230,4231],{"class":427,"line":770},[425,4232,4233],{"class":1216},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[425,4235,4236],{"class":427,"line":780},[425,4237,4238],{"class":1216},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[425,4240,4241,4243,4245,4247,4249,4251,4253,4256,4258,4260,4262,4264,4266,4268,4270,4272,4274,4276,4278],{"class":427,"line":790},[425,4242,3497],{"class":1155},[425,4244,4104],{"class":701},[425,4246,1477],{"class":1155},[425,4248,1518],{"class":691},[425,4250,3949],{"class":1155},[425,4252,1341],{"class":691},[425,4254,4255],{"class":1155}," ||",[425,4257,4032],{"class":701},[425,4259,1477],{"class":1155},[425,4261,1594],{"class":691},[425,4263,3949],{"class":1155},[425,4265,1518],{"class":691},[425,4267,4255],{"class":1155},[425,4269,4032],{"class":701},[425,4271,1732],{"class":1155},[425,4273,1594],{"class":691},[425,4275,3949],{"class":1155},[425,4277,1518],{"class":691},[425,4279,1165],{"class":701},[425,4281,4282],{"class":427,"line":805},[425,4283,3510],{"class":701},[425,4285,4286,4288,4290,4293,4295],{"class":427,"line":818},[425,4287,3515],{"class":701},[425,4289,2190],{"class":1155},[425,4291,4292],{"class":435},"\"敲桌子\"",[425,4294,2190],{"class":1155},[425,4296,2212],{"class":701},[425,4298,4299],{"class":427,"line":831},[425,4300,3529],{"class":701},[425,4302,4303],{"class":427,"line":841},[425,4304,3570],{"class":1155},[425,4306,4307],{"class":427,"line":852},[425,4308,3510],{"class":701},[425,4310,4311,4313,4315,4317,4319],{"class":427,"line":862},[425,4312,3515],{"class":701},[425,4314,2190],{"class":1155},[425,4316,1589],{"class":701},[425,4318,2190],{"class":1155},[425,4320,2212],{"class":701},[425,4322,4323],{"class":427,"line":878},[425,4324,3529],{"class":701},[425,4326,4327],{"class":427,"line":914},[425,4328,3187],{"class":701},[425,4330,4331],{"class":427,"line":943},[425,4332,2578],{"class":701},[19,4334,4335],{},"嵌套实现星图",[416,4337,4339],{"className":1146,"code":4338,"language":1148,"meta":395,"style":395},"#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",[422,4340,4341,4347,4357,4365,4369,4395,4399,4428,4432,4443,4447,4456,4460],{"__ignoreMap":395},[425,4342,4343,4345],{"class":427,"line":428},[425,4344,2950],{"class":1155},[425,4346,2953],{"class":435},[425,4348,4349,4351,4353,4355],{"class":427,"line":698},[425,4350,2958],{"class":1155},[425,4352,2961],{"class":1155},[425,4354,2964],{"class":431},[425,4356,2307],{"class":701},[425,4358,4359,4361,4363],{"class":427,"line":710},[425,4360,1162],{"class":1155},[425,4362,2973],{"class":431},[425,4364,2976],{"class":701},[425,4366,4367],{"class":427,"line":721},[425,4368,2559],{"class":701},[425,4370,4371,4373,4375,4377,4379,4381,4383,4385,4387,4389,4391,4393],{"class":427,"line":735},[425,4372,4201],{"class":1155},[425,4374,2664],{"class":701},[425,4376,1162],{"class":1155},[425,4378,4032],{"class":701},[425,4380,1204],{"class":1155},[425,4382,1341],{"class":691},[425,4384,4039],{"class":701},[425,4386,2057],{"class":1155},[425,4388,1594],{"class":691},[425,4390,4039],{"class":701},[425,4392,3292],{"class":1155},[425,4394,1165],{"class":701},[425,4396,4397],{"class":427,"line":743},[425,4398,3030],{"class":701},[425,4400,4401,4404,4406,4408,4411,4413,4415,4418,4420,4422,4424,4426],{"class":427,"line":751},[425,4402,4403],{"class":1155},"        for",[425,4405,2664],{"class":701},[425,4407,1162],{"class":1155},[425,4409,4410],{"class":701}," j",[425,4412,1204],{"class":1155},[425,4414,1341],{"class":691},[425,4416,4417],{"class":701},";j",[425,4419,2057],{"class":1155},[425,4421,1594],{"class":691},[425,4423,4417],{"class":701},[425,4425,3292],{"class":1155},[425,4427,1165],{"class":701},[425,4429,4430],{"class":427,"line":759},[425,4431,3510],{"class":701},[425,4433,4434,4436,4438,4441],{"class":427,"line":770},[425,4435,3515],{"class":701},[425,4437,2190],{"class":1155},[425,4439,4440],{"class":435},"\"*\"",[425,4442,2307],{"class":701},[425,4444,4445],{"class":427,"line":780},[425,4446,3529],{"class":701},[425,4448,4449,4452,4454],{"class":427,"line":790},[425,4450,4451],{"class":701},"        cout",[425,4453,2190],{"class":1155},[425,4455,2212],{"class":701},[425,4457,4458],{"class":427,"line":805},[425,4459,3187],{"class":701},[425,4461,4462],{"class":427,"line":818},[425,4463,2578],{"class":701},[19,4465,4466],{},"乘法口诀表",[416,4468,4470],{"className":1146,"code":4469,"language":1148,"meta":395,"style":395},"#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",[422,4471,4472,4478,4488,4496,4500,4526,4530,4555,4559,4599,4603,4611,4615],{"__ignoreMap":395},[425,4473,4474,4476],{"class":427,"line":428},[425,4475,2950],{"class":1155},[425,4477,3334],{"class":435},[425,4479,4480,4482,4484,4486],{"class":427,"line":698},[425,4481,2958],{"class":1155},[425,4483,2961],{"class":1155},[425,4485,2964],{"class":431},[425,4487,2307],{"class":701},[425,4489,4490,4492,4494],{"class":427,"line":710},[425,4491,1162],{"class":1155},[425,4493,2973],{"class":431},[425,4495,2976],{"class":701},[425,4497,4498],{"class":427,"line":721},[425,4499,2559],{"class":701},[425,4501,4502,4504,4506,4508,4510,4512,4514,4516,4518,4520,4522,4524],{"class":427,"line":735},[425,4503,4201],{"class":1155},[425,4505,1159],{"class":701},[425,4507,1162],{"class":1155},[425,4509,4032],{"class":701},[425,4511,1204],{"class":1155},[425,4513,1367],{"class":691},[425,4515,4039],{"class":701},[425,4517,2057],{"class":1155},[425,4519,1594],{"class":691},[425,4521,4039],{"class":701},[425,4523,3292],{"class":1155},[425,4525,1165],{"class":701},[425,4527,4528],{"class":427,"line":743},[425,4529,3030],{"class":701},[425,4531,4532,4534,4536,4538,4540,4542,4544,4546,4548,4551,4553],{"class":427,"line":751},[425,4533,4403],{"class":1155},[425,4535,1159],{"class":701},[425,4537,1162],{"class":1155},[425,4539,4410],{"class":701},[425,4541,1204],{"class":1155},[425,4543,1367],{"class":691},[425,4545,4417],{"class":701},[425,4547,2601],{"class":1155},[425,4549,4550],{"class":701},"i;j",[425,4552,3292],{"class":1155},[425,4554,1165],{"class":701},[425,4556,4557],{"class":427,"line":759},[425,4558,3510],{"class":701},[425,4560,4561,4563,4565,4567,4569,4571,4573,4575,4577,4580,4582,4584,4586,4588,4590,4593,4595,4597],{"class":427,"line":770},[425,4562,3515],{"class":701},[425,4564,2190],{"class":1155},[425,4566,1615],{"class":701},[425,4568,2190],{"class":1155},[425,4570,4440],{"class":435},[425,4572,2190],{"class":1155},[425,4574,1589],{"class":701},[425,4576,2190],{"class":1155},[425,4578,4579],{"class":435},"\"=\"",[425,4581,2190],{"class":1155},[425,4583,1589],{"class":701},[425,4585,1603],{"class":1155},[425,4587,1615],{"class":701},[425,4589,2190],{"class":1155},[425,4591,4592],{"class":435},"'",[425,4594,2247],{"class":691},[425,4596,4592],{"class":435},[425,4598,2307],{"class":701},[425,4600,4601],{"class":427,"line":780},[425,4602,3529],{"class":701},[425,4604,4605,4607,4609],{"class":427,"line":790},[425,4606,4451],{"class":701},[425,4608,2190],{"class":1155},[425,4610,2212],{"class":701},[425,4612,4613],{"class":427,"line":805},[425,4614,3187],{"class":701},[425,4616,4617],{"class":427,"line":818},[425,4618,2578],{"class":701},[14,4620,4622],{"id":4621},"_163跳出语句","1.6.3跳出语句",[972,4624,4625],{},[450,4626,4627],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,4629,4630],{},"break使用时机：",[447,4632,4633,4636,4639],{},[450,4634,4635],{},"出现在switch条件语句中，作用是终止case并跳出switch",[450,4637,4638],{},"出现在循环结构中，作用是跳出当前的循环结构",[450,4640,4641],{},"出现在嵌套循环中，跳出最近的内层循环语句",[972,4643,4644,4647],{"start":698},[450,4645,4646],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[450,4648,4649],{},"goto语句\n语法：goto 标记;",[19,4651,4652],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[416,4654,4656],{"className":1146,"code":4655,"language":1148,"meta":395,"style":395},"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",[422,4657,4658,4666,4670,4683,4693,4706,4719,4732,4740,4756],{"__ignoreMap":395},[425,4659,4660,4662,4664],{"class":427,"line":428},[425,4661,1162],{"class":1155},[425,4663,2973],{"class":431},[425,4665,2976],{"class":701},[425,4667,4668],{"class":427,"line":698},[425,4669,2559],{"class":701},[425,4671,4672,4674,4676,4679,4681],{"class":427,"line":710},[425,4673,2564],{"class":701},[425,4675,2190],{"class":1155},[425,4677,4678],{"class":435},"\"1\"",[425,4680,2190],{"class":1155},[425,4682,2212],{"class":701},[425,4684,4685,4688,4691],{"class":427,"line":721},[425,4686,4687],{"class":1155},"    goto",[425,4689,4690],{"class":431}," FLAG",[425,4692,2307],{"class":701},[425,4694,4695,4697,4699,4702,4704],{"class":427,"line":735},[425,4696,2564],{"class":701},[425,4698,2190],{"class":1155},[425,4700,4701],{"class":435},"\"2\"",[425,4703,2190],{"class":1155},[425,4705,2212],{"class":701},[425,4707,4708,4710,4712,4715,4717],{"class":427,"line":743},[425,4709,2564],{"class":701},[425,4711,2190],{"class":1155},[425,4713,4714],{"class":435},"\"3\"",[425,4716,2190],{"class":1155},[425,4718,2212],{"class":701},[425,4720,4721,4723,4725,4728,4730],{"class":427,"line":751},[425,4722,2564],{"class":701},[425,4724,2190],{"class":1155},[425,4726,4727],{"class":435},"\"4\"",[425,4729,2190],{"class":1155},[425,4731,2212],{"class":701},[425,4733,4734,4737],{"class":427,"line":759},[425,4735,4736],{"class":431},"    FLAG",[425,4738,4739],{"class":701},":\n",[425,4741,4742,4744,4746,4749,4751,4753],{"class":427,"line":770},[425,4743,2564],{"class":701},[425,4745,2190],{"class":1155},[425,4747,4748],{"class":435},"\"5\"",[425,4750,2190],{"class":1155},[425,4752,2255],{"class":701},[425,4754,4755],{"class":1216},"\u002F\u002F跳过了2,3,4,直接到5\n",[425,4757,4758],{"class":427,"line":780},[425,4759,2578],{"class":701},[1099,4761,4763],{"id":4762},"_17数组","1.7数组",[14,4765,4767],{"id":4766},"_171一维数组","1.7.1一维数组",[972,4769,4770],{},[450,4771,4772],{},"一维数组定义方式",[35,4774,4775,4785],{},[38,4776,4777],{},[41,4778,4779,4782],{},[44,4780,4781],{},"方式",[44,4783,4784],{},"注意事项",[55,4786,4787,4801,4811],{},[41,4788,4789,4795],{},[60,4790,4791,4792,1213],{},"数据类型 数组名",[425,4793,4794],{},"数组长度",[60,4796,4797,4798,4800],{},"这种方式是先定义再arr",[425,4799,1589],{},"赋值",[41,4802,4803,4808],{},[60,4804,4791,4805,4807],{},[425,4806,4794],{},"={值1,值2....};",[60,4809,4810],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[41,4812,4813,4817],{},[60,4814,4791,4815,4807],{},[425,4816],{},[60,4818,4819,4820,4822],{},"int arr",[425,4821],{},";这是不正确的，按照这样的方式定义必须有初始长度",[972,4824,4825],{"start":698},[450,4826,4827],{},"一维数组数组名\n用途：",[447,4829,4830],{},[450,4831,4832],{},"1.可以统计整个数组在内存中的长度：",[416,4834,4836],{"className":1146,"code":4835,"language":1148,"meta":395,"style":395},"sizeof(arr);\nsizeof(arr[0]);\n",[422,4837,4838,4845],{"__ignoreMap":395},[425,4839,4840,4842],{"class":427,"line":428},[425,4841,1156],{"class":1155},[425,4843,4844],{"class":701},"(arr);\n",[425,4846,4847,4849,4852,4854],{"class":427,"line":698},[425,4848,1156],{"class":1155},[425,4850,4851],{"class":701},"(arr[",[425,4853,1341],{"class":691},[425,4855,4856],{"class":701},"]);\n",[447,4858,4859],{},[450,4860,4861],{},"2.可以获取数组在内存中的首地址:",[416,4863,4865],{"className":1146,"code":4864,"language":1148,"meta":395,"style":395},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[422,4866,4867,4872,4885,4890],{"__ignoreMap":395},[425,4868,4869],{"class":427,"line":428},[425,4870,4871],{"class":1216},"\u002F\u002F查看16进制的首地址\n",[425,4873,4874,4876,4878,4881,4883],{"class":427,"line":698},[425,4875,2383],{"class":701},[425,4877,2190],{"class":1155},[425,4879,4880],{"class":701},"arr",[425,4882,2190],{"class":1155},[425,4884,2212],{"class":701},[425,4886,4887],{"class":427,"line":710},[425,4888,4889],{"class":1216},"\u002F\u002F看10进制数\n",[425,4891,4892,4894,4896,4898,4900,4902,4904,4907,4909,4911,4913],{"class":427,"line":721},[425,4893,2383],{"class":701},[425,4895,2190],{"class":1155},[425,4897,1159],{"class":701},[425,4899,1162],{"class":1155},[425,4901,895],{"class":701},[425,4903,1502],{"class":1155},[425,4905,4906],{"class":701},"arr[",[425,4908,1341],{"class":691},[425,4910,2087],{"class":701},[425,4912,2190],{"class":1155},[425,4914,2212],{"class":701},[19,4916,4917],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[447,4919,4920],{},[450,4921,4922],{},"1️⃣五只小猪称体重",[416,4924,4926],{"className":1146,"code":4925,"language":1148,"meta":395,"style":395},"#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",[422,4927,4928,4934,4944,4952,4956,4996,5009,5035,5039,5051,5055,5065,5069,5073,5086,5096],{"__ignoreMap":395},[425,4929,4930,4932],{"class":427,"line":428},[425,4931,2950],{"class":1155},[425,4933,2953],{"class":435},[425,4935,4936,4938,4940,4942],{"class":427,"line":698},[425,4937,2958],{"class":1155},[425,4939,2961],{"class":1155},[425,4941,2964],{"class":431},[425,4943,2307],{"class":701},[425,4945,4946,4948,4950],{"class":427,"line":710},[425,4947,1162],{"class":1155},[425,4949,2973],{"class":431},[425,4951,2976],{"class":701},[425,4953,4954],{"class":427,"line":721},[425,4955,2559],{"class":701},[425,4957,4958,4960,4963,4965,4967,4969,4971,4974,4976,4979,4981,4983,4985,4988,4990,4993],{"class":427,"line":735},[425,4959,2985],{"class":1155},[425,4961,4962],{"class":701}," arr[",[425,4964,1468],{"class":691},[425,4966,2087],{"class":701},[425,4968,1204],{"class":1155},[425,4970,2043],{"class":701},[425,4972,4973],{"class":691},"300",[425,4975,1527],{"class":701},[425,4977,4978],{"class":691},"350",[425,4980,1527],{"class":701},[425,4982,2724],{"class":691},[425,4984,1527],{"class":701},[425,4986,4987],{"class":691},"400",[425,4989,1527],{"class":701},[425,4991,4992],{"class":691},"250",[425,4994,4995],{"class":701},"};\n",[425,4997,4998,5000,5003,5005,5007],{"class":427,"line":743},[425,4999,2985],{"class":1155},[425,5001,5002],{"class":701}," tmp",[425,5004,1204],{"class":1155},[425,5006,1341],{"class":691},[425,5008,2307],{"class":701},[425,5010,5011,5013,5015,5017,5019,5021,5023,5025,5027,5029,5031,5033],{"class":427,"line":751},[425,5012,4201],{"class":1155},[425,5014,2664],{"class":701},[425,5016,1162],{"class":1155},[425,5018,4032],{"class":701},[425,5020,1204],{"class":1155},[425,5022,1341],{"class":691},[425,5024,4039],{"class":701},[425,5026,2057],{"class":1155},[425,5028,1468],{"class":691},[425,5030,4039],{"class":701},[425,5032,3292],{"class":1155},[425,5034,1165],{"class":701},[425,5036,5037],{"class":427,"line":759},[425,5038,3030],{"class":701},[425,5040,5041,5043,5046,5048],{"class":427,"line":770},[425,5042,3497],{"class":1155},[425,5044,5045],{"class":701},"(tmp",[425,5047,2057],{"class":1155},[425,5049,5050],{"class":701},"arr[i])\n",[425,5052,5053],{"class":427,"line":780},[425,5054,3510],{"class":701},[425,5056,5057,5060,5062],{"class":427,"line":790},[425,5058,5059],{"class":701},"            tmp",[425,5061,1204],{"class":1155},[425,5063,5064],{"class":701},"arr[i];\n",[425,5066,5067],{"class":427,"line":805},[425,5068,3529],{"class":701},[425,5070,5071],{"class":427,"line":818},[425,5072,3187],{"class":701},[425,5074,5075,5077,5079,5082,5084],{"class":427,"line":831},[425,5076,2564],{"class":701},[425,5078,2190],{"class":1155},[425,5080,5081],{"class":701},"tmp",[425,5083,2190],{"class":1155},[425,5085,2212],{"class":701},[425,5087,5088,5091,5094],{"class":427,"line":841},[425,5089,5090],{"class":1155},"    return",[425,5092,5093],{"class":691}," 0",[425,5095,2307],{"class":701},[425,5097,5098],{"class":427,"line":852},[425,5099,2578],{"class":701},[447,5101,5102],{},[450,5103,5104],{},"2️⃣数组元素逆置",[416,5106,5108],{"className":1146,"code":5107,"language":1148,"meta":395,"style":395},"\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",[422,5109,5110,5115,5121,5131,5139,5143,5178,5194,5226,5239,5244,5249,5261,5271,5281,5286,5295,5305,5310,5315,5342,5346,5362,5366,5377,5386],{"__ignoreMap":395},[425,5111,5112],{"class":427,"line":428},[425,5113,5114],{"class":1216},"\u002F\u002F元素逆置\n",[425,5116,5117,5119],{"class":427,"line":698},[425,5118,2950],{"class":1155},[425,5120,2953],{"class":435},[425,5122,5123,5125,5127,5129],{"class":427,"line":710},[425,5124,2958],{"class":1155},[425,5126,2961],{"class":1155},[425,5128,2964],{"class":431},[425,5130,2307],{"class":701},[425,5132,5133,5135,5137],{"class":427,"line":721},[425,5134,1162],{"class":1155},[425,5136,2973],{"class":431},[425,5138,2976],{"class":701},[425,5140,5141],{"class":427,"line":735},[425,5142,2559],{"class":701},[425,5144,5145,5148,5150,5152,5154,5156,5158,5160,5162,5164,5166,5168,5170,5172,5174,5176],{"class":427,"line":743},[425,5146,5147],{"class":1155},"   int",[425,5149,4962],{"class":701},[425,5151,1468],{"class":691},[425,5153,2087],{"class":701},[425,5155,1204],{"class":1155},[425,5157,2043],{"class":701},[425,5159,1367],{"class":691},[425,5161,1527],{"class":701},[425,5163,1235],{"class":691},[425,5165,1527],{"class":701},[425,5167,1229],{"class":691},[425,5169,1527],{"class":701},[425,5171,1442],{"class":691},[425,5173,1527],{"class":701},[425,5175,1468],{"class":691},[425,5177,4995],{"class":701},[425,5179,5180,5182,5185,5187,5189,5191],{"class":427,"line":751},[425,5181,5147],{"class":1155},[425,5183,5184],{"class":701}," start",[425,5186,1204],{"class":1155},[425,5188,1341],{"class":691},[425,5190,1213],{"class":701},[425,5192,5193],{"class":1216},"\u002F\u002F起始下标\n",[425,5195,5196,5198,5201,5204,5207,5210,5212,5214,5217,5219,5221,5223],{"class":427,"line":759},[425,5197,5147],{"class":1155},[425,5199,5200],{"class":701}," end",[425,5202,5203],{"class":1155},"=sizeof",[425,5205,5206],{"class":701},"(arr)",[425,5208,5209],{"class":1155},"\u002Fsizeof",[425,5211,4851],{"class":701},[425,5213,1341],{"class":691},[425,5215,5216],{"class":701},"])",[425,5218,1680],{"class":1155},[425,5220,1367],{"class":691},[425,5222,1213],{"class":701},[425,5224,5225],{"class":1216},"\u002F\u002F结束下标\n",[425,5227,5228,5231,5234,5236],{"class":427,"line":770},[425,5229,5230],{"class":1155},"   while",[425,5232,5233],{"class":701}," (start",[425,5235,2057],{"class":1155},[425,5237,5238],{"class":701},"end)\n",[425,5240,5241],{"class":427,"line":780},[425,5242,5243],{"class":701},"   {\n",[425,5245,5246],{"class":427,"line":790},[425,5247,5248],{"class":1216},"    \u002F\u002F实现元素互换代码\n",[425,5250,5251,5253,5256,5258],{"class":427,"line":805},[425,5252,2985],{"class":1155},[425,5254,5255],{"class":701}," temp",[425,5257,1204],{"class":1155},[425,5259,5260],{"class":701},"arr[start];\n",[425,5262,5263,5266,5268],{"class":427,"line":818},[425,5264,5265],{"class":701},"    arr[start]",[425,5267,1204],{"class":1155},[425,5269,5270],{"class":701},"arr[end];\n",[425,5272,5273,5276,5278],{"class":427,"line":831},[425,5274,5275],{"class":701},"    arr[end]",[425,5277,1204],{"class":1155},[425,5279,5280],{"class":701},"temp;\n",[425,5282,5283],{"class":427,"line":841},[425,5284,5285],{"class":1216},"    \u002F\u002F下标更新\n",[425,5287,5288,5291,5293],{"class":427,"line":852},[425,5289,5290],{"class":701},"    start",[425,5292,3292],{"class":1155},[425,5294,2307],{"class":701},[425,5296,5297,5300,5303],{"class":427,"line":862},[425,5298,5299],{"class":701},"    end",[425,5301,5302],{"class":1155},"--",[425,5304,2307],{"class":701},[425,5306,5307],{"class":427,"line":878},[425,5308,5309],{"class":701},"   }\n",[425,5311,5312],{"class":427,"line":914},[425,5313,5314],{"class":1216},"   \u002F\u002F输出逆置后的数组\n",[425,5316,5317,5320,5322,5324,5326,5328,5330,5332,5334,5336,5338,5340],{"class":427,"line":943},[425,5318,5319],{"class":1155},"   for",[425,5321,2664],{"class":701},[425,5323,1162],{"class":1155},[425,5325,4032],{"class":701},[425,5327,1204],{"class":1155},[425,5329,1341],{"class":691},[425,5331,4039],{"class":701},[425,5333,2057],{"class":1155},[425,5335,1468],{"class":691},[425,5337,4039],{"class":701},[425,5339,3292],{"class":1155},[425,5341,1165],{"class":701},[425,5343,5344],{"class":427,"line":956},[425,5345,5243],{"class":701},[425,5347,5348,5350,5352,5355,5357,5360],{"class":427,"line":964},[425,5349,2564],{"class":701},[425,5351,2190],{"class":1155},[425,5353,5354],{"class":701},"arr[i]",[425,5356,2190],{"class":1155},[425,5358,5359],{"class":435},"\" \"",[425,5361,2307],{"class":701},[425,5363,5364],{"class":427,"line":2733},[425,5365,5309],{"class":701},[425,5367,5368,5371,5373,5375],{"class":427,"line":2750},[425,5369,5370],{"class":431},"   system",[425,5372,1159],{"class":701},[425,5374,3308],{"class":435},[425,5376,3719],{"class":701},[425,5378,5379,5382,5384],{"class":427,"line":2755},[425,5380,5381],{"class":1155},"   return",[425,5383,5093],{"class":691},[425,5385,2307],{"class":701},[425,5387,5388],{"class":427,"line":2760},[425,5389,2578],{"class":701},[447,5391,5392],{},[450,5393,5394],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[416,5396,5398],{"className":1146,"code":5397,"language":1148,"meta":395,"style":395},"\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",[422,5399,5400,5405,5411,5421,5429,5433,5485,5498,5524,5528,5542,5546,5551,5556,5586,5590,5595,5629,5633,5638,5658,5663,5675,5691,5706,5711,5715,5719,5732,5758,5762,5776,5780,5788],{"__ignoreMap":395},[425,5401,5402],{"class":427,"line":428},[425,5403,5404],{"class":1216},"\u002F\u002F冒泡排序,升序\n",[425,5406,5407,5409],{"class":427,"line":698},[425,5408,2950],{"class":1155},[425,5410,2953],{"class":435},[425,5412,5413,5415,5417,5419],{"class":427,"line":710},[425,5414,2958],{"class":1155},[425,5416,2961],{"class":1155},[425,5418,2964],{"class":431},[425,5420,2307],{"class":701},[425,5422,5423,5425,5427],{"class":427,"line":721},[425,5424,1162],{"class":1155},[425,5426,2973],{"class":431},[425,5428,2976],{"class":701},[425,5430,5431],{"class":427,"line":735},[425,5432,2559],{"class":701},[425,5434,5435,5437,5439,5441,5444,5446,5449,5451,5453,5455,5457,5459,5461,5463,5465,5467,5469,5471,5473,5475,5477,5479,5481,5483],{"class":427,"line":743},[425,5436,2985],{"class":1155},[425,5438,4962],{"class":701},[425,5440,1569],{"class":691},[425,5442,5443],{"class":701},"] ",[425,5445,1204],{"class":1155},[425,5447,5448],{"class":701}," {",[425,5450,1442],{"class":691},[425,5452,1527],{"class":701},[425,5454,1235],{"class":691},[425,5456,1527],{"class":701},[425,5458,1544],{"class":691},[425,5460,1527],{"class":701},[425,5462,1341],{"class":691},[425,5464,1527],{"class":701},[425,5466,1468],{"class":691},[425,5468,1527],{"class":701},[425,5470,1518],{"class":691},[425,5472,1527],{"class":701},[425,5474,1367],{"class":691},[425,5476,1527],{"class":701},[425,5478,1229],{"class":691},[425,5480,1527],{"class":701},[425,5482,1569],{"class":691},[425,5484,4995],{"class":701},[425,5486,5487,5489,5491,5494,5496],{"class":427,"line":751},[425,5488,2564],{"class":701},[425,5490,2190],{"class":1155},[425,5492,5493],{"class":435},"\"排序前：\"",[425,5495,2190],{"class":1155},[425,5497,2212],{"class":701},[425,5499,5500,5502,5504,5506,5508,5510,5512,5514,5516,5518,5520,5522],{"class":427,"line":759},[425,5501,4201],{"class":1155},[425,5503,2664],{"class":701},[425,5505,1162],{"class":1155},[425,5507,4032],{"class":701},[425,5509,1204],{"class":1155},[425,5511,1341],{"class":691},[425,5513,4039],{"class":701},[425,5515,2057],{"class":1155},[425,5517,1569],{"class":691},[425,5519,4039],{"class":701},[425,5521,3292],{"class":1155},[425,5523,1165],{"class":701},[425,5525,5526],{"class":427,"line":770},[425,5527,3030],{"class":701},[425,5529,5530,5532,5534,5536,5538,5540],{"class":427,"line":780},[425,5531,4451],{"class":701},[425,5533,2190],{"class":1155},[425,5535,5354],{"class":701},[425,5537,2190],{"class":1155},[425,5539,5359],{"class":435},[425,5541,2307],{"class":701},[425,5543,5544],{"class":427,"line":790},[425,5545,3187],{"class":701},[425,5547,5548],{"class":427,"line":805},[425,5549,5550],{"class":1216},"    \u002F\u002F开始冒泡排序\n",[425,5552,5553],{"class":427,"line":818},[425,5554,5555],{"class":1216},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[425,5557,5558,5560,5562,5564,5566,5568,5570,5572,5574,5576,5578,5580,5582,5584],{"class":427,"line":831},[425,5559,4201],{"class":1155},[425,5561,2664],{"class":701},[425,5563,1162],{"class":1155},[425,5565,4032],{"class":701},[425,5567,1204],{"class":1155},[425,5569,1341],{"class":691},[425,5571,4039],{"class":701},[425,5573,2057],{"class":1155},[425,5575,1569],{"class":691},[425,5577,1680],{"class":1155},[425,5579,1367],{"class":691},[425,5581,4039],{"class":701},[425,5583,3292],{"class":1155},[425,5585,1165],{"class":701},[425,5587,5588],{"class":427,"line":841},[425,5589,3030],{"class":701},[425,5591,5592],{"class":427,"line":852},[425,5593,5594],{"class":1216},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[425,5596,5597,5599,5601,5603,5605,5607,5609,5611,5613,5615,5617,5619,5621,5623,5625,5627],{"class":427,"line":862},[425,5598,4403],{"class":1155},[425,5600,2664],{"class":701},[425,5602,1162],{"class":1155},[425,5604,4410],{"class":701},[425,5606,1204],{"class":1155},[425,5608,1341],{"class":691},[425,5610,4417],{"class":701},[425,5612,2057],{"class":1155},[425,5614,1569],{"class":691},[425,5616,1680],{"class":1155},[425,5618,1589],{"class":701},[425,5620,1680],{"class":1155},[425,5622,1367],{"class":691},[425,5624,4417],{"class":701},[425,5626,3292],{"class":1155},[425,5628,1165],{"class":701},[425,5630,5631],{"class":427,"line":878},[425,5632,3510],{"class":701},[425,5634,5635],{"class":427,"line":914},[425,5636,5637],{"class":1216},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[425,5639,5640,5643,5646,5648,5651,5653,5655],{"class":427,"line":943},[425,5641,5642],{"class":1155},"            if",[425,5644,5645],{"class":701},"(arr[j]",[425,5647,2107],{"class":1155},[425,5649,5650],{"class":701},"arr[j",[425,5652,1629],{"class":1155},[425,5654,1367],{"class":691},[425,5656,5657],{"class":701},"])\n",[425,5659,5660],{"class":427,"line":956},[425,5661,5662],{"class":701},"            {\n",[425,5664,5665,5668,5670,5672],{"class":427,"line":964},[425,5666,5667],{"class":1155},"                int",[425,5669,5255],{"class":701},[425,5671,1204],{"class":1155},[425,5673,5674],{"class":701},"arr[j];\n",[425,5676,5677,5680,5682,5684,5686,5688],{"class":427,"line":2733},[425,5678,5679],{"class":701},"                arr[j]",[425,5681,1204],{"class":1155},[425,5683,5650],{"class":701},[425,5685,1629],{"class":1155},[425,5687,1367],{"class":691},[425,5689,5690],{"class":701},"];\n",[425,5692,5693,5696,5698,5700,5702,5704],{"class":427,"line":2750},[425,5694,5695],{"class":701},"                arr[j",[425,5697,1629],{"class":1155},[425,5699,1367],{"class":691},[425,5701,2087],{"class":701},[425,5703,1204],{"class":1155},[425,5705,5280],{"class":701},[425,5707,5708],{"class":427,"line":2755},[425,5709,5710],{"class":701},"            }\n",[425,5712,5713],{"class":427,"line":2760},[425,5714,3529],{"class":701},[425,5716,5717],{"class":427,"line":2765},[425,5718,3187],{"class":701},[425,5720,5721,5723,5725,5728,5730],{"class":427,"line":2779},[425,5722,2564],{"class":701},[425,5724,2190],{"class":1155},[425,5726,5727],{"class":435},"\"排序后：\"",[425,5729,2190],{"class":1155},[425,5731,2212],{"class":701},[425,5733,5734,5736,5738,5740,5742,5744,5746,5748,5750,5752,5754,5756],{"class":427,"line":2784},[425,5735,4201],{"class":1155},[425,5737,2664],{"class":701},[425,5739,1162],{"class":1155},[425,5741,4032],{"class":701},[425,5743,1204],{"class":1155},[425,5745,1341],{"class":691},[425,5747,4039],{"class":701},[425,5749,2057],{"class":1155},[425,5751,1569],{"class":691},[425,5753,4039],{"class":701},[425,5755,3292],{"class":1155},[425,5757,1165],{"class":701},[425,5759,5760],{"class":427,"line":3577},[425,5761,3030],{"class":701},[425,5763,5764,5766,5768,5770,5772,5774],{"class":427,"line":3591},[425,5765,4451],{"class":701},[425,5767,2190],{"class":1155},[425,5769,5354],{"class":701},[425,5771,2190],{"class":1155},[425,5773,5359],{"class":435},[425,5775,2307],{"class":701},[425,5777,5778],{"class":427,"line":3599},[425,5779,3187],{"class":701},[425,5781,5782,5784,5786],{"class":427,"line":3604},[425,5783,5090],{"class":1155},[425,5785,5093],{"class":691},[425,5787,2307],{"class":701},[425,5789,5790],{"class":427,"line":3610},[425,5791,2578],{"class":701},[14,5793,5795],{"id":5794},"_172二维数组","1.7.2二维数组",[972,5797,5798],{},[450,5799,5800],{},"二维数组的四种定义方式",[35,5802,5803,5812],{},[38,5804,5805],{},[41,5806,5807,5810],{},[44,5808,5809],{},"序号",[44,5811,4781],{},[55,5813,5814,5824,5833,5842,5851],{},[41,5815,5816,5818],{},[60,5817,1367],{},[60,5819,5820,5821,1213],{},"数据类型 数组名[行数]",[425,5822,5823],{},"列数",[41,5825,5826,5828],{},[60,5827,1235],{},[60,5829,5820,5830,5832],{},[425,5831,5823],{},"={ {数据1,数据2}，{数据3，数据4}... }",[41,5834,5835,5837],{},[60,5836,1229],{},[60,5838,5820,5839,5841],{},[425,5840,5823],{},"={数据1,数据2,数据3...}",[41,5843,5844,5846],{},[60,5845,1442],{},[60,5847,5848,5849,5841],{},"数据类型 数组名[]",[425,5850,5823],{},[41,5852,5853,5856],{},[60,5854,5855],{},"注意：不能只省略列数",[60,5857],{},[972,5859,5860],{"start":698},[450,5861,5862],{},"二维数组数组名",[447,5864,5865,5868],{},[450,5866,5867],{},"1.查看二维数组所占内存空间",[450,5869,5870],{},"2.获取二维数组首地址",[19,5872,5873],{},"已知二维数组，求二维数组的行数与列数",[416,5875,5877],{"className":1146,"code":5876,"language":1148,"meta":395,"style":395},"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",[422,5878,5879,5887,5891,5909,5913,5931,5947,5952,5977,6010],{"__ignoreMap":395},[425,5880,5881,5883,5885],{"class":427,"line":428},[425,5882,1162],{"class":1155},[425,5884,2973],{"class":431},[425,5886,2976],{"class":701},[425,5888,5889],{"class":427,"line":698},[425,5890,2559],{"class":701},[425,5892,5893,5895,5897,5899,5902,5904,5906],{"class":427,"line":710},[425,5894,2985],{"class":1155},[425,5896,4962],{"class":701},[425,5898,1235],{"class":691},[425,5900,5901],{"class":701},"][",[425,5903,1229],{"class":691},[425,5905,2087],{"class":701},[425,5907,5908],{"class":1155},"=\n",[425,5910,5911],{"class":427,"line":721},[425,5912,3030],{"class":701},[425,5914,5915,5918,5920,5922,5924,5926,5928],{"class":427,"line":735},[425,5916,5917],{"class":701},"        {",[425,5919,1367],{"class":691},[425,5921,1527],{"class":701},[425,5923,1235],{"class":691},[425,5925,1527],{"class":701},[425,5927,1229],{"class":691},[425,5929,5930],{"class":701},"},\n",[425,5932,5933,5935,5937,5939,5941,5943,5945],{"class":427,"line":743},[425,5934,5917],{"class":701},[425,5936,1442],{"class":691},[425,5938,1527],{"class":701},[425,5940,1468],{"class":691},[425,5942,1527],{"class":701},[425,5944,1493],{"class":691},[425,5946,2578],{"class":701},[425,5948,5949],{"class":427,"line":751},[425,5950,5951],{"class":701},"    };\n",[425,5953,5954,5956,5958,5961,5963,5965,5967,5969,5971,5973,5975],{"class":427,"line":759},[425,5955,2564],{"class":701},[425,5957,2190],{"class":1155},[425,5959,5960],{"class":435},"\"二维数组的行数\"",[425,5962,2386],{"class":1155},[425,5964,5206],{"class":701},[425,5966,5209],{"class":1155},[425,5968,4851],{"class":701},[425,5970,1341],{"class":691},[425,5972,5216],{"class":701},[425,5974,2190],{"class":1155},[425,5976,2212],{"class":701},[425,5978,5979,5981,5983,5986,5988,5990,5992,5994,5996,5998,6000,6002,6004,6006,6008],{"class":427,"line":770},[425,5980,2564],{"class":701},[425,5982,2190],{"class":1155},[425,5984,5985],{"class":435},"\"二维数组的列数\"",[425,5987,2386],{"class":1155},[425,5989,4851],{"class":701},[425,5991,1341],{"class":691},[425,5993,5216],{"class":701},[425,5995,5209],{"class":1155},[425,5997,4851],{"class":701},[425,5999,1341],{"class":691},[425,6001,5901],{"class":701},[425,6003,1341],{"class":691},[425,6005,5216],{"class":701},[425,6007,2190],{"class":1155},[425,6009,2212],{"class":701},[425,6011,6012],{"class":427,"line":780},[425,6013,2578],{"class":701},[19,6015,6016],{},"查看二维数组首地址",[416,6018,6020],{"className":1146,"code":6019,"language":1148,"meta":395,"style":395},"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",[422,6021,6022,6039,6065,6090],{"__ignoreMap":395},[425,6023,6024,6026,6028,6031,6033,6035,6037],{"class":427,"line":428},[425,6025,2383],{"class":701},[425,6027,2190],{"class":1155},[425,6029,6030],{"class":435},"\"二维数组首地址：\"",[425,6032,2190],{"class":1155},[425,6034,4880],{"class":701},[425,6036,2190],{"class":1155},[425,6038,2212],{"class":701},[425,6040,6041,6043,6045,6048,6050,6052,6054,6057,6059,6061,6063],{"class":427,"line":698},[425,6042,2383],{"class":701},[425,6044,2190],{"class":1155},[425,6046,6047],{"class":435},"\"二维数组第一行的首地址：\"",[425,6049,2190],{"class":1155},[425,6051,1159],{"class":701},[425,6053,1162],{"class":1155},[425,6055,6056],{"class":701},")arr[",[425,6058,1341],{"class":691},[425,6060,2087],{"class":701},[425,6062,2190],{"class":1155},[425,6064,2212],{"class":701},[425,6066,6067,6069,6071,6074,6076,6078,6080,6082,6084,6086,6088],{"class":427,"line":710},[425,6068,2383],{"class":701},[425,6070,2190],{"class":1155},[425,6072,6073],{"class":435},"\"二维数组第二行的首地址：\"",[425,6075,2190],{"class":1155},[425,6077,1159],{"class":701},[425,6079,1162],{"class":1155},[425,6081,6056],{"class":701},[425,6083,1367],{"class":691},[425,6085,2087],{"class":701},[425,6087,2190],{"class":1155},[425,6089,2212],{"class":701},[425,6091,6092,6094,6096,6099,6101,6103,6105,6107,6109,6111,6113,6115,6117,6119,6121,6123],{"class":427,"line":721},[425,6093,2383],{"class":701},[425,6095,2190],{"class":1155},[425,6097,6098],{"class":435},"\"二维数组第一个元素的首地址:\"",[425,6100,2190],{"class":1155},[425,6102,1159],{"class":701},[425,6104,1162],{"class":1155},[425,6106,895],{"class":701},[425,6108,1502],{"class":1155},[425,6110,4906],{"class":701},[425,6112,1341],{"class":691},[425,6114,5901],{"class":701},[425,6116,1341],{"class":691},[425,6118,2087],{"class":701},[425,6120,2190],{"class":1155},[425,6122,2255],{"class":701},[425,6124,6125],{"class":1216},"\u002F\u002F对于数，要加取址符\n",[1074,6127,6128],{},"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":395,"searchDepth":698,"depth":698,"links":6130},[6131,6132,6133,6141,6142,6148,6153],{"id":1101,"depth":698,"text":1102},{"id":1108,"depth":698,"text":1109},{"id":1123,"depth":698,"text":1124,"children":6134},[6135,6136,6137,6138,6139,6140],{"id":1127,"depth":710,"text":1128},{"id":1175,"depth":710,"text":1176},{"id":1243,"depth":710,"text":1244},{"id":2171,"depth":710,"text":2172},{"id":2261,"depth":710,"text":2262},{"id":2357,"depth":710,"text":2358},{"id":2399,"depth":698,"text":2400},{"id":2467,"depth":698,"text":2468,"children":6143},[6144,6145,6146,6147],{"id":2471,"depth":710,"text":2472},{"id":2492,"depth":710,"text":2493},{"id":2501,"depth":710,"text":2502},{"id":2510,"depth":710,"text":2511},{"id":2519,"depth":698,"text":2520,"children":6149},[6150,6151,6152],{"id":2523,"depth":710,"text":2524},{"id":3205,"depth":710,"text":3206},{"id":4621,"depth":710,"text":4622},{"id":4762,"depth":698,"text":4763,"children":6154},[6155,6156],{"id":4766,"depth":710,"text":4767},{"id":5794,"depth":710,"text":5795},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":1092,"description":395},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":6163,"title":6164,"body":6165,"description":395,"extension":1082,"meta":7265,"navigation":1084,"path":7266,"seo":7267,"stem":7268,"__hash__":7269},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":6166,"toc":7257},[6167,6170,6174,6182,6190,6193,6259,6263,6266,6342,6346,6349,6352,6355,6568,6572,6577,6641,6646,6713,6718,6809,6812,6917,6921,6924,6930,7074,7078,7081,7095,7098,7143,7146,7254],[10,6168,6164],{"id":6169},"_2函数",[1099,6171,6173],{"id":6172},"_21函数概述","2.1函数概述",[972,6175,6176,6179],{},[450,6177,6178],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[450,6180,6181],{},"语法：",[416,6183,6188],{"className":6184,"code":6186,"language":6187,"meta":395},[6185],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[422,6189,6186],{"__ignoreMap":395},[19,6191,6192],{},"小案例",[416,6194,6196],{"className":1146,"code":6195,"language":1148,"meta":395,"style":395},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[422,6197,6198,6203,6227,6231,6248,6255],{"__ignoreMap":395},[425,6199,6200],{"class":427,"line":428},[425,6201,6202],{"class":1216},"\u002F\u002Fnum1,num2形参\n",[425,6204,6205,6207,6210,6212,6214,6218,6220,6222,6225],{"class":427,"line":698},[425,6206,1162],{"class":1155},[425,6208,6209],{"class":431}," add",[425,6211,1159],{"class":701},[425,6213,1162],{"class":1155},[425,6215,6217],{"class":6216},"s4XuR"," num1",[425,6219,1527],{"class":701},[425,6221,1162],{"class":1155},[425,6223,6224],{"class":6216}," num2",[425,6226,1165],{"class":701},[425,6228,6229],{"class":427,"line":710},[425,6230,2559],{"class":701},[425,6232,6233,6235,6238,6240,6243,6245],{"class":427,"line":721},[425,6234,2985],{"class":1155},[425,6236,6237],{"class":701}," sum",[425,6239,1204],{"class":1155},[425,6241,6242],{"class":701},"num1",[425,6244,1629],{"class":1155},[425,6246,6247],{"class":701},"num2;\n",[425,6249,6250,6252],{"class":427,"line":735},[425,6251,5090],{"class":1155},[425,6253,6254],{"class":701}," sum;\n",[425,6256,6257],{"class":427,"line":743},[425,6258,2578],{"class":701},[1099,6260,6262],{"id":6261},"_22函数调用","2.2函数调用",[19,6264,6265],{},"调用刚刚写的求和函数",[416,6267,6269],{"className":1146,"code":6268,"language":1148,"meta":395,"style":395},"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",[422,6270,6271,6279,6283,6288,6300,6312,6321,6326,6338],{"__ignoreMap":395},[425,6272,6273,6275,6277],{"class":427,"line":428},[425,6274,1162],{"class":1155},[425,6276,2973],{"class":431},[425,6278,2976],{"class":701},[425,6280,6281],{"class":427,"line":698},[425,6282,2559],{"class":701},[425,6284,6285],{"class":427,"line":710},[425,6286,6287],{"class":1216},"    \u002F\u002Fa,b实参\n",[425,6289,6290,6292,6294,6296,6298],{"class":427,"line":721},[425,6291,2985],{"class":1155},[425,6293,2412],{"class":701},[425,6295,1204],{"class":1155},[425,6297,1341],{"class":691},[425,6299,2307],{"class":701},[425,6301,6302,6304,6306,6308,6310],{"class":427,"line":735},[425,6303,2985],{"class":1155},[425,6305,3833],{"class":701},[425,6307,1204],{"class":1155},[425,6309,1341],{"class":691},[425,6311,2307],{"class":701},[425,6313,6314,6316,6318],{"class":427,"line":743},[425,6315,3012],{"class":701},[425,6317,2443],{"class":1155},[425,6319,6320],{"class":701},"a,b;\n",[425,6322,6323],{"class":427,"line":751},[425,6324,6325],{"class":1216},"    \u002F\u002F调用函数时，实参值传给了形参\n",[425,6327,6328,6330,6332,6335],{"class":427,"line":759},[425,6329,2564],{"class":701},[425,6331,2190],{"class":1155},[425,6333,6334],{"class":431},"add",[425,6336,6337],{"class":701},"(a,b);\n",[425,6339,6340],{"class":427,"line":770},[425,6341,2578],{"class":701},[1099,6343,6345],{"id":6344},"_23值传递","2.3值传递",[19,6347,6348],{},"值传递就是函数调用时实参将数值传给形参",[19,6350,6351],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,6353,6354],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[416,6356,6358],{"className":1146,"code":6357,"language":1148,"meta":395,"style":395},"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",[422,6359,6360,6382,6386,6399,6416,6434,6445,6454,6463,6476,6492,6508,6517,6521,6529,6533,6545,6557,6564],{"__ignoreMap":395},[425,6361,6362,6365,6368,6370,6372,6374,6376,6378,6380],{"class":427,"line":428},[425,6363,6364],{"class":1155},"void",[425,6366,6367],{"class":431}," swap",[425,6369,1159],{"class":701},[425,6371,1162],{"class":1155},[425,6373,6217],{"class":6216},[425,6375,1527],{"class":701},[425,6377,1162],{"class":1155},[425,6379,6224],{"class":6216},[425,6381,1165],{"class":701},[425,6383,6384],{"class":427,"line":698},[425,6385,2559],{"class":701},[425,6387,6388,6390,6392,6395,6397],{"class":427,"line":710},[425,6389,2564],{"class":701},[425,6391,2190],{"class":1155},[425,6393,6394],{"class":435},"\"交换前：\"",[425,6396,2190],{"class":1155},[425,6398,2212],{"class":701},[425,6400,6401,6403,6405,6408,6410,6412,6414],{"class":427,"line":721},[425,6402,2564],{"class":701},[425,6404,2190],{"class":1155},[425,6406,6407],{"class":435},"\"num1=\"",[425,6409,2190],{"class":1155},[425,6411,6242],{"class":701},[425,6413,2190],{"class":1155},[425,6415,2212],{"class":701},[425,6417,6418,6420,6422,6425,6427,6430,6432],{"class":427,"line":735},[425,6419,2564],{"class":701},[425,6421,2190],{"class":1155},[425,6423,6424],{"class":435},"\"num2=\"",[425,6426,2190],{"class":1155},[425,6428,6429],{"class":701},"num2",[425,6431,2190],{"class":1155},[425,6433,2212],{"class":701},[425,6435,6436,6438,6440,6442],{"class":427,"line":743},[425,6437,2985],{"class":1155},[425,6439,5255],{"class":701},[425,6441,1204],{"class":1155},[425,6443,6444],{"class":701},"num1;\n",[425,6446,6447,6450,6452],{"class":427,"line":751},[425,6448,6449],{"class":701},"    num1",[425,6451,1204],{"class":1155},[425,6453,6247],{"class":701},[425,6455,6456,6459,6461],{"class":427,"line":759},[425,6457,6458],{"class":701},"    num2",[425,6460,1204],{"class":1155},[425,6462,5280],{"class":701},[425,6464,6465,6467,6469,6472,6474],{"class":427,"line":770},[425,6466,2564],{"class":701},[425,6468,2190],{"class":1155},[425,6470,6471],{"class":435},"\"交换后：\"",[425,6473,2190],{"class":1155},[425,6475,2212],{"class":701},[425,6477,6478,6480,6482,6484,6486,6488,6490],{"class":427,"line":780},[425,6479,2564],{"class":701},[425,6481,2190],{"class":1155},[425,6483,6407],{"class":435},[425,6485,2190],{"class":1155},[425,6487,6242],{"class":701},[425,6489,2190],{"class":1155},[425,6491,2212],{"class":701},[425,6493,6494,6496,6498,6500,6502,6504,6506],{"class":427,"line":790},[425,6495,2564],{"class":701},[425,6497,2190],{"class":1155},[425,6499,6424],{"class":435},[425,6501,2190],{"class":1155},[425,6503,6429],{"class":701},[425,6505,2190],{"class":1155},[425,6507,2212],{"class":701},[425,6509,6510,6512,6514],{"class":427,"line":805},[425,6511,5090],{"class":1155},[425,6513,1213],{"class":701},[425,6515,6516],{"class":1216},"\u002F\u002F或者不写\n",[425,6518,6519],{"class":427,"line":818},[425,6520,2578],{"class":701},[425,6522,6523,6525,6527],{"class":427,"line":831},[425,6524,1162],{"class":1155},[425,6526,2973],{"class":431},[425,6528,2976],{"class":701},[425,6530,6531],{"class":427,"line":841},[425,6532,2559],{"class":701},[425,6534,6535,6537,6539,6541,6543],{"class":427,"line":852},[425,6536,2985],{"class":1155},[425,6538,2412],{"class":701},[425,6540,1204],{"class":1155},[425,6542,1594],{"class":691},[425,6544,2307],{"class":701},[425,6546,6547,6549,6551,6553,6555],{"class":427,"line":862},[425,6548,2985],{"class":1155},[425,6550,3833],{"class":701},[425,6552,1204],{"class":1155},[425,6554,1848],{"class":691},[425,6556,2307],{"class":701},[425,6558,6559,6562],{"class":427,"line":878},[425,6560,6561],{"class":431},"    swap",[425,6563,6337],{"class":701},[425,6565,6566],{"class":427,"line":914},[425,6567,2578],{"class":701},[1099,6569,6571],{"id":6570},"_24函数的常见形式","2.4函数的常见形式",[972,6573,6574],{},[450,6575,6576],{},"无参无返",[416,6578,6580],{"className":1146,"code":6579,"language":1148,"meta":395,"style":395},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[422,6581,6582,6591,6595,6608,6612,6620,6624,6629,6637],{"__ignoreMap":395},[425,6583,6584,6586,6589],{"class":427,"line":428},[425,6585,6364],{"class":1155},[425,6587,6588],{"class":431}," test01",[425,6590,2976],{"class":701},[425,6592,6593],{"class":427,"line":698},[425,6594,2559],{"class":701},[425,6596,6597,6599,6601,6604,6606],{"class":427,"line":710},[425,6598,2564],{"class":701},[425,6600,2190],{"class":1155},[425,6602,6603],{"class":435},"\"你好\"",[425,6605,2190],{"class":1155},[425,6607,2212],{"class":701},[425,6609,6610],{"class":427,"line":721},[425,6611,2578],{"class":701},[425,6613,6614,6616,6618],{"class":427,"line":735},[425,6615,1162],{"class":1155},[425,6617,2973],{"class":431},[425,6619,2976],{"class":701},[425,6621,6622],{"class":427,"line":743},[425,6623,2559],{"class":701},[425,6625,6626],{"class":427,"line":751},[425,6627,6628],{"class":1216},"    \u002F\u002F函数调用\n",[425,6630,6631,6634],{"class":427,"line":759},[425,6632,6633],{"class":431},"    test01",[425,6635,6636],{"class":701},"();\n",[425,6638,6639],{"class":427,"line":770},[425,6640,2578],{"class":701},[972,6642,6643],{"start":698},[450,6644,6645],{},"有参无返",[416,6647,6649],{"className":1146,"code":6648,"language":1148,"meta":395,"style":395},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[422,6650,6651,6666,6670,6682,6686,6694,6698,6709],{"__ignoreMap":395},[425,6652,6653,6655,6658,6660,6662,6664],{"class":427,"line":428},[425,6654,6364],{"class":1155},[425,6656,6657],{"class":431}," test02",[425,6659,1159],{"class":701},[425,6661,1162],{"class":1155},[425,6663,2412],{"class":6216},[425,6665,1165],{"class":701},[425,6667,6668],{"class":427,"line":698},[425,6669,2559],{"class":701},[425,6671,6672,6674,6676,6678,6680],{"class":427,"line":710},[425,6673,2564],{"class":701},[425,6675,2190],{"class":1155},[425,6677,6603],{"class":435},[425,6679,2190],{"class":1155},[425,6681,2212],{"class":701},[425,6683,6684],{"class":427,"line":721},[425,6685,2578],{"class":701},[425,6687,6688,6690,6692],{"class":427,"line":735},[425,6689,1162],{"class":1155},[425,6691,2973],{"class":431},[425,6693,2976],{"class":701},[425,6695,6696],{"class":427,"line":743},[425,6697,2559],{"class":701},[425,6699,6700,6703,6705,6707],{"class":427,"line":751},[425,6701,6702],{"class":431},"    test02",[425,6704,1159],{"class":701},[425,6706,1460],{"class":691},[425,6708,3719],{"class":701},[425,6710,6711],{"class":427,"line":759},[425,6712,2578],{"class":701},[972,6714,6715],{"start":710},[450,6716,6717],{},"无参有返",[416,6719,6721],{"className":1146,"code":6720,"language":1148,"meta":395,"style":395},"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",[422,6722,6723,6732,6736,6748,6757,6761,6769,6773,6786,6805],{"__ignoreMap":395},[425,6724,6725,6727,6730],{"class":427,"line":428},[425,6726,1162],{"class":1155},[425,6728,6729],{"class":431}," test03",[425,6731,2976],{"class":701},[425,6733,6734],{"class":427,"line":698},[425,6735,2559],{"class":701},[425,6737,6738,6740,6742,6744,6746],{"class":427,"line":710},[425,6739,2564],{"class":701},[425,6741,2190],{"class":1155},[425,6743,6603],{"class":435},[425,6745,2190],{"class":1155},[425,6747,2212],{"class":701},[425,6749,6750,6752,6755],{"class":427,"line":721},[425,6751,5090],{"class":1155},[425,6753,6754],{"class":691}," 100",[425,6756,2307],{"class":701},[425,6758,6759],{"class":427,"line":735},[425,6760,2578],{"class":701},[425,6762,6763,6765,6767],{"class":427,"line":743},[425,6764,1162],{"class":1155},[425,6766,2973],{"class":431},[425,6768,2976],{"class":701},[425,6770,6771],{"class":427,"line":751},[425,6772,2559],{"class":701},[425,6774,6775,6777,6779,6781,6784],{"class":427,"line":759},[425,6776,2985],{"class":1155},[425,6778,6217],{"class":701},[425,6780,1204],{"class":1155},[425,6782,6783],{"class":431},"test03",[425,6785,6636],{"class":701},[425,6787,6788,6790,6792,6794,6796,6798,6800,6802],{"class":427,"line":770},[425,6789,2564],{"class":701},[425,6791,2190],{"class":1155},[425,6793,6407],{"class":435},[425,6795,2190],{"class":1155},[425,6797,6242],{"class":701},[425,6799,2190],{"class":1155},[425,6801,2255],{"class":701},[425,6803,6804],{"class":1216}," \u002F\u002F100\n",[425,6806,6807],{"class":427,"line":780},[425,6808,2578],{"class":701},[19,6810,6811],{},"4.有参有返",[416,6813,6815],{"className":1146,"code":6814,"language":1148,"meta":395,"style":395},"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",[422,6816,6817,6832,6836,6849,6855,6859,6868,6872,6884,6898,6913],{"__ignoreMap":395},[425,6818,6819,6821,6824,6826,6828,6830],{"class":427,"line":428},[425,6820,1162],{"class":1155},[425,6822,6823],{"class":431}," test04",[425,6825,1159],{"class":701},[425,6827,1162],{"class":1155},[425,6829,2412],{"class":6216},[425,6831,1165],{"class":701},[425,6833,6834],{"class":427,"line":698},[425,6835,2559],{"class":701},[425,6837,6838,6840,6842,6845,6847],{"class":427,"line":710},[425,6839,2564],{"class":701},[425,6841,2190],{"class":1155},[425,6843,6844],{"class":435},"\"hello\"",[425,6846,2190],{"class":1155},[425,6848,2212],{"class":701},[425,6850,6851,6853],{"class":427,"line":721},[425,6852,5090],{"class":1155},[425,6854,2446],{"class":701},[425,6856,6857],{"class":427,"line":735},[425,6858,2578],{"class":701},[425,6860,6861,6863,6866],{"class":427,"line":743},[425,6862,1162],{"class":1155},[425,6864,6865],{"class":431}," mian",[425,6867,2976],{"class":701},[425,6869,6870],{"class":427,"line":751},[425,6871,2559],{"class":701},[425,6873,6874,6876,6878,6880,6882],{"class":427,"line":759},[425,6875,2985],{"class":1155},[425,6877,3833],{"class":701},[425,6879,1204],{"class":1155},[425,6881,1367],{"class":691},[425,6883,2307],{"class":701},[425,6885,6886,6888,6890,6892,6895],{"class":427,"line":770},[425,6887,2985],{"class":1155},[425,6889,3849],{"class":701},[425,6891,1204],{"class":1155},[425,6893,6894],{"class":431},"test04",[425,6896,6897],{"class":701},"(b);\n",[425,6899,6900,6902,6904,6906,6908,6910],{"class":427,"line":780},[425,6901,2564],{"class":701},[425,6903,2190],{"class":1155},[425,6905,1437],{"class":701},[425,6907,2190],{"class":1155},[425,6909,2255],{"class":701},[425,6911,6912],{"class":1216}," \u002F\u002F1\n",[425,6914,6915],{"class":427,"line":790},[425,6916,2578],{"class":701},[1099,6918,6920],{"id":6919},"_25函数的声明","2.5函数的声明",[19,6922,6923],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,6925,6926,6927],{},"函数的",[400,6928,6929],{},"声明可以多次，但是函数的定义只能有一次",[416,6931,6933],{"className":1146,"code":6932,"language":1148,"meta":395,"style":395},"\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",[422,6934,6935,6940,6945,6970,6979,6983,6995,7007,7023,7027,7047,7051,7070],{"__ignoreMap":395},[425,6936,6937],{"class":427,"line":428},[425,6938,6939],{"class":1216},"\u002F\u002F函数声明\n",[425,6941,6942],{"class":427,"line":698},[425,6943,6944],{"class":1216},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[425,6946,6947,6949,6952,6954,6956,6958,6960,6962,6964,6967],{"class":427,"line":710},[425,6948,1162],{"class":1155},[425,6950,6951],{"class":431}," max",[425,6953,1159],{"class":701},[425,6955,1162],{"class":1155},[425,6957,2412],{"class":6216},[425,6959,1527],{"class":701},[425,6961,1162],{"class":1155},[425,6963,3833],{"class":6216},[425,6965,6966],{"class":701},");",[425,6968,6969],{"class":1216},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[425,6971,6972,6974,6976],{"class":427,"line":721},[425,6973,1162],{"class":1155},[425,6975,2973],{"class":431},[425,6977,6978],{"class":701},"() \n",[425,6980,6981],{"class":427,"line":735},[425,6982,2559],{"class":701},[425,6984,6985,6987,6989,6991,6993],{"class":427,"line":743},[425,6986,2985],{"class":1155},[425,6988,2412],{"class":701},[425,6990,1204],{"class":1155},[425,6992,1594],{"class":691},[425,6994,2307],{"class":701},[425,6996,6997,6999,7001,7003,7005],{"class":427,"line":751},[425,6998,2985],{"class":1155},[425,7000,3833],{"class":701},[425,7002,1204],{"class":1155},[425,7004,1848],{"class":691},[425,7006,2307],{"class":701},[425,7008,7009,7011,7013,7016,7019,7021],{"class":427,"line":759},[425,7010,2564],{"class":701},[425,7012,2190],{"class":1155},[425,7014,7015],{"class":431},"max",[425,7017,7018],{"class":701},"(a,b)",[425,7020,2190],{"class":1155},[425,7022,2212],{"class":701},[425,7024,7025],{"class":427,"line":770},[425,7026,2578],{"class":701},[425,7028,7029,7031,7033,7035,7037,7039,7041,7043,7045],{"class":427,"line":780},[425,7030,1162],{"class":1155},[425,7032,6951],{"class":431},[425,7034,1159],{"class":701},[425,7036,1162],{"class":1155},[425,7038,2412],{"class":6216},[425,7040,1527],{"class":701},[425,7042,1162],{"class":1155},[425,7044,3833],{"class":6216},[425,7046,1165],{"class":701},[425,7048,7049],{"class":427,"line":790},[425,7050,2559],{"class":701},[425,7052,7053,7055,7057,7059,7061,7063,7065,7067],{"class":427,"line":805},[425,7054,5090],{"class":1155},[425,7056,2412],{"class":701},[425,7058,2107],{"class":1155},[425,7060,1412],{"class":701},[425,7062,2133],{"class":1155},[425,7064,22],{"class":701},[425,7066,948],{"class":1155},[425,7068,7069],{"class":701},"b;\n",[425,7071,7072],{"class":427,"line":818},[425,7073,2578],{"class":701},[1099,7075,7077],{"id":7076},"_26函数的分文件编写","2.6函数的分文件编写",[19,7079,7080],{},"4个步骤：",[447,7082,7083,7086,7089,7092],{},[450,7084,7085],{},"1.创建后缀名为.h的头文件",[450,7087,7088],{},"2.创建后缀名为.cpp的源文件",[450,7090,7091],{},"3.在头文件中写函数的定义",[450,7093,7094],{},"4.在源文件中写函数的定义\n示例：",[19,7096,7097],{},"头文件：swap.h",[416,7099,7101],{"className":1146,"code":7100,"language":1148,"meta":395,"style":395},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[422,7102,7103,7109,7119,7123],{"__ignoreMap":395},[425,7104,7105,7107],{"class":427,"line":428},[425,7106,2950],{"class":1155},[425,7108,2953],{"class":435},[425,7110,7111,7113,7115,7117],{"class":427,"line":698},[425,7112,2958],{"class":1155},[425,7114,2961],{"class":1155},[425,7116,2964],{"class":431},[425,7118,2307],{"class":701},[425,7120,7121],{"class":427,"line":710},[425,7122,6939],{"class":1216},[425,7124,7125,7127,7129,7131,7133,7135,7137,7139,7141],{"class":427,"line":721},[425,7126,6364],{"class":1155},[425,7128,6367],{"class":431},[425,7130,1159],{"class":701},[425,7132,1162],{"class":1155},[425,7134,2412],{"class":6216},[425,7136,1527],{"class":701},[425,7138,1162],{"class":1155},[425,7140,3833],{"class":6216},[425,7142,3719],{"class":701},[19,7144,7145],{},"源文件：swap.cpp",[416,7147,7149],{"className":1146,"code":7148,"language":1148,"meta":395,"style":395},"#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",[422,7150,7151,7158,7163,7183,7187,7198,7207,7216,7233,7250],{"__ignoreMap":395},[425,7152,7153,7155],{"class":427,"line":428},[425,7154,2950],{"class":1155},[425,7156,7157],{"class":435}," \"swap.h\"\n",[425,7159,7160],{"class":427,"line":698},[425,7161,7162],{"class":1216},"\u002F\u002F函数的定义\n",[425,7164,7165,7167,7169,7171,7173,7175,7177,7179,7181],{"class":427,"line":710},[425,7166,6364],{"class":1155},[425,7168,6367],{"class":431},[425,7170,1159],{"class":701},[425,7172,1162],{"class":1155},[425,7174,2412],{"class":6216},[425,7176,1527],{"class":701},[425,7178,1162],{"class":1155},[425,7180,3833],{"class":6216},[425,7182,1165],{"class":701},[425,7184,7185],{"class":427,"line":721},[425,7186,2559],{"class":701},[425,7188,7189,7191,7193,7195],{"class":427,"line":735},[425,7190,2985],{"class":1155},[425,7192,5255],{"class":701},[425,7194,1204],{"class":1155},[425,7196,7197],{"class":701},"a;\n",[425,7199,7200,7203,7205],{"class":427,"line":743},[425,7201,7202],{"class":701},"    a",[425,7204,1204],{"class":1155},[425,7206,7069],{"class":701},[425,7208,7209,7212,7214],{"class":427,"line":751},[425,7210,7211],{"class":701},"    b",[425,7213,1204],{"class":1155},[425,7215,5280],{"class":701},[425,7217,7218,7220,7222,7225,7227,7229,7231],{"class":427,"line":759},[425,7219,2564],{"class":701},[425,7221,2190],{"class":1155},[425,7223,7224],{"class":435},"\"a=\"",[425,7226,2190],{"class":1155},[425,7228,22],{"class":701},[425,7230,2190],{"class":1155},[425,7232,2212],{"class":701},[425,7234,7235,7237,7239,7242,7244,7246,7248],{"class":427,"line":770},[425,7236,2564],{"class":701},[425,7238,2190],{"class":1155},[425,7240,7241],{"class":435},"\"b=\"",[425,7243,2190],{"class":1155},[425,7245,1412],{"class":701},[425,7247,2190],{"class":1155},[425,7249,2212],{"class":701},[425,7251,7252],{"class":427,"line":780},[425,7253,2578],{"class":701},[1074,7255,7256],{},"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":395,"searchDepth":698,"depth":698,"links":7258},[7259,7260,7261,7262,7263,7264],{"id":6172,"depth":698,"text":6173},{"id":6261,"depth":698,"text":6262},{"id":6344,"depth":698,"text":6345},{"id":6570,"depth":698,"text":6571},{"id":6919,"depth":698,"text":6920},{"id":7076,"depth":698,"text":7077},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":6164,"description":395},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":7271,"title":7272,"body":7273,"description":7280,"extension":1082,"meta":8685,"navigation":1084,"path":8686,"seo":8687,"stem":8688,"__hash__":8689},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":7274,"toc":8675},[7275,7278,7281,7285,7447,7451,7454,7457,7460,7463,7603,7607,7610,7613,7616,7681,7685,7690,7757,7760,7764,7767,7778,7783,7803,7806,7811,7830,7833,7837,7856,7859,7863,8098,8102,8105,8108,8111,8273,8276,8280,8283,8289,8672],[10,7276,7272],{"id":7277},"_3指针",[19,7279,7280],{},"通过指针保存一个地址，指针就是个地址",[1099,7282,7284],{"id":7283},"_31定义指针","3.1定义指针",[416,7286,7288],{"className":1146,"code":7287,"language":1148,"meta":395,"style":395},"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",[422,7289,7290,7298,7302,7307,7319,7324,7332,7342,7360,7380,7384,7389,7394,7399,7413,7429,7443],{"__ignoreMap":395},[425,7291,7292,7294,7296],{"class":427,"line":428},[425,7293,1162],{"class":1155},[425,7295,2973],{"class":431},[425,7297,2976],{"class":701},[425,7299,7300],{"class":427,"line":698},[425,7301,2559],{"class":701},[425,7303,7304],{"class":427,"line":710},[425,7305,7306],{"class":1216},"    \u002F\u002F1.定义指针\n",[425,7308,7309,7311,7313,7315,7317],{"class":427,"line":721},[425,7310,2985],{"class":1155},[425,7312,2412],{"class":701},[425,7314,1204],{"class":1155},[425,7316,1594],{"class":691},[425,7318,2307],{"class":701},[425,7320,7321],{"class":427,"line":735},[425,7322,7323],{"class":1216},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[425,7325,7326,7329],{"class":427,"line":743},[425,7327,7328],{"class":1155},"    int*",[425,7330,7331],{"class":701},"p;\n",[425,7333,7334,7337,7340],{"class":427,"line":751},[425,7335,7336],{"class":701},"    p",[425,7338,7339],{"class":1155},"=&",[425,7341,7197],{"class":701},[425,7343,7344,7346,7348,7351,7354,7356,7358],{"class":427,"line":759},[425,7345,2564],{"class":701},[425,7347,2190],{"class":1155},[425,7349,7350],{"class":435},"\"a的地址为：\"",[425,7352,7353],{"class":1155},"\u003C\u003C&",[425,7355,22],{"class":701},[425,7357,2190],{"class":1155},[425,7359,2212],{"class":701},[425,7361,7362,7364,7366,7369,7371,7373,7375,7377],{"class":427,"line":770},[425,7363,2564],{"class":701},[425,7365,2190],{"class":1155},[425,7367,7368],{"class":435},"\"指针p为：\"",[425,7370,2190],{"class":1155},[425,7372,19],{"class":701},[425,7374,2190],{"class":1155},[425,7376,2255],{"class":701},[425,7378,7379],{"class":1216},"\u002F\u002F指针p表示的就是a的地址\n",[425,7381,7382],{"class":427,"line":780},[425,7383,3400],{"emptyLinePlaceholder":1084},[425,7385,7386],{"class":427,"line":790},[425,7387,7388],{"class":1216},"    \u002F\u002F2.使用指针\n",[425,7390,7391],{"class":427,"line":805},[425,7392,7393],{"class":1216},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[425,7395,7396],{"class":427,"line":818},[425,7397,7398],{"class":1216},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[425,7400,7401,7404,7406,7408,7411],{"class":427,"line":831},[425,7402,7403],{"class":1155},"    *",[425,7405,19],{"class":701},[425,7407,1204],{"class":1155},[425,7409,7410],{"class":691},"1000",[425,7412,2307],{"class":701},[425,7414,7415,7417,7420,7422,7424,7426],{"class":427,"line":841},[425,7416,2564],{"class":701},[425,7418,7419],{"class":1155},"\u003C\u003C*",[425,7421,19],{"class":701},[425,7423,2190],{"class":1155},[425,7425,2255],{"class":701},[425,7427,7428],{"class":1216},"\u002F\u002F1000\n",[425,7430,7431,7433,7435,7437,7439,7441],{"class":427,"line":852},[425,7432,2564],{"class":701},[425,7434,2190],{"class":1155},[425,7436,22],{"class":701},[425,7438,2190],{"class":1155},[425,7440,2255],{"class":701},[425,7442,7428],{"class":1216},[425,7444,7445],{"class":427,"line":862},[425,7446,2578],{"class":701},[1099,7448,7450],{"id":7449},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,7452,7453],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,7455,7456],{},"在32位操作系统下：占用4个字节空间",[19,7458,7459],{},"在64位操作系统下：占用8个字节空间",[19,7461,7462],{},"上方是不管啥数据类型的",[416,7464,7466],{"className":1146,"code":7465,"language":1148,"meta":395,"style":395},"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",[422,7467,7468,7476,7480,7485,7497,7502,7507,7512,7525,7547,7573,7599],{"__ignoreMap":395},[425,7469,7470,7472,7474],{"class":427,"line":428},[425,7471,1162],{"class":1155},[425,7473,2973],{"class":431},[425,7475,2976],{"class":701},[425,7477,7478],{"class":427,"line":698},[425,7479,2559],{"class":701},[425,7481,7482],{"class":427,"line":710},[425,7483,7484],{"class":1216},"    \u002F\u002F指针所占内存空间\n",[425,7486,7487,7489,7491,7493,7495],{"class":427,"line":721},[425,7488,2985],{"class":1155},[425,7490,2412],{"class":701},[425,7492,1204],{"class":1155},[425,7494,1594],{"class":691},[425,7496,2307],{"class":701},[425,7498,7499],{"class":427,"line":735},[425,7500,7501],{"class":1216},"    \u002F\u002Fint *p;\n",[425,7503,7504],{"class":427,"line":743},[425,7505,7506],{"class":1216},"    \u002F\u002Fp=&a;\n",[425,7508,7509],{"class":427,"line":751},[425,7510,7511],{"class":1216},"    \u002F\u002F上述可以写为以下：\n",[425,7513,7514,7516,7519,7521,7523],{"class":427,"line":759},[425,7515,2985],{"class":1155},[425,7517,7518],{"class":1155}," *",[425,7520,19],{"class":701},[425,7522,7339],{"class":1155},[425,7524,7197],{"class":701},[425,7526,7527,7530,7532,7535,7537,7540,7542,7544],{"class":427,"line":770},[425,7528,7529],{"class":701},"    cout ",[425,7531,2190],{"class":1155},[425,7533,7534],{"class":435},"\"sizeof(int *)\"",[425,7536,2386],{"class":1155},[425,7538,7539],{"class":701},"(p)",[425,7541,2190],{"class":1155},[425,7543,2255],{"class":701},[425,7545,7546],{"class":1216},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[425,7548,7549,7551,7553,7555,7557,7559,7561,7563,7565,7567,7570],{"class":427,"line":780},[425,7550,7529],{"class":701},[425,7552,2190],{"class":1155},[425,7554,7534],{"class":435},[425,7556,2386],{"class":1155},[425,7558,1159],{"class":701},[425,7560,1162],{"class":1155},[425,7562,7518],{"class":1155},[425,7564,895],{"class":701},[425,7566,2190],{"class":1155},[425,7568,7569],{"class":701},"endl",[425,7571,7572],{"class":1216},"  \u002F\u002F4字节(32位的话)\n",[425,7574,7575,7577,7579,7582,7584,7586,7588,7590,7592,7594,7596],{"class":427,"line":790},[425,7576,7529],{"class":701},[425,7578,2190],{"class":1155},[425,7580,7581],{"class":435},"\"sizeof(char *)\"",[425,7583,2386],{"class":1155},[425,7585,1159],{"class":701},[425,7587,1254],{"class":1155},[425,7589,7518],{"class":1155},[425,7591,895],{"class":701},[425,7593,2190],{"class":1155},[425,7595,2255],{"class":701},[425,7597,7598],{"class":1216}," \u002F\u002F4字节(32位的话)\n",[425,7600,7601],{"class":427,"line":805},[425,7602,2578],{"class":701},[1099,7604,7606],{"id":7605},"_33空指针","3.3空指针",[19,7608,7609],{},"空指针：指针变量指向内存中编号为0的空间",[19,7611,7612],{},"用途：初始化指针变量",[19,7614,7615],{},"注意：空指针指向的内存是不可以访问的",[416,7617,7619],{"className":1146,"code":7618,"language":1148,"meta":395,"style":395},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[422,7620,7621,7629,7633,7638,7652,7657,7672,7677],{"__ignoreMap":395},[425,7622,7623,7625,7627],{"class":427,"line":428},[425,7624,1162],{"class":1155},[425,7626,2973],{"class":431},[425,7628,2976],{"class":701},[425,7630,7631],{"class":427,"line":698},[425,7632,2559],{"class":701},[425,7634,7635],{"class":427,"line":710},[425,7636,7637],{"class":1216},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[425,7639,7640,7642,7644,7646,7648,7650],{"class":427,"line":721},[425,7641,2985],{"class":1155},[425,7643,7518],{"class":1155},[425,7645,19],{"class":701},[425,7647,1204],{"class":1155},[425,7649,3392],{"class":691},[425,7651,2307],{"class":701},[425,7653,7654],{"class":427,"line":735},[425,7655,7656],{"class":1216},"    \u002F\u002F2.空指针不能进行访问\n",[425,7658,7659,7661,7663,7665,7667,7669],{"class":427,"line":743},[425,7660,7403],{"class":1155},[425,7662,19],{"class":701},[425,7664,1204],{"class":1155},[425,7666,1460],{"class":691},[425,7668,1213],{"class":701},[425,7670,7671],{"class":1216},"\u002F\u002F直接报错，压根不能访问\n",[425,7673,7674],{"class":427,"line":751},[425,7675,7676],{"class":1216},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[425,7678,7679],{"class":427,"line":759},[425,7680,2578],{"class":701},[1099,7682,7684],{"id":7683},"_34野指针","3.4野指针",[19,7686,7687],{},[400,7688,7689],{},"指针变量指向非法的内存空间",[416,7691,7693],{"className":1146,"code":7692,"language":1148,"meta":395,"style":395},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[422,7694,7695,7703,7707,7736,7741,7753],{"__ignoreMap":395},[425,7696,7697,7699,7701],{"class":427,"line":428},[425,7698,1162],{"class":1155},[425,7700,2973],{"class":431},[425,7702,2976],{"class":701},[425,7704,7705],{"class":427,"line":698},[425,7706,2559],{"class":701},[425,7708,7709,7711,7713,7715,7717,7719,7721,7723,7725,7728,7731,7733],{"class":427,"line":710},[425,7710,2985],{"class":1155},[425,7712,7518],{"class":1155},[425,7714,19],{"class":701},[425,7716,1204],{"class":1155},[425,7718,1159],{"class":701},[425,7720,1162],{"class":1155},[425,7722,7518],{"class":1155},[425,7724,895],{"class":701},[425,7726,7727],{"class":1155},"0x",[425,7729,7730],{"class":691},"1100",[425,7732,1213],{"class":701},[425,7734,7735],{"class":1216}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[425,7737,7738],{"class":427,"line":721},[425,7739,7740],{"class":1216},"    \u002F\u002F访问野指针报错\n",[425,7742,7743,7745,7747,7749,7751],{"class":427,"line":735},[425,7744,2564],{"class":701},[425,7746,7419],{"class":1155},[425,7748,19],{"class":701},[425,7750,2190],{"class":1155},[425,7752,2212],{"class":701},[425,7754,7755],{"class":427,"line":743},[425,7756,2578],{"class":701},[19,7758,7759],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[1099,7761,7763],{"id":7762},"_35const修饰指针","3.5const修饰指针",[19,7765,7766],{},"三种情况：",[447,7768,7769,7772,7775],{},[450,7770,7771],{},"const修饰指针 常量指针",[450,7773,7774],{},"const修饰常量 指针常量",[450,7776,7777],{},"const即修饰指针，又修饰常量",[972,7779,7780],{},[450,7781,7782],{},"常量指针",[416,7784,7786],{"className":1146,"code":7785,"language":1148,"meta":395,"style":395},"const int *p=&a;\n",[422,7787,7788],{"__ignoreMap":395},[425,7789,7790,7793,7795,7797,7799,7801],{"class":427,"line":428},[425,7791,7792],{"class":1155},"const",[425,7794,3382],{"class":1155},[425,7796,7518],{"class":1155},[425,7798,19],{"class":701},[425,7800,7339],{"class":1155},[425,7802,7197],{"class":701},[19,7804,7805],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[972,7807,7808],{"start":698},[450,7809,7810],{},"指针常量",[416,7812,7814],{"className":1146,"code":7813,"language":1148,"meta":395,"style":395},"int *const p=&a;\n",[422,7815,7816],{"__ignoreMap":395},[425,7817,7818,7820,7823,7826,7828],{"class":427,"line":428},[425,7819,1162],{"class":1155},[425,7821,7822],{"class":1155}," *const",[425,7824,7825],{"class":701}," p",[425,7827,7339],{"class":1155},[425,7829,7197],{"class":701},[19,7831,7832],{},"指针的指向不可以改，指针指向的值可以改",[972,7834,7835],{"start":710},[450,7836,7777],{},[416,7838,7840],{"className":1146,"code":7839,"language":1148,"meta":395,"style":395},"const int *const p=&a;\n",[422,7841,7842],{"__ignoreMap":395},[425,7843,7844,7846,7848,7850,7852,7854],{"class":427,"line":428},[425,7845,7792],{"class":1155},[425,7847,3382],{"class":1155},[425,7849,7822],{"class":1155},[425,7851,7825],{"class":701},[425,7853,7339],{"class":1155},[425,7855,7197],{"class":701},[19,7857,7858],{},"指针的指向和指针指向的值都不可以改变",[1099,7860,7862],{"id":7861},"_36指针和数组","3.6指针和数组",[416,7864,7866],{"className":1146,"code":7865,"language":1148,"meta":395,"style":395},"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",[422,7867,7868,7876,7880,7885,7939,7960,7976,7992,8003,8020,8025,8039,8065,8069,8081,8090,8094],{"__ignoreMap":395},[425,7869,7870,7872,7874],{"class":427,"line":428},[425,7871,1162],{"class":1155},[425,7873,2973],{"class":431},[425,7875,2976],{"class":701},[425,7877,7878],{"class":427,"line":698},[425,7879,2559],{"class":701},[425,7881,7882],{"class":427,"line":710},[425,7883,7884],{"class":1216},"    \u002F\u002F利用指针访问数组中的元素\n",[425,7886,7887,7889,7891,7893,7895,7897,7899,7901,7903,7905,7907,7909,7911,7913,7915,7917,7919,7921,7923,7925,7927,7929,7931,7933,7935,7937],{"class":427,"line":721},[425,7888,2985],{"class":1155},[425,7890,4962],{"class":701},[425,7892,1594],{"class":691},[425,7894,2087],{"class":701},[425,7896,1204],{"class":1155},[425,7898,2043],{"class":701},[425,7900,1367],{"class":691},[425,7902,1527],{"class":701},[425,7904,1235],{"class":691},[425,7906,1527],{"class":701},[425,7908,1229],{"class":691},[425,7910,1527],{"class":701},[425,7912,1442],{"class":691},[425,7914,1527],{"class":701},[425,7916,1468],{"class":691},[425,7918,1527],{"class":701},[425,7920,1493],{"class":691},[425,7922,1527],{"class":701},[425,7924,1518],{"class":691},[425,7926,1527],{"class":701},[425,7928,1544],{"class":691},[425,7930,1527],{"class":701},[425,7932,1569],{"class":691},[425,7934,1527],{"class":701},[425,7936,1594],{"class":691},[425,7938,4995],{"class":701},[425,7940,7941,7943,7945,7948,7950,7952,7954,7956,7958],{"class":427,"line":735},[425,7942,2564],{"class":701},[425,7944,2190],{"class":1155},[425,7946,7947],{"class":435},"\"数组的第一个元素为：\"",[425,7949,2190],{"class":1155},[425,7951,4906],{"class":701},[425,7953,1341],{"class":691},[425,7955,2087],{"class":701},[425,7957,2190],{"class":1155},[425,7959,2212],{"class":701},[425,7961,7962,7964,7966,7968,7970,7973],{"class":427,"line":743},[425,7963,2985],{"class":1155},[425,7965,7518],{"class":1155},[425,7967,19],{"class":701},[425,7969,1204],{"class":1155},[425,7971,7972],{"class":701},"arr;",[425,7974,7975],{"class":1216},"\u002F\u002F注意数才要加取地址符号&\n",[425,7977,7978,7980,7982,7984,7986,7988,7990],{"class":427,"line":751},[425,7979,2564],{"class":701},[425,7981,2190],{"class":1155},[425,7983,7947],{"class":435},[425,7985,7419],{"class":1155},[425,7987,19],{"class":701},[425,7989,2190],{"class":1155},[425,7991,2212],{"class":701},[425,7993,7994,7996,7998,8000],{"class":427,"line":759},[425,7995,7336],{"class":701},[425,7997,3292],{"class":1155},[425,7999,1213],{"class":701},[425,8001,8002],{"class":1216}," \u002F\u002F让指针向后偏移4个字节\n",[425,8004,8005,8007,8009,8012,8014,8016,8018],{"class":427,"line":770},[425,8006,2564],{"class":701},[425,8008,2190],{"class":1155},[425,8010,8011],{"class":435},"\"数组的第二个元素为：\"",[425,8013,7419],{"class":1155},[425,8015,19],{"class":701},[425,8017,2190],{"class":1155},[425,8019,2212],{"class":701},[425,8021,8022],{"class":427,"line":780},[425,8023,8024],{"class":1216},"    \u002F\u002F利用指针遍历数组\n",[425,8026,8027,8029,8031,8034,8036],{"class":427,"line":790},[425,8028,2985],{"class":1155},[425,8030,7518],{"class":1155},[425,8032,8033],{"class":701},"p2",[425,8035,1204],{"class":1155},[425,8037,8038],{"class":701},"arr;\n",[425,8040,8041,8043,8045,8047,8049,8051,8053,8055,8057,8059,8061,8063],{"class":427,"line":805},[425,8042,4201],{"class":1155},[425,8044,2664],{"class":701},[425,8046,1162],{"class":1155},[425,8048,4032],{"class":701},[425,8050,1204],{"class":1155},[425,8052,1341],{"class":691},[425,8054,4039],{"class":701},[425,8056,2057],{"class":1155},[425,8058,1594],{"class":691},[425,8060,4039],{"class":701},[425,8062,3292],{"class":1155},[425,8064,1165],{"class":701},[425,8066,8067],{"class":427,"line":818},[425,8068,3030],{"class":701},[425,8070,8071,8073,8075,8077,8079],{"class":427,"line":831},[425,8072,4451],{"class":701},[425,8074,7419],{"class":1155},[425,8076,8033],{"class":701},[425,8078,2190],{"class":1155},[425,8080,2212],{"class":701},[425,8082,8083,8086,8088],{"class":427,"line":841},[425,8084,8085],{"class":701},"        p2",[425,8087,3292],{"class":1155},[425,8089,2307],{"class":701},[425,8091,8092],{"class":427,"line":852},[425,8093,3187],{"class":701},[425,8095,8096],{"class":427,"line":862},[425,8097,2578],{"class":701},[1099,8099,8101],{"id":8100},"_37指针和函数","3.7指针和函数",[19,8103,8104],{},"利用指针做函数参数，可以修改实参的值",[19,8106,8107],{},"值传递：只改变形参，不改变实参",[19,8109,8110],{},"地址传递：",[416,8112,8114],{"className":1146,"code":8113,"language":1148,"meta":395,"style":395},"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",[422,8115,8116,8141,8145,8157,8168,8178,8182,8190,8194,8206,8218,8223,8239,8254,8269],{"__ignoreMap":395},[425,8117,8118,8120,8122,8124,8126,8128,8131,8133,8135,8137,8139],{"class":427,"line":428},[425,8119,6364],{"class":1155},[425,8121,6367],{"class":431},[425,8123,1159],{"class":701},[425,8125,1162],{"class":1155},[425,8127,7518],{"class":1155},[425,8129,8130],{"class":6216},"p1",[425,8132,1527],{"class":701},[425,8134,1162],{"class":1155},[425,8136,7518],{"class":1155},[425,8138,8033],{"class":6216},[425,8140,1165],{"class":701},[425,8142,8143],{"class":427,"line":698},[425,8144,2559],{"class":701},[425,8146,8147,8149,8151,8154],{"class":427,"line":710},[425,8148,2985],{"class":1155},[425,8150,5255],{"class":701},[425,8152,8153],{"class":1155},"=*",[425,8155,8156],{"class":701},"p1;\n",[425,8158,8159,8161,8163,8165],{"class":427,"line":721},[425,8160,7403],{"class":1155},[425,8162,8130],{"class":701},[425,8164,8153],{"class":1155},[425,8166,8167],{"class":701},"p2;\n",[425,8169,8170,8172,8174,8176],{"class":427,"line":735},[425,8171,7403],{"class":1155},[425,8173,8033],{"class":701},[425,8175,1204],{"class":1155},[425,8177,5280],{"class":701},[425,8179,8180],{"class":427,"line":743},[425,8181,2578],{"class":701},[425,8183,8184,8186,8188],{"class":427,"line":751},[425,8185,1162],{"class":1155},[425,8187,2973],{"class":431},[425,8189,2976],{"class":701},[425,8191,8192],{"class":427,"line":759},[425,8193,2559],{"class":701},[425,8195,8196,8198,8200,8202,8204],{"class":427,"line":770},[425,8197,2985],{"class":1155},[425,8199,2412],{"class":701},[425,8201,1204],{"class":1155},[425,8203,1594],{"class":691},[425,8205,2307],{"class":701},[425,8207,8208,8210,8212,8214,8216],{"class":427,"line":780},[425,8209,2985],{"class":1155},[425,8211,3833],{"class":701},[425,8213,1204],{"class":1155},[425,8215,1848],{"class":691},[425,8217,2307],{"class":701},[425,8219,8220],{"class":427,"line":790},[425,8221,8222],{"class":1216},"    \u002F\u002F地址传递\n",[425,8224,8225,8227,8229,8231,8234,8236],{"class":427,"line":805},[425,8226,6561],{"class":431},[425,8228,1159],{"class":701},[425,8230,1502],{"class":1155},[425,8232,8233],{"class":701},"a,",[425,8235,1502],{"class":1155},[425,8237,8238],{"class":701},"b);\n",[425,8240,8241,8243,8245,8247,8249,8251],{"class":427,"line":818},[425,8242,2564],{"class":701},[425,8244,2190],{"class":1155},[425,8246,22],{"class":701},[425,8248,2190],{"class":1155},[425,8250,2255],{"class":701},[425,8252,8253],{"class":1216},"\u002F\u002F20\n",[425,8255,8256,8258,8260,8262,8264,8266],{"class":427,"line":831},[425,8257,2564],{"class":701},[425,8259,2190],{"class":1155},[425,8261,1412],{"class":701},[425,8263,2190],{"class":1155},[425,8265,2255],{"class":701},[425,8267,8268],{"class":1216},"\u002F\u002F10\n",[425,8270,8271],{"class":427,"line":841},[425,8272,2578],{"class":701},[19,8274,8275],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[1099,8277,8279],{"id":8278},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,8281,8282],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,8284,8285,8286,8288],{},"例如数组：int arr",[425,8287,1594],{},"={4,3,6,9,1,2,10,8,7,5}",[416,8290,8292],{"className":1146,"code":8291,"language":1148,"meta":395,"style":395},"#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",[422,8293,8294,8300,8310,8334,8338,8369,8373,8407,8411,8429,8433,8444,8459,8474,8478,8482,8486,8490,8494,8502,8506,8511,8565,8577,8589,8594,8602,8606,8611,8636,8640,8655,8664,8668],{"__ignoreMap":395},[425,8295,8296,8298],{"class":427,"line":428},[425,8297,2950],{"class":1155},[425,8299,2953],{"class":435},[425,8301,8302,8304,8306,8308],{"class":427,"line":698},[425,8303,2958],{"class":1155},[425,8305,2961],{"class":1155},[425,8307,2964],{"class":431},[425,8309,2307],{"class":701},[425,8311,8312,8314,8317,8319,8321,8323,8325,8327,8329,8332],{"class":427,"line":710},[425,8313,6364],{"class":1155},[425,8315,8316],{"class":431}," bubbleSort",[425,8318,1159],{"class":701},[425,8320,1162],{"class":1155},[425,8322,7518],{"class":1155},[425,8324,19],{"class":6216},[425,8326,1527],{"class":701},[425,8328,1162],{"class":1155},[425,8330,8331],{"class":6216}," len",[425,8333,1165],{"class":701},[425,8335,8336],{"class":427,"line":721},[425,8337,2559],{"class":701},[425,8339,8340,8342,8344,8346,8348,8350,8352,8354,8356,8359,8361,8363,8365,8367],{"class":427,"line":735},[425,8341,4201],{"class":1155},[425,8343,1159],{"class":701},[425,8345,1162],{"class":1155},[425,8347,4032],{"class":701},[425,8349,1204],{"class":1155},[425,8351,1341],{"class":691},[425,8353,4039],{"class":701},[425,8355,2057],{"class":1155},[425,8357,8358],{"class":701},"len",[425,8360,1680],{"class":1155},[425,8362,1367],{"class":691},[425,8364,4039],{"class":701},[425,8366,3292],{"class":1155},[425,8368,1165],{"class":701},[425,8370,8371],{"class":427,"line":743},[425,8372,3030],{"class":701},[425,8374,8375,8377,8379,8381,8383,8385,8387,8389,8391,8393,8395,8397,8399,8401,8403,8405],{"class":427,"line":751},[425,8376,4403],{"class":1155},[425,8378,1159],{"class":701},[425,8380,1162],{"class":1155},[425,8382,4410],{"class":701},[425,8384,1204],{"class":1155},[425,8386,1341],{"class":691},[425,8388,4417],{"class":701},[425,8390,2057],{"class":1155},[425,8392,8358],{"class":701},[425,8394,1680],{"class":1155},[425,8396,1589],{"class":701},[425,8398,1680],{"class":1155},[425,8400,1367],{"class":691},[425,8402,4417],{"class":701},[425,8404,3292],{"class":1155},[425,8406,1165],{"class":701},[425,8408,8409],{"class":427,"line":759},[425,8410,3510],{"class":701},[425,8412,8413,8415,8418,8420,8423,8425,8427],{"class":427,"line":770},[425,8414,5642],{"class":1155},[425,8416,8417],{"class":701},"(p[j]",[425,8419,2107],{"class":1155},[425,8421,8422],{"class":701},"p[j",[425,8424,1629],{"class":1155},[425,8426,1367],{"class":691},[425,8428,5657],{"class":701},[425,8430,8431],{"class":427,"line":780},[425,8432,5662],{"class":701},[425,8434,8435,8437,8439,8441],{"class":427,"line":790},[425,8436,5667],{"class":1155},[425,8438,5255],{"class":701},[425,8440,1204],{"class":1155},[425,8442,8443],{"class":701},"p[j];\n",[425,8445,8446,8449,8451,8453,8455,8457],{"class":427,"line":805},[425,8447,8448],{"class":701},"                p[j]",[425,8450,1204],{"class":1155},[425,8452,8422],{"class":701},[425,8454,1629],{"class":1155},[425,8456,1367],{"class":691},[425,8458,5690],{"class":701},[425,8460,8461,8464,8466,8468,8470,8472],{"class":427,"line":818},[425,8462,8463],{"class":701},"                p[j",[425,8465,1629],{"class":1155},[425,8467,1367],{"class":691},[425,8469,2087],{"class":701},[425,8471,1204],{"class":1155},[425,8473,5280],{"class":701},[425,8475,8476],{"class":427,"line":831},[425,8477,5710],{"class":701},[425,8479,8480],{"class":427,"line":841},[425,8481,3529],{"class":701},[425,8483,8484],{"class":427,"line":852},[425,8485,3187],{"class":701},[425,8487,8488],{"class":427,"line":862},[425,8489,2578],{"class":701},[425,8491,8492],{"class":427,"line":878},[425,8493,3400],{"emptyLinePlaceholder":1084},[425,8495,8496,8498,8500],{"class":427,"line":914},[425,8497,1162],{"class":1155},[425,8499,2973],{"class":431},[425,8501,2976],{"class":701},[425,8503,8504],{"class":427,"line":943},[425,8505,2559],{"class":701},[425,8507,8508],{"class":427,"line":956},[425,8509,8510],{"class":1216},"    \u002F\u002F 1.创建数组\n",[425,8512,8513,8515,8517,8519,8521,8523,8525,8527,8529,8531,8533,8535,8537,8539,8541,8543,8545,8547,8549,8551,8553,8555,8557,8559,8561,8563],{"class":427,"line":964},[425,8514,2985],{"class":1155},[425,8516,4962],{"class":701},[425,8518,1594],{"class":691},[425,8520,2087],{"class":701},[425,8522,1204],{"class":1155},[425,8524,2043],{"class":701},[425,8526,1442],{"class":691},[425,8528,1527],{"class":701},[425,8530,1229],{"class":691},[425,8532,1527],{"class":701},[425,8534,1493],{"class":691},[425,8536,1527],{"class":701},[425,8538,1569],{"class":691},[425,8540,1527],{"class":701},[425,8542,1367],{"class":691},[425,8544,1527],{"class":701},[425,8546,1235],{"class":691},[425,8548,1527],{"class":701},[425,8550,1594],{"class":691},[425,8552,1527],{"class":701},[425,8554,1544],{"class":691},[425,8556,1527],{"class":701},[425,8558,1518],{"class":691},[425,8560,1527],{"class":701},[425,8562,1468],{"class":691},[425,8564,4995],{"class":701},[425,8566,8567,8569,8571,8573,8575],{"class":427,"line":2733},[425,8568,2985],{"class":1155},[425,8570,8331],{"class":701},[425,8572,1204],{"class":1155},[425,8574,1594],{"class":691},[425,8576,2307],{"class":701},[425,8578,8579,8581,8583,8585,8587],{"class":427,"line":2750},[425,8580,2985],{"class":1155},[425,8582,7518],{"class":1155},[425,8584,19],{"class":701},[425,8586,1204],{"class":1155},[425,8588,8038],{"class":701},[425,8590,8591],{"class":427,"line":2755},[425,8592,8593],{"class":1216},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[425,8595,8596,8599],{"class":427,"line":2760},[425,8597,8598],{"class":431},"    bubbleSort",[425,8600,8601],{"class":701},"(p,len);\n",[425,8603,8604],{"class":427,"line":2765},[425,8605,3400],{"emptyLinePlaceholder":1084},[425,8607,8608],{"class":427,"line":2779},[425,8609,8610],{"class":1216},"    \u002F\u002F 3.打印排序后的数组\n",[425,8612,8613,8615,8617,8619,8621,8623,8625,8627,8629,8632,8634],{"class":427,"line":2784},[425,8614,4201],{"class":1155},[425,8616,2664],{"class":701},[425,8618,1162],{"class":1155},[425,8620,4032],{"class":701},[425,8622,1204],{"class":1155},[425,8624,1341],{"class":691},[425,8626,4214],{"class":701},[425,8628,2057],{"class":1155},[425,8630,8631],{"class":701},"len; i",[425,8633,3292],{"class":1155},[425,8635,1165],{"class":701},[425,8637,8638],{"class":427,"line":3577},[425,8639,3030],{"class":701},[425,8641,8642,8644,8646,8648,8650,8653],{"class":427,"line":3591},[425,8643,4451],{"class":701},[425,8645,7419],{"class":1155},[425,8647,19],{"class":701},[425,8649,2190],{"class":1155},[425,8651,8652],{"class":435},"\"\"",[425,8654,2307],{"class":701},[425,8656,8657,8660,8662],{"class":427,"line":3599},[425,8658,8659],{"class":701},"        p",[425,8661,3292],{"class":1155},[425,8663,2307],{"class":701},[425,8665,8666],{"class":427,"line":3604},[425,8667,3187],{"class":701},[425,8669,8670],{"class":427,"line":3610},[425,8671,2578],{"class":701},[1074,8673,8674],{},"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":395,"searchDepth":698,"depth":698,"links":8676},[8677,8678,8679,8680,8681,8682,8683,8684],{"id":7283,"depth":698,"text":7284},{"id":7449,"depth":698,"text":7450},{"id":7605,"depth":698,"text":7606},{"id":7683,"depth":698,"text":7684},{"id":7762,"depth":698,"text":7763},{"id":7861,"depth":698,"text":7862},{"id":8100,"depth":698,"text":8101},{"id":8278,"depth":698,"text":8279},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":7272,"description":7280},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8691,"title":8692,"body":8693,"description":8700,"extension":1082,"meta":11673,"navigation":1084,"path":11674,"seo":11675,"stem":11676,"__hash__":11677},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8694,"toc":11664},[8695,8698,8701,8705,8708,8711,8722,9060,9063,9067,9070,9077,9332,9336,9339,9342,9497,9501,9504,9507,9713,9717,9720,10023,10025,10033,10037,10040,10191,10193,10204,10261,10265,10270,10927,10935,10938,11032,11035,11655,11661],[10,8696,8692],{"id":8697},"_4结构体",[19,8699,8700],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[1099,8702,8704],{"id":8703},"_41结构体定义与使用","4.1结构体定义与使用",[19,8706,8707],{},"语法：struct 结构体名 {结构体成员列表}；",[19,8709,8710],{},"通过结构体创建变量的方式：",[447,8712,8713,8716,8719],{},[450,8714,8715],{},"struct 结构体名 变量名",[450,8717,8718],{},"struct 结构体名 变量名={成员1值，成员2值...}",[450,8720,8721],{},"定义结构体时顺便创建变量",[416,8723,8725],{"className":1146,"code":8724,"language":1148,"meta":395,"style":395},"#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",[422,8726,8727,8733,8743,8750,8755,8763,8767,8772,8776,8781,8786,8791,8798,8803,8810,8814,8821,8825,8829,8833,8837,8841,8845,8851,8855,8861,8869,8877,8881,8886,8891,8902,8907,8919,8930,8941,8946,8970,8975,8981,9008,9013,9019,9031,9043,9055],{"__ignoreMap":395},[425,8728,8729,8731],{"class":427,"line":428},[425,8730,2950],{"class":1155},[425,8732,2953],{"class":435},[425,8734,8735,8737,8739,8741],{"class":427,"line":698},[425,8736,2958],{"class":1155},[425,8738,2961],{"class":1155},[425,8740,2964],{"class":431},[425,8742,2307],{"class":701},[425,8744,8745,8747],{"class":427,"line":710},[425,8746,2950],{"class":1155},[425,8748,8749],{"class":435},"\u003Cstring>\n",[425,8751,8752],{"class":427,"line":721},[425,8753,8754],{"class":1216},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[425,8756,8757,8760],{"class":427,"line":735},[425,8758,8759],{"class":1155},"struct",[425,8761,8762],{"class":431}," Student\n",[425,8764,8765],{"class":427,"line":743},[425,8766,2559],{"class":701},[425,8768,8769],{"class":427,"line":751},[425,8770,8771],{"class":1216},"    \u002F\u002F成员列表\n",[425,8773,8774],{"class":427,"line":759},[425,8775,3400],{"emptyLinePlaceholder":1084},[425,8777,8778],{"class":427,"line":770},[425,8779,8780],{"class":1216},"    \u002F\u002F姓名\n",[425,8782,8783],{"class":427,"line":780},[425,8784,8785],{"class":701},"    string name;\n",[425,8787,8788],{"class":427,"line":790},[425,8789,8790],{"class":1216},"    \u002F\u002F年龄\n",[425,8792,8793,8795],{"class":427,"line":805},[425,8794,2985],{"class":1155},[425,8796,8797],{"class":701}," age;\n",[425,8799,8800],{"class":427,"line":818},[425,8801,8802],{"class":1216},"    \u002F\u002F分数\n",[425,8804,8805,8807],{"class":427,"line":831},[425,8806,2985],{"class":1155},[425,8808,8809],{"class":701}," score;\n",[425,8811,8812],{"class":427,"line":841},[425,8813,4995],{"class":701},[425,8815,8816,8818],{"class":427,"line":852},[425,8817,8759],{"class":1155},[425,8819,8820],{"class":431}," School\n",[425,8822,8823],{"class":427,"line":862},[425,8824,2559],{"class":701},[425,8826,8827],{"class":427,"line":878},[425,8828,8771],{"class":1216},[425,8830,8831],{"class":427,"line":914},[425,8832,3400],{"emptyLinePlaceholder":1084},[425,8834,8835],{"class":427,"line":943},[425,8836,8780],{"class":1216},[425,8838,8839],{"class":427,"line":956},[425,8840,8785],{"class":701},[425,8842,8843],{"class":427,"line":964},[425,8844,8790],{"class":1216},[425,8846,8847,8849],{"class":427,"line":2733},[425,8848,2985],{"class":1155},[425,8850,8797],{"class":701},[425,8852,8853],{"class":427,"line":2750},[425,8854,8802],{"class":1216},[425,8856,8857,8859],{"class":427,"line":2755},[425,8858,2985],{"class":1155},[425,8860,8809],{"class":701},[425,8862,8863,8866],{"class":427,"line":2760},[425,8864,8865],{"class":701},"} s3;",[425,8867,8868],{"class":1216}," \u002F\u002F创建结构体时就创建了变量\n",[425,8870,8871,8873,8875],{"class":427,"line":2765},[425,8872,1162],{"class":1155},[425,8874,2973],{"class":431},[425,8876,2976],{"class":701},[425,8878,8879],{"class":427,"line":2779},[425,8880,2559],{"class":701},[425,8882,8883],{"class":427,"line":2784},[425,8884,8885],{"class":1216},"    \u002F\u002F2.通过学生类型创建具体学生\n",[425,8887,8888],{"class":427,"line":3577},[425,8889,8890],{"class":1216},"    \u002F\u002F2.1 struct Student s1;\n",[425,8892,8893,8896,8899],{"class":427,"line":3591},[425,8894,8895],{"class":1155},"    struct",[425,8897,8898],{"class":431}," Student",[425,8900,8901],{"class":701}," s1;\n",[425,8903,8904],{"class":427,"line":3599},[425,8905,8906],{"class":1216},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[425,8908,8909,8912,8914,8917],{"class":427,"line":3604},[425,8910,8911],{"class":701},"    s1.name",[425,8913,1204],{"class":1155},[425,8915,8916],{"class":435},"\"张三\"",[425,8918,2307],{"class":701},[425,8920,8921,8924,8926,8928],{"class":427,"line":3610},[425,8922,8923],{"class":701},"    s1.age",[425,8925,1204],{"class":1155},[425,8927,1798],{"class":691},[425,8929,2307],{"class":701},[425,8931,8932,8935,8937,8939],{"class":427,"line":3616},[425,8933,8934],{"class":701},"    s1.score",[425,8936,1204],{"class":1155},[425,8938,1403],{"class":691},[425,8940,2307],{"class":701},[425,8942,8943],{"class":427,"line":3621},[425,8944,8945],{"class":1216},"    \u002F\u002F输出结果\n",[425,8947,8949,8951,8953,8956,8958,8961,8963,8966,8968],{"class":427,"line":8948},37,[425,8950,2564],{"class":701},[425,8952,2190],{"class":1155},[425,8954,8955],{"class":701},"s1.name",[425,8957,2190],{"class":1155},[425,8959,8960],{"class":701},"s1.age",[425,8962,2190],{"class":1155},[425,8964,8965],{"class":701},"s1.score",[425,8967,2190],{"class":1155},[425,8969,2212],{"class":701},[425,8971,8973],{"class":427,"line":8972},38,[425,8974,3400],{"emptyLinePlaceholder":1084},[425,8976,8978],{"class":427,"line":8977},39,[425,8979,8980],{"class":1216},"    \u002F\u002F2.2 struct Student s2={...}\n",[425,8982,8984,8986,8988,8991,8993,8995,8998,9000,9002,9004,9006],{"class":427,"line":8983},40,[425,8985,8895],{"class":1155},[425,8987,8898],{"class":431},[425,8989,8990],{"class":701}," s2",[425,8992,1204],{"class":1155},[425,8994,2043],{"class":701},[425,8996,8997],{"class":435},"\"王五\"",[425,8999,1527],{"class":701},[425,9001,1798],{"class":691},[425,9003,1527],{"class":701},[425,9005,1403],{"class":691},[425,9007,4995],{"class":701},[425,9009,9011],{"class":427,"line":9010},41,[425,9012,3400],{"emptyLinePlaceholder":1084},[425,9014,9016],{"class":427,"line":9015},42,[425,9017,9018],{"class":1216},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[425,9020,9022,9025,9027,9029],{"class":427,"line":9021},43,[425,9023,9024],{"class":701},"    s3.name",[425,9026,1204],{"class":1155},[425,9028,4678],{"class":435},[425,9030,2307],{"class":701},[425,9032,9034,9037,9039,9041],{"class":427,"line":9033},44,[425,9035,9036],{"class":701},"    s3.age",[425,9038,1204],{"class":1155},[425,9040,1798],{"class":691},[425,9042,2307],{"class":701},[425,9044,9046,9049,9051,9053],{"class":427,"line":9045},45,[425,9047,9048],{"class":701},"    s3.score",[425,9050,1204],{"class":1155},[425,9052,1848],{"class":691},[425,9054,2307],{"class":701},[425,9056,9058],{"class":427,"line":9057},46,[425,9059,2578],{"class":701},[19,9061,9062],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[1099,9064,9066],{"id":9065},"_42结构体数组","4.2结构体数组",[19,9068,9069],{},"将自定义的结构体放入到数组中方便维护",[19,9071,9072,9073,9076],{},"语法：struct 结构体名 数组名",[425,9074,9075],{},"元素个数","={ {}，{},...{} };",[416,9078,9080],{"className":1146,"code":9079,"language":1148,"meta":395,"style":395},"#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",[422,9081,9082,9088,9098,9104,9109,9115,9119,9123,9129,9135,9139,9143,9151,9155,9160,9175,9179,9195,9211,9215,9220,9236,9251,9266,9271,9297,9301,9324,9328],{"__ignoreMap":395},[425,9083,9084,9086],{"class":427,"line":428},[425,9085,2950],{"class":1155},[425,9087,2953],{"class":435},[425,9089,9090,9092,9094,9096],{"class":427,"line":698},[425,9091,2958],{"class":1155},[425,9093,2961],{"class":1155},[425,9095,2964],{"class":431},[425,9097,2307],{"class":701},[425,9099,9100,9102],{"class":427,"line":710},[425,9101,2950],{"class":1155},[425,9103,8749],{"class":435},[425,9105,9106],{"class":427,"line":721},[425,9107,9108],{"class":1216},"\u002F\u002F1.定义结构体\n",[425,9110,9111,9113],{"class":427,"line":735},[425,9112,8759],{"class":1155},[425,9114,8762],{"class":431},[425,9116,9117],{"class":427,"line":743},[425,9118,2559],{"class":701},[425,9120,9121],{"class":427,"line":751},[425,9122,8785],{"class":701},[425,9124,9125,9127],{"class":427,"line":759},[425,9126,2985],{"class":1155},[425,9128,8797],{"class":701},[425,9130,9131,9133],{"class":427,"line":770},[425,9132,2985],{"class":1155},[425,9134,8809],{"class":701},[425,9136,9137],{"class":427,"line":780},[425,9138,3400],{"emptyLinePlaceholder":1084},[425,9140,9141],{"class":427,"line":790},[425,9142,4995],{"class":701},[425,9144,9145,9147,9149],{"class":427,"line":805},[425,9146,1162],{"class":1155},[425,9148,2973],{"class":431},[425,9150,2976],{"class":701},[425,9152,9153],{"class":427,"line":818},[425,9154,2559],{"class":701},[425,9156,9157],{"class":427,"line":831},[425,9158,9159],{"class":1216},"    \u002F\u002F2.创建结构体数组\n",[425,9161,9162,9164,9166,9169,9171,9173],{"class":427,"line":841},[425,9163,8895],{"class":1155},[425,9165,8898],{"class":431},[425,9167,9168],{"class":701}," stuArray[",[425,9170,1235],{"class":691},[425,9172,2087],{"class":701},[425,9174,5908],{"class":1155},[425,9176,9177],{"class":427,"line":852},[425,9178,3030],{"class":701},[425,9180,9181,9183,9185,9187,9189,9191,9193],{"class":427,"line":862},[425,9182,5917],{"class":701},[425,9184,8916],{"class":435},[425,9186,1527],{"class":701},[425,9188,1798],{"class":691},[425,9190,1527],{"class":701},[425,9192,1460],{"class":691},[425,9194,5930],{"class":701},[425,9196,9197,9199,9201,9203,9205,9207,9209],{"class":427,"line":878},[425,9198,5917],{"class":701},[425,9200,4678],{"class":435},[425,9202,1527],{"class":701},[425,9204,1723],{"class":691},[425,9206,1527],{"class":701},[425,9208,1723],{"class":691},[425,9210,2578],{"class":701},[425,9212,9213],{"class":427,"line":914},[425,9214,3187],{"class":701},[425,9216,9217],{"class":427,"line":943},[425,9218,9219],{"class":1216},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[425,9221,9222,9225,9227,9230,9232,9234],{"class":427,"line":956},[425,9223,9224],{"class":701},"    stuArray[",[425,9226,1367],{"class":691},[425,9228,9229],{"class":701},"].name",[425,9231,1204],{"class":1155},[425,9233,4701],{"class":435},[425,9235,2307],{"class":701},[425,9237,9238,9240,9242,9245,9247,9249],{"class":427,"line":964},[425,9239,9224],{"class":701},[425,9241,1367],{"class":691},[425,9243,9244],{"class":701},"].age",[425,9246,1204],{"class":1155},[425,9248,1235],{"class":691},[425,9250,2307],{"class":701},[425,9252,9253,9255,9257,9260,9262,9264],{"class":427,"line":2733},[425,9254,9224],{"class":701},[425,9256,1367],{"class":691},[425,9258,9259],{"class":701},"].score",[425,9261,1204],{"class":1155},[425,9263,1235],{"class":691},[425,9265,2307],{"class":701},[425,9267,9268],{"class":427,"line":2750},[425,9269,9270],{"class":1216},"    \u002F\u002F4.遍历结构体数组\n",[425,9272,9273,9275,9277,9279,9281,9283,9285,9287,9289,9291,9293,9295],{"class":427,"line":2755},[425,9274,4201],{"class":1155},[425,9276,2664],{"class":701},[425,9278,1162],{"class":1155},[425,9280,4032],{"class":701},[425,9282,1204],{"class":1155},[425,9284,1341],{"class":691},[425,9286,4039],{"class":701},[425,9288,2057],{"class":1155},[425,9290,1235],{"class":691},[425,9292,4039],{"class":701},[425,9294,3292],{"class":1155},[425,9296,1165],{"class":701},[425,9298,9299],{"class":427,"line":2760},[425,9300,3030],{"class":701},[425,9302,9303,9305,9307,9310,9312,9315,9317,9320,9322],{"class":427,"line":2765},[425,9304,4451],{"class":701},[425,9306,2190],{"class":1155},[425,9308,9309],{"class":701},"stuArray[i].name",[425,9311,2190],{"class":1155},[425,9313,9314],{"class":701},"stuArray[i].age",[425,9316,2190],{"class":1155},[425,9318,9319],{"class":701},"stuArray[i].score",[425,9321,2190],{"class":1155},[425,9323,2212],{"class":701},[425,9325,9326],{"class":427,"line":2779},[425,9327,3187],{"class":701},[425,9329,9330],{"class":427,"line":2784},[425,9331,2578],{"class":701},[1099,9333,9335],{"id":9334},"_43结构体指针","4.3结构体指针",[19,9337,9338],{},"作用：通过指针访问结构体中的成员",[19,9340,9341],{},"利用操作符->可以通过结构体指针访问结构体属性",[416,9343,9345],{"className":1146,"code":9344,"language":1148,"meta":395,"style":395},"#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",[422,9346,9347,9353,9363,9369,9373,9379,9383,9387,9393,9399,9403,9411,9415,9420,9445,9450,9465,9470,9493],{"__ignoreMap":395},[425,9348,9349,9351],{"class":427,"line":428},[425,9350,2950],{"class":1155},[425,9352,2953],{"class":435},[425,9354,9355,9357,9359,9361],{"class":427,"line":698},[425,9356,2958],{"class":1155},[425,9358,2961],{"class":1155},[425,9360,2964],{"class":431},[425,9362,2307],{"class":701},[425,9364,9365,9367],{"class":427,"line":710},[425,9366,2950],{"class":1155},[425,9368,8749],{"class":435},[425,9370,9371],{"class":427,"line":721},[425,9372,9108],{"class":1216},[425,9374,9375,9377],{"class":427,"line":735},[425,9376,8759],{"class":1155},[425,9378,8762],{"class":431},[425,9380,9381],{"class":427,"line":743},[425,9382,2559],{"class":701},[425,9384,9385],{"class":427,"line":751},[425,9386,8785],{"class":701},[425,9388,9389,9391],{"class":427,"line":759},[425,9390,2985],{"class":1155},[425,9392,8797],{"class":701},[425,9394,9395,9397],{"class":427,"line":770},[425,9396,2985],{"class":1155},[425,9398,8809],{"class":701},[425,9400,9401],{"class":427,"line":780},[425,9402,4995],{"class":701},[425,9404,9405,9407,9409],{"class":427,"line":790},[425,9406,1162],{"class":1155},[425,9408,2973],{"class":431},[425,9410,2976],{"class":701},[425,9412,9413],{"class":427,"line":805},[425,9414,2559],{"class":701},[425,9416,9417],{"class":427,"line":818},[425,9418,9419],{"class":1216},"    \u002F\u002F创建学生结构体变量\n",[425,9421,9422,9424,9426,9429,9431,9433,9435,9437,9439,9441,9443],{"class":427,"line":831},[425,9423,8895],{"class":1155},[425,9425,8898],{"class":431},[425,9427,9428],{"class":701}," s",[425,9430,1204],{"class":1155},[425,9432,2043],{"class":701},[425,9434,8916],{"class":435},[425,9436,1527],{"class":701},[425,9438,1798],{"class":691},[425,9440,1527],{"class":701},[425,9442,2724],{"class":691},[425,9444,4995],{"class":701},[425,9446,9447],{"class":427,"line":841},[425,9448,9449],{"class":1216},"    \u002F\u002F通过指针指向结构体变量\n",[425,9451,9452,9454,9456,9458,9460,9462],{"class":427,"line":852},[425,9453,8895],{"class":1155},[425,9455,8898],{"class":431},[425,9457,7518],{"class":1155},[425,9459,19],{"class":701},[425,9461,7339],{"class":1155},[425,9463,9464],{"class":701},"s\n",[425,9466,9467],{"class":427,"line":862},[425,9468,9469],{"class":1216},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[425,9471,9472,9474,9476,9479,9481,9484,9486,9489,9491],{"class":427,"line":878},[425,9473,2564],{"class":701},[425,9475,2190],{"class":1155},[425,9477,9478],{"class":701},"p->name",[425,9480,2190],{"class":1155},[425,9482,9483],{"class":701},"p->age",[425,9485,2190],{"class":1155},[425,9487,9488],{"class":701},"p->score",[425,9490,2190],{"class":1155},[425,9492,2212],{"class":701},[425,9494,9495],{"class":427,"line":914},[425,9496,2578],{"class":701},[1099,9498,9500],{"id":9499},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,9502,9503],{},"作用：结构体中的成员可以是另一个结构体",[19,9505,9506],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[416,9508,9510],{"className":1146,"code":9509,"language":1148,"meta":395,"style":395},"#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",[422,9511,9512,9518,9528,9534,9539,9547,9551,9555,9561,9567,9571,9576,9583,9587,9594,9598,9604,9609,9613,9621,9625,9630,9635,9640,9651,9663,9674,9687,9698,9709],{"__ignoreMap":395},[425,9513,9514,9516],{"class":427,"line":428},[425,9515,2950],{"class":1155},[425,9517,2953],{"class":435},[425,9519,9520,9522,9524,9526],{"class":427,"line":698},[425,9521,2958],{"class":1155},[425,9523,2961],{"class":1155},[425,9525,2964],{"class":431},[425,9527,2307],{"class":701},[425,9529,9530,9532],{"class":427,"line":710},[425,9531,2950],{"class":1155},[425,9533,8749],{"class":435},[425,9535,9536],{"class":427,"line":721},[425,9537,9538],{"class":1216},"\u002F\u002F定义学生结构体\n",[425,9540,9541,9543,9545],{"class":427,"line":735},[425,9542,8759],{"class":1155},[425,9544,8898],{"class":431},[425,9546,3674],{"class":701},[425,9548,9549],{"class":427,"line":743},[425,9550,2559],{"class":701},[425,9552,9553],{"class":427,"line":751},[425,9554,8785],{"class":701},[425,9556,9557,9559],{"class":427,"line":759},[425,9558,2985],{"class":1155},[425,9560,8797],{"class":701},[425,9562,9563,9565],{"class":427,"line":770},[425,9564,2985],{"class":1155},[425,9566,8809],{"class":701},[425,9568,9569],{"class":427,"line":780},[425,9570,2578],{"class":701},[425,9572,9573],{"class":427,"line":790},[425,9574,9575],{"class":1216},"\u002F\u002F定义老师结构体\n",[425,9577,9578,9580],{"class":427,"line":805},[425,9579,8759],{"class":1155},[425,9581,9582],{"class":431}," Teacher\n",[425,9584,9585],{"class":427,"line":818},[425,9586,2559],{"class":701},[425,9588,9589,9591],{"class":427,"line":831},[425,9590,2985],{"class":1155},[425,9592,9593],{"class":701}," id;\n",[425,9595,9596],{"class":427,"line":841},[425,9597,8785],{"class":701},[425,9599,9600,9602],{"class":427,"line":852},[425,9601,2985],{"class":1155},[425,9603,8797],{"class":701},[425,9605,9606],{"class":427,"line":862},[425,9607,9608],{"class":701},"    Student stu;\n",[425,9610,9611],{"class":427,"line":878},[425,9612,2578],{"class":701},[425,9614,9615,9617,9619],{"class":427,"line":914},[425,9616,1162],{"class":1155},[425,9618,2973],{"class":431},[425,9620,6978],{"class":701},[425,9622,9623],{"class":427,"line":943},[425,9624,2559],{"class":701},[425,9626,9627],{"class":427,"line":956},[425,9628,9629],{"class":1216},"    \u002F\u002F结构体嵌套结构体\n",[425,9631,9632],{"class":427,"line":964},[425,9633,9634],{"class":1216},"    \u002F\u002F创建老师\n",[425,9636,9637],{"class":427,"line":2733},[425,9638,9639],{"class":701},"    Teacher t;\n",[425,9641,9642,9645,9647,9649],{"class":427,"line":2750},[425,9643,9644],{"class":701},"    t.id",[425,9646,1204],{"class":1155},[425,9648,1460],{"class":691},[425,9650,2307],{"class":701},[425,9652,9653,9656,9658,9661],{"class":427,"line":2755},[425,9654,9655],{"class":701},"    t.name",[425,9657,1204],{"class":1155},[425,9659,9660],{"class":435},"\"老王\"",[425,9662,2307],{"class":701},[425,9664,9665,9668,9670,9672],{"class":427,"line":2760},[425,9666,9667],{"class":701},"    t.age",[425,9669,1204],{"class":1155},[425,9671,1798],{"class":691},[425,9673,2307],{"class":701},[425,9675,9676,9679,9681,9684],{"class":427,"line":2765},[425,9677,9678],{"class":701},"    t.stu.name",[425,9680,1204],{"class":1155},[425,9682,9683],{"class":435},"\"小王\"",[425,9685,9686],{"class":701},"；\n",[425,9688,9689,9692,9694,9696],{"class":427,"line":2779},[425,9690,9691],{"class":701},"    t.stu.age",[425,9693,1204],{"class":1155},[425,9695,1848],{"class":691},[425,9697,2307],{"class":701},[425,9699,9700,9703,9705,9707],{"class":427,"line":2784},[425,9701,9702],{"class":701},"    t.stu.score",[425,9704,1204],{"class":1155},[425,9706,1493],{"class":691},[425,9708,2307],{"class":701},[425,9710,9711],{"class":427,"line":3577},[425,9712,2578],{"class":701},[1099,9714,9716],{"id":9715},"_45结构体做函数参数","4.5结构体做函数参数",[19,9718,9719],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[416,9721,9723],{"className":1146,"code":9722,"language":1148,"meta":395,"style":395},"#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",[422,9724,9725,9731,9741,9747,9753,9757,9761,9767,9773,9777,9782,9787,9804,9808,9841,9845,9850,9869,9873,9904,9908,9916,9920,9929,9941,9953,9965,9978,9986,9999,10011,10019],{"__ignoreMap":395},[425,9726,9727,9729],{"class":427,"line":428},[425,9728,2950],{"class":1155},[425,9730,2953],{"class":435},[425,9732,9733,9735,9737,9739],{"class":427,"line":698},[425,9734,2958],{"class":1155},[425,9736,2961],{"class":1155},[425,9738,2964],{"class":431},[425,9740,2307],{"class":701},[425,9742,9743,9745],{"class":427,"line":710},[425,9744,2950],{"class":1155},[425,9746,8749],{"class":435},[425,9748,9749,9751],{"class":427,"line":721},[425,9750,8759],{"class":1155},[425,9752,8762],{"class":431},[425,9754,9755],{"class":427,"line":735},[425,9756,2559],{"class":701},[425,9758,9759],{"class":427,"line":743},[425,9760,8785],{"class":701},[425,9762,9763,9765],{"class":427,"line":751},[425,9764,2985],{"class":1155},[425,9766,8797],{"class":701},[425,9768,9769,9771],{"class":427,"line":759},[425,9770,2985],{"class":1155},[425,9772,8809],{"class":701},[425,9774,9775],{"class":427,"line":770},[425,9776,4995],{"class":701},[425,9778,9779],{"class":427,"line":780},[425,9780,9781],{"class":1216},"\u002F\u002F打印学生信息的函数\n",[425,9783,9784],{"class":427,"line":790},[425,9785,9786],{"class":1216},"\u002F\u002F值传递\n",[425,9788,9789,9791,9794,9796,9798,9800,9802],{"class":427,"line":805},[425,9790,6364],{"class":1155},[425,9792,9793],{"class":431}," printStudent1",[425,9795,1159],{"class":701},[425,9797,8759],{"class":1155},[425,9799,8898],{"class":431},[425,9801,9428],{"class":6216},[425,9803,1165],{"class":701},[425,9805,9806],{"class":427,"line":818},[425,9807,2559],{"class":701},[425,9809,9810,9812,9814,9817,9819,9822,9824,9827,9829,9831,9833,9836,9838],{"class":427,"line":831},[425,9811,7529],{"class":701},[425,9813,2190],{"class":1155},[425,9815,9816],{"class":701}," s.name ",[425,9818,2190],{"class":1155},[425,9820,9821],{"class":435}," \" \"",[425,9823,2458],{"class":1155},[425,9825,9826],{"class":701}," s.age ",[425,9828,2190],{"class":1155},[425,9830,9821],{"class":435},[425,9832,2458],{"class":1155},[425,9834,9835],{"class":701}," s.score ",[425,9837,2190],{"class":1155},[425,9839,9840],{"class":701}," endl;\n",[425,9842,9843],{"class":427,"line":841},[425,9844,2578],{"class":701},[425,9846,9847],{"class":427,"line":852},[425,9848,9849],{"class":1216},"\u002F\u002F地址传递\n",[425,9851,9852,9854,9857,9859,9861,9863,9865,9867],{"class":427,"line":862},[425,9853,6364],{"class":1155},[425,9855,9856],{"class":431}," printStudent2",[425,9858,1159],{"class":701},[425,9860,8759],{"class":1155},[425,9862,8898],{"class":431},[425,9864,7518],{"class":1155},[425,9866,1843],{"class":6216},[425,9868,1165],{"class":701},[425,9870,9871],{"class":427,"line":878},[425,9872,2559],{"class":701},[425,9874,9875,9877,9879,9882,9884,9886,9888,9891,9893,9895,9897,9900,9902],{"class":427,"line":914},[425,9876,7529],{"class":701},[425,9878,2190],{"class":1155},[425,9880,9881],{"class":701}," s->name ",[425,9883,2190],{"class":1155},[425,9885,9821],{"class":435},[425,9887,2458],{"class":1155},[425,9889,9890],{"class":701}," s->age ",[425,9892,2190],{"class":1155},[425,9894,9821],{"class":435},[425,9896,2458],{"class":1155},[425,9898,9899],{"class":701}," s->score ",[425,9901,2190],{"class":1155},[425,9903,9840],{"class":701},[425,9905,9906],{"class":427,"line":943},[425,9907,2578],{"class":701},[425,9909,9910,9912,9914],{"class":427,"line":956},[425,9911,1162],{"class":1155},[425,9913,2973],{"class":431},[425,9915,2976],{"class":701},[425,9917,9918],{"class":427,"line":964},[425,9919,2559],{"class":701},[425,9921,9922,9924,9926],{"class":427,"line":2733},[425,9923,8895],{"class":1155},[425,9925,8898],{"class":431},[425,9927,9928],{"class":701}," s;\n",[425,9930,9931,9934,9936,9939],{"class":427,"line":2750},[425,9932,9933],{"class":701},"    s.name ",[425,9935,1204],{"class":1155},[425,9937,9938],{"class":435}," \"张三\"",[425,9940,2307],{"class":701},[425,9942,9943,9946,9948,9951],{"class":427,"line":2755},[425,9944,9945],{"class":701},"    s.age ",[425,9947,1204],{"class":1155},[425,9949,9950],{"class":691}," 20",[425,9952,2307],{"class":701},[425,9954,9955,9958,9960,9963],{"class":427,"line":2760},[425,9956,9957],{"class":701},"    s.score ",[425,9959,1204],{"class":1155},[425,9961,9962],{"class":691}," 85",[425,9964,2307],{"class":701},[425,9966,9967,9969,9971,9974,9976],{"class":427,"line":2765},[425,9968,2564],{"class":701},[425,9970,2190],{"class":1155},[425,9972,9973],{"class":435},"\"值传递:\"",[425,9975,2190],{"class":1155},[425,9977,2212],{"class":701},[425,9979,9980,9983],{"class":427,"line":2779},[425,9981,9982],{"class":431},"    printStudent1",[425,9984,9985],{"class":701},"(s);\n",[425,9987,9988,9990,9992,9995,9997],{"class":427,"line":2784},[425,9989,2564],{"class":701},[425,9991,2190],{"class":1155},[425,9993,9994],{"class":435},"\"地址传递:\"",[425,9996,2190],{"class":1155},[425,9998,2212],{"class":701},[425,10000,10001,10004,10006,10008],{"class":427,"line":3577},[425,10002,10003],{"class":431},"    printStudent2",[425,10005,1159],{"class":701},[425,10007,1502],{"class":1155},[425,10009,10010],{"class":701},"s); \n",[425,10012,10013,10015,10017],{"class":427,"line":3591},[425,10014,5090],{"class":1155},[425,10016,5093],{"class":691},[425,10018,2307],{"class":701},[425,10020,10021],{"class":427,"line":3599},[425,10022,2578],{"class":701},[19,10024,970],{},[447,10026,10027,10030],{},[450,10028,10029],{},"1.先定义结构体，不要在函数中写结构体的定义",[450,10031,10032],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[1099,10034,10036],{"id":10035},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,10038,10039],{},"用const防止误操作",[416,10041,10043],{"className":1146,"code":10042,"language":1148,"meta":395,"style":395},"#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",[422,10044,10045,10051,10061,10067,10072,10076,10080,10086,10092,10096,10112,10116,10139,10143,10151,10155,10176,10183,10187],{"__ignoreMap":395},[425,10046,10047,10049],{"class":427,"line":428},[425,10048,2950],{"class":1155},[425,10050,2953],{"class":435},[425,10052,10053,10055,10057,10059],{"class":427,"line":698},[425,10054,2958],{"class":1155},[425,10056,2961],{"class":1155},[425,10058,2964],{"class":431},[425,10060,2307],{"class":701},[425,10062,10063,10065],{"class":427,"line":710},[425,10064,2950],{"class":1155},[425,10066,8749],{"class":435},[425,10068,10069],{"class":427,"line":721},[425,10070,10071],{"class":701},"sctuct Student\n",[425,10073,10074],{"class":427,"line":735},[425,10075,2559],{"class":701},[425,10077,10078],{"class":427,"line":743},[425,10079,8785],{"class":701},[425,10081,10082,10084],{"class":427,"line":751},[425,10083,2985],{"class":1155},[425,10085,8797],{"class":701},[425,10087,10088,10090],{"class":427,"line":759},[425,10089,2985],{"class":1155},[425,10091,8809],{"class":701},[425,10093,10094],{"class":427,"line":770},[425,10095,4995],{"class":701},[425,10097,10098,10100,10103,10105,10108,10110],{"class":427,"line":780},[425,10099,6364],{"class":1155},[425,10101,10102],{"class":431}," printStudents",[425,10104,1159],{"class":701},[425,10106,10107],{"class":431},"student",[425,10109,9428],{"class":6216},[425,10111,1165],{"class":701},[425,10113,10114],{"class":427,"line":790},[425,10115,2559],{"class":701},[425,10117,10118,10120,10122,10125,10127,10130,10132,10135,10137],{"class":427,"line":805},[425,10119,2564],{"class":701},[425,10121,2190],{"class":1155},[425,10123,10124],{"class":701},"s.name",[425,10126,2190],{"class":1155},[425,10128,10129],{"class":701},"s.age",[425,10131,2190],{"class":1155},[425,10133,10134],{"class":701},"s.score",[425,10136,2190],{"class":1155},[425,10138,2212],{"class":701},[425,10140,10141],{"class":427,"line":818},[425,10142,2578],{"class":701},[425,10144,10145,10147,10149],{"class":427,"line":831},[425,10146,1162],{"class":1155},[425,10148,2973],{"class":431},[425,10150,6978],{"class":701},[425,10152,10153],{"class":427,"line":841},[425,10154,2559],{"class":701},[425,10156,10157,10160,10162,10164,10166,10168,10170,10172,10174],{"class":427,"line":852},[425,10158,10159],{"class":701},"    Student s",[425,10161,1204],{"class":1155},[425,10163,2043],{"class":701},[425,10165,8916],{"class":435},[425,10167,1527],{"class":701},[425,10169,1798],{"class":691},[425,10171,1527],{"class":701},[425,10173,1798],{"class":691},[425,10175,4995],{"class":701},[425,10177,10178,10181],{"class":427,"line":862},[425,10179,10180],{"class":431},"    printStudent",[425,10182,9985],{"class":701},[425,10184,10185],{"class":427,"line":878},[425,10186,3400],{"emptyLinePlaceholder":1084},[425,10188,10189],{"class":427,"line":914},[425,10190,2578],{"class":701},[19,10192,970],{},[447,10194,10195,10198,10201],{},[450,10196,10197],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[450,10199,10200],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[450,10202,10203],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[416,10205,10207],{"className":1146,"code":10206,"language":1148,"meta":395,"style":395},"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",[422,10208,10209,10228,10232,10237,10257],{"__ignoreMap":395},[425,10210,10211,10213,10215,10217,10219,10222,10224,10226],{"class":427,"line":428},[425,10212,6364],{"class":1155},[425,10214,10102],{"class":431},[425,10216,1159],{"class":701},[425,10218,7792],{"class":1155},[425,10220,10221],{"class":431}," student",[425,10223,7518],{"class":1155},[425,10225,1843],{"class":6216},[425,10227,1165],{"class":701},[425,10229,10230],{"class":427,"line":698},[425,10231,2559],{"class":701},[425,10233,10234],{"class":427,"line":710},[425,10235,10236],{"class":1216},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[425,10238,10239,10241,10243,10245,10247,10249,10251,10253,10255],{"class":427,"line":721},[425,10240,2564],{"class":701},[425,10242,2190],{"class":1155},[425,10244,10124],{"class":701},[425,10246,2190],{"class":1155},[425,10248,10129],{"class":701},[425,10250,2190],{"class":1155},[425,10252,10134],{"class":701},[425,10254,2190],{"class":1155},[425,10256,2212],{"class":701},[425,10258,10259],{"class":427,"line":735},[425,10260,2578],{"class":701},[1099,10262,10264],{"id":10263},"_47案例","4.7案例",[972,10266,10267],{},[450,10268,10269],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[416,10271,10273],{"className":1146,"code":10272,"language":1148,"meta":395,"style":395},"#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",[422,10274,10275,10281,10291,10297,10304,10308,10314,10318,10323,10329,10335,10339,10343,10349,10353,10358,10363,10376,10380,10385,10411,10415,10427,10454,10458,10470,10480,10484,10489,10518,10522,10534,10543,10570,10581,10591,10595,10599,10603,10608,10632,10636,10660,10664,10683,10709,10713,10738,10761,10785,10790,10795,10800,10809,10814,10820,10841,10847,10861,10867,10894,10903,10909,10917,10922],{"__ignoreMap":395},[425,10276,10277,10279],{"class":427,"line":428},[425,10278,2950],{"class":1155},[425,10280,2953],{"class":435},[425,10282,10283,10285,10287,10289],{"class":427,"line":698},[425,10284,2958],{"class":1155},[425,10286,2961],{"class":1155},[425,10288,2964],{"class":431},[425,10290,2307],{"class":701},[425,10292,10293,10295],{"class":427,"line":710},[425,10294,2950],{"class":1155},[425,10296,8749],{"class":435},[425,10298,10299,10301],{"class":427,"line":721},[425,10300,2950],{"class":1155},[425,10302,10303],{"class":435},"\u003Cctime>\n",[425,10305,10306],{"class":427,"line":735},[425,10307,9538],{"class":1216},[425,10309,10310,10312],{"class":427,"line":743},[425,10311,8759],{"class":1155},[425,10313,8762],{"class":431},[425,10315,10316],{"class":427,"line":751},[425,10317,2559],{"class":701},[425,10319,10320],{"class":427,"line":759},[425,10321,10322],{"class":701},"    string sName;\n",[425,10324,10325,10327],{"class":427,"line":770},[425,10326,2985],{"class":1155},[425,10328,8797],{"class":701},[425,10330,10331,10333],{"class":427,"line":780},[425,10332,2985],{"class":1155},[425,10334,8809],{"class":701},[425,10336,10337],{"class":427,"line":790},[425,10338,4995],{"class":701},[425,10340,10341],{"class":427,"line":805},[425,10342,9575],{"class":1216},[425,10344,10345,10347],{"class":427,"line":818},[425,10346,8759],{"class":1155},[425,10348,9582],{"class":431},[425,10350,10351],{"class":427,"line":831},[425,10352,2559],{"class":701},[425,10354,10355],{"class":427,"line":841},[425,10356,10357],{"class":701},"    string tName;\n",[425,10359,10360],{"class":427,"line":852},[425,10361,10362],{"class":1216},"    \u002F\u002F学生数组\n",[425,10364,10365,10367,10369,10372,10374],{"class":427,"line":862},[425,10366,8895],{"class":1155},[425,10368,8898],{"class":431},[425,10370,10371],{"class":701}," sArray[",[425,10373,1468],{"class":691},[425,10375,5690],{"class":701},[425,10377,10378],{"class":427,"line":878},[425,10379,4995],{"class":701},[425,10381,10382],{"class":427,"line":914},[425,10383,10384],{"class":1216},"\u002F\u002F给老师和学生赋值的函数\n",[425,10386,10387,10389,10392,10394,10396,10399,10402,10405,10407,10409],{"class":427,"line":943},[425,10388,6364],{"class":1155},[425,10390,10391],{"class":431}," allocateSpace",[425,10393,1159],{"class":701},[425,10395,8759],{"class":1155},[425,10397,10398],{"class":431}," Teacher",[425,10400,10401],{"class":6216}," tArray",[425,10403,10404],{"class":701},"[],",[425,10406,1162],{"class":1155},[425,10408,8331],{"class":6216},[425,10410,1165],{"class":701},[425,10412,10413],{"class":427,"line":956},[425,10414,2559],{"class":701},[425,10416,10417,10420,10422,10425],{"class":427,"line":964},[425,10418,10419],{"class":701},"    string nameSeed",[425,10421,1204],{"class":1155},[425,10423,10424],{"class":435},"\"ABCDE\"",[425,10426,2307],{"class":701},[425,10428,10429,10431,10433,10435,10438,10440,10442,10445,10447,10450,10452],{"class":427,"line":2733},[425,10430,4201],{"class":1155},[425,10432,2664],{"class":701},[425,10434,1162],{"class":1155},[425,10436,10437],{"class":701}," i ",[425,10439,1204],{"class":1155},[425,10441,5093],{"class":691},[425,10443,10444],{"class":701},"; i ",[425,10446,2057],{"class":1155},[425,10448,10449],{"class":701}," len; i",[425,10451,3292],{"class":1155},[425,10453,1165],{"class":701},[425,10455,10456],{"class":427,"line":2750},[425,10457,3030],{"class":701},[425,10459,10460,10463,10465,10468],{"class":427,"line":2755},[425,10461,10462],{"class":701},"        tArray[i].tName ",[425,10464,1204],{"class":1155},[425,10466,10467],{"class":435}," \"Teacher_\"",[425,10469,2307],{"class":701},[425,10471,10472,10474,10477],{"class":427,"line":2760},[425,10473,10462],{"class":701},[425,10475,10476],{"class":1155},"+=",[425,10478,10479],{"class":701},"nameSeed[i];\n",[425,10481,10482],{"class":427,"line":2765},[425,10483,3400],{"emptyLinePlaceholder":1084},[425,10485,10486],{"class":427,"line":2779},[425,10487,10488],{"class":1216},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[425,10490,10491,10493,10495,10497,10500,10502,10504,10507,10509,10511,10514,10516],{"class":427,"line":2784},[425,10492,4403],{"class":1155},[425,10494,2664],{"class":701},[425,10496,1162],{"class":1155},[425,10498,10499],{"class":701}," j ",[425,10501,1204],{"class":1155},[425,10503,5093],{"class":691},[425,10505,10506],{"class":701},"; j ",[425,10508,2057],{"class":1155},[425,10510,3148],{"class":691},[425,10512,10513],{"class":701},"; j",[425,10515,3292],{"class":1155},[425,10517,1165],{"class":701},[425,10519,10520],{"class":427,"line":3577},[425,10521,3510],{"class":701},[425,10523,10524,10527,10529,10532],{"class":427,"line":3591},[425,10525,10526],{"class":701},"            tArray[i].sArray[j].sName ",[425,10528,1204],{"class":1155},[425,10530,10531],{"class":435}," \"Student_\"",[425,10533,2307],{"class":701},[425,10535,10536,10538,10540],{"class":427,"line":3599},[425,10537,10526],{"class":701},[425,10539,10476],{"class":1155},[425,10541,10542],{"class":701}," nameSeed[j];\n",[425,10544,10545,10548,10551,10553,10555,10557,10559,10561,10563,10565,10567],{"class":427,"line":3604},[425,10546,10547],{"class":1155},"            int",[425,10549,10550],{"class":701}," random",[425,10552,1204],{"class":1155},[425,10554,3424],{"class":431},[425,10556,3427],{"class":701},[425,10558,1477],{"class":1155},[425,10560,2054],{"class":691},[425,10562,1629],{"class":1155},[425,10564,1550],{"class":691},[425,10566,1213],{"class":701},[425,10568,10569],{"class":1216},"\u002F\u002F40~99\n",[425,10571,10572,10575,10577,10579],{"class":427,"line":3610},[425,10573,10574],{"class":701},"            tArray[i].sArray[j].age ",[425,10576,1204],{"class":1155},[425,10578,9950],{"class":691},[425,10580,2307],{"class":701},[425,10582,10583,10586,10588],{"class":427,"line":3616},[425,10584,10585],{"class":701},"            tArray[i].sArray[j].score ",[425,10587,1204],{"class":1155},[425,10589,10590],{"class":701}," random;\n",[425,10592,10593],{"class":427,"line":3621},[425,10594,3529],{"class":701},[425,10596,10597],{"class":427,"line":8948},[425,10598,3187],{"class":701},[425,10600,10601],{"class":427,"line":8972},[425,10602,2578],{"class":701},[425,10604,10605],{"class":427,"line":8977},[425,10606,10607],{"class":1216},"\u002F\u002F打印所有信息的函数\n",[425,10609,10610,10612,10615,10617,10619,10621,10623,10626,10628,10630],{"class":427,"line":8983},[425,10611,6364],{"class":1155},[425,10613,10614],{"class":431}," printInfo",[425,10616,1159],{"class":701},[425,10618,8759],{"class":1155},[425,10620,10398],{"class":431},[425,10622,10401],{"class":6216},[425,10624,10625],{"class":701},"[], ",[425,10627,1162],{"class":1155},[425,10629,8331],{"class":6216},[425,10631,1165],{"class":701},[425,10633,10634],{"class":427,"line":9010},[425,10635,2559],{"class":701},[425,10637,10638,10640,10642,10644,10646,10648,10650,10652,10654,10656,10658],{"class":427,"line":9015},[425,10639,4201],{"class":1155},[425,10641,2664],{"class":701},[425,10643,1162],{"class":1155},[425,10645,10437],{"class":701},[425,10647,1204],{"class":1155},[425,10649,5093],{"class":691},[425,10651,10444],{"class":701},[425,10653,2057],{"class":1155},[425,10655,10449],{"class":701},[425,10657,3292],{"class":1155},[425,10659,1165],{"class":701},[425,10661,10662],{"class":427,"line":9021},[425,10663,3030],{"class":701},[425,10665,10666,10669,10671,10674,10676,10679,10681],{"class":427,"line":9033},[425,10667,10668],{"class":701},"        cout ",[425,10670,2190],{"class":1155},[425,10672,10673],{"class":435}," \"Teacher: \"",[425,10675,2458],{"class":1155},[425,10677,10678],{"class":701}," tArray[i].tName ",[425,10680,2190],{"class":1155},[425,10682,9840],{"class":701},[425,10684,10685,10687,10689,10691,10693,10695,10697,10699,10701,10703,10705,10707],{"class":427,"line":9045},[425,10686,4403],{"class":1155},[425,10688,2664],{"class":701},[425,10690,1162],{"class":1155},[425,10692,10499],{"class":701},[425,10694,1204],{"class":1155},[425,10696,5093],{"class":691},[425,10698,10506],{"class":701},[425,10700,2057],{"class":1155},[425,10702,3148],{"class":691},[425,10704,10513],{"class":701},[425,10706,3292],{"class":1155},[425,10708,1165],{"class":701},[425,10710,10711],{"class":427,"line":9057},[425,10712,3510],{"class":701},[425,10714,10716,10719,10721,10724,10726,10729,10731,10734,10736],{"class":427,"line":10715},47,[425,10717,10718],{"class":701},"            cout ",[425,10720,2190],{"class":1155},[425,10722,10723],{"class":435}," \"",[425,10725,2247],{"class":691},[425,10727,10728],{"class":435},"Student: \"",[425,10730,2458],{"class":1155},[425,10732,10733],{"class":701}," tArray[i].sArray[j].sName",[425,10735,2190],{"class":1155},[425,10737,2212],{"class":701},[425,10739,10741,10743,10745,10747,10749,10752,10754,10757,10759],{"class":427,"line":10740},48,[425,10742,10718],{"class":701},[425,10744,2190],{"class":1155},[425,10746,10723],{"class":435},[425,10748,2247],{"class":691},[425,10750,10751],{"class":435},"Age: \"",[425,10753,2458],{"class":1155},[425,10755,10756],{"class":701}," tArray[i].sArray[j].age ",[425,10758,2190],{"class":1155},[425,10760,9840],{"class":701},[425,10762,10764,10766,10768,10770,10772,10775,10777,10780,10782],{"class":427,"line":10763},49,[425,10765,10718],{"class":701},[425,10767,2190],{"class":1155},[425,10769,10723],{"class":435},[425,10771,2247],{"class":691},[425,10773,10774],{"class":435},"Score: \"",[425,10776,2458],{"class":1155},[425,10778,10779],{"class":701}," tArray[i].sArray[j].score ",[425,10781,2190],{"class":1155},[425,10783,10784],{"class":701}," endl;   \n",[425,10786,10788],{"class":427,"line":10787},50,[425,10789,3529],{"class":701},[425,10791,10793],{"class":427,"line":10792},51,[425,10794,3187],{"class":701},[425,10796,10798],{"class":427,"line":10797},52,[425,10799,2578],{"class":701},[425,10801,10803,10805,10807],{"class":427,"line":10802},53,[425,10804,1162],{"class":1155},[425,10806,2973],{"class":431},[425,10808,2976],{"class":701},[425,10810,10812],{"class":427,"line":10811},54,[425,10813,2559],{"class":701},[425,10815,10817],{"class":427,"line":10816},55,[425,10818,10819],{"class":1216},"    \u002F\u002F随机数种子\n",[425,10821,10823,10825,10827,10829,10831,10833,10835,10837,10839],{"class":427,"line":10822},56,[425,10824,3373],{"class":431},[425,10826,3376],{"class":701},[425,10828,3379],{"class":1155},[425,10830,3382],{"class":1155},[425,10832,895],{"class":701},[425,10834,3387],{"class":431},[425,10836,1159],{"class":701},[425,10838,3392],{"class":691},[425,10840,3395],{"class":701},[425,10842,10844],{"class":427,"line":10843},57,[425,10845,10846],{"class":1216},"    \u002F\u002F1.创建3名老师的数组\n",[425,10848,10850,10852,10854,10857,10859],{"class":427,"line":10849},58,[425,10851,8895],{"class":1155},[425,10853,10398],{"class":431},[425,10855,10856],{"class":701}," tArray[",[425,10858,1229],{"class":691},[425,10860,5690],{"class":701},[425,10862,10864],{"class":427,"line":10863},59,[425,10865,10866],{"class":1216},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[425,10868,10870,10872,10875,10877,10880,10883,10885,10887,10890,10892],{"class":427,"line":10869},60,[425,10871,2985],{"class":1155},[425,10873,10874],{"class":701}," len ",[425,10876,1204],{"class":1155},[425,10878,10879],{"class":1155}," sizeof",[425,10881,10882],{"class":701},"(tArray) ",[425,10884,1732],{"class":1155},[425,10886,10879],{"class":1155},[425,10888,10889],{"class":701},"(tArray[",[425,10891,1341],{"class":691},[425,10893,4856],{"class":701},[425,10895,10897,10900],{"class":427,"line":10896},61,[425,10898,10899],{"class":431},"    allocateSpace",[425,10901,10902],{"class":701},"(tArray, len);\n",[425,10904,10906],{"class":427,"line":10905},62,[425,10907,10908],{"class":1216},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[425,10910,10912,10915],{"class":427,"line":10911},63,[425,10913,10914],{"class":431},"    printInfo",[425,10916,10902],{"class":701},[425,10918,10920],{"class":427,"line":10919},64,[425,10921,3400],{"emptyLinePlaceholder":1084},[425,10923,10925],{"class":427,"line":10924},65,[425,10926,2578],{"class":701},[972,10928,10929],{"start":698},[450,10930,10931,10934],{},[400,10932,10933],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,10936,10937],{},"五名英雄信息如下：",[416,10939,10943],{"className":10940,"code":10941,"language":10942,"meta":395,"style":395},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[422,10944,10945,10963,10980,10997,11014],{"__ignoreMap":395},[425,10946,10947,10949,10952,10954,10956,10958,10961],{"class":427,"line":428},[425,10948,5917],{"class":701},[425,10950,10951],{"class":435},"\"刘备\"",[425,10953,1527],{"class":701},[425,10955,1923],{"class":691},[425,10957,1527],{"class":701},[425,10959,10960],{"class":435},"\"男\"",[425,10962,5930],{"class":701},[425,10964,10965,10967,10970,10972,10974,10976,10978],{"class":427,"line":698},[425,10966,5917],{"class":701},[425,10968,10969],{"class":435},"\"关羽\"",[425,10971,1527],{"class":701},[425,10973,1898],{"class":691},[425,10975,1527],{"class":701},[425,10977,10960],{"class":435},[425,10979,5930],{"class":701},[425,10981,10982,10984,10987,10989,10991,10993,10995],{"class":427,"line":710},[425,10983,5917],{"class":701},[425,10985,10986],{"class":435},"\"张飞\"",[425,10988,1527],{"class":701},[425,10990,1848],{"class":691},[425,10992,1527],{"class":701},[425,10994,10960],{"class":435},[425,10996,5930],{"class":701},[425,10998,10999,11001,11004,11006,11008,11010,11012],{"class":427,"line":721},[425,11000,5917],{"class":701},[425,11002,11003],{"class":435},"\"赵云\"",[425,11005,1527],{"class":701},[425,11007,1873],{"class":691},[425,11009,1527],{"class":701},[425,11011,10960],{"class":435},[425,11013,5930],{"class":701},[425,11015,11016,11018,11021,11023,11025,11027,11030],{"class":427,"line":735},[425,11017,5917],{"class":701},[425,11019,11020],{"class":435},"\"貂蝉\"",[425,11022,1527],{"class":701},[425,11024,1823],{"class":691},[425,11026,1527],{"class":701},[425,11028,11029],{"class":435},"\"女\"",[425,11031,5930],{"class":701},[19,11033,11034],{},"代码：",[416,11036,11038],{"className":1146,"code":11037,"language":1148,"meta":395,"style":395},"#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",[422,11039,11040,11046,11056,11062,11069,11073,11077,11083,11088,11092,11097,11120,11124,11149,11153,11186,11191,11220,11225,11240,11266,11286,11291,11296,11300,11304,11309,11331,11335,11359,11363,11425,11429,11433,11441,11445,11450,11461,11465,11481,11497,11513,11529,11545,11549,11569,11591,11596,11609,11616,11621,11627,11632,11645,11651],{"__ignoreMap":395},[425,11041,11042,11044],{"class":427,"line":428},[425,11043,2950],{"class":1155},[425,11045,2953],{"class":435},[425,11047,11048,11050,11052,11054],{"class":427,"line":698},[425,11049,2958],{"class":1155},[425,11051,2961],{"class":1155},[425,11053,2964],{"class":431},[425,11055,2307],{"class":701},[425,11057,11058,11060],{"class":427,"line":710},[425,11059,2950],{"class":1155},[425,11061,8749],{"class":435},[425,11063,11064,11066],{"class":427,"line":721},[425,11065,8759],{"class":1155},[425,11067,11068],{"class":431}," Sanguo\n",[425,11070,11071],{"class":427,"line":735},[425,11072,2559],{"class":701},[425,11074,11075],{"class":427,"line":743},[425,11076,8785],{"class":701},[425,11078,11079,11081],{"class":427,"line":751},[425,11080,2985],{"class":1155},[425,11082,8797],{"class":701},[425,11084,11085],{"class":427,"line":759},[425,11086,11087],{"class":701},"    string gender;\n",[425,11089,11090],{"class":427,"line":770},[425,11091,4995],{"class":701},[425,11093,11094],{"class":427,"line":780},[425,11095,11096],{"class":1216},"\u002F\u002F定义排序函数\n",[425,11098,11099,11101,11103,11105,11108,11110,11112,11114,11116,11118],{"class":427,"line":790},[425,11100,6364],{"class":1155},[425,11102,8316],{"class":431},[425,11104,1159],{"class":701},[425,11106,11107],{"class":431},"Sanguo",[425,11109,7518],{"class":1155},[425,11111,1843],{"class":6216},[425,11113,1527],{"class":701},[425,11115,1162],{"class":1155},[425,11117,8331],{"class":6216},[425,11119,1165],{"class":701},[425,11121,11122],{"class":427,"line":805},[425,11123,2559],{"class":701},[425,11125,11126,11128,11130,11132,11134,11136,11138,11140,11142,11145,11147],{"class":427,"line":818},[425,11127,4201],{"class":1155},[425,11129,1159],{"class":701},[425,11131,1162],{"class":1155},[425,11133,4032],{"class":701},[425,11135,1204],{"class":1155},[425,11137,1341],{"class":691},[425,11139,4039],{"class":701},[425,11141,2057],{"class":1155},[425,11143,11144],{"class":701},"len;i",[425,11146,3292],{"class":1155},[425,11148,1165],{"class":701},[425,11150,11151],{"class":427,"line":831},[425,11152,3030],{"class":701},[425,11154,11155,11158,11160,11162,11164,11166,11168,11170,11172,11174,11176,11178,11180,11182,11184],{"class":427,"line":841},[425,11156,11157],{"class":1155},"     for",[425,11159,2664],{"class":701},[425,11161,1162],{"class":1155},[425,11163,4410],{"class":701},[425,11165,1204],{"class":1155},[425,11167,1341],{"class":691},[425,11169,4417],{"class":701},[425,11171,2057],{"class":1155},[425,11173,8358],{"class":701},[425,11175,1680],{"class":1155},[425,11177,1367],{"class":691},[425,11179,1680],{"class":1155},[425,11181,4550],{"class":701},[425,11183,3292],{"class":1155},[425,11185,1165],{"class":701},[425,11187,11188],{"class":427,"line":852},[425,11189,11190],{"class":701},"     {\n",[425,11192,11193,11196,11199,11201,11204,11206,11209,11211,11213,11215,11217],{"class":427,"line":862},[425,11194,11195],{"class":1155},"         if",[425,11197,11198],{"class":701}," ((s",[425,11200,1629],{"class":1155},[425,11202,11203],{"class":701},"j)->age ",[425,11205,2107],{"class":1155},[425,11207,11208],{"class":701}," (s",[425,11210,1629],{"class":1155},[425,11212,1615],{"class":701},[425,11214,1629],{"class":1155},[425,11216,1367],{"class":691},[425,11218,11219],{"class":701},")->age)\n",[425,11221,11222],{"class":427,"line":878},[425,11223,11224],{"class":701},"         {\n",[425,11226,11227,11230,11232,11235,11237],{"class":427,"line":914},[425,11228,11229],{"class":701},"             Sanguo temp",[425,11231,8153],{"class":1155},[425,11233,11234],{"class":701},"(s",[425,11236,1629],{"class":1155},[425,11238,11239],{"class":701},"j);\n",[425,11241,11242,11245,11247,11249,11252,11254,11256,11258,11260,11262,11264],{"class":427,"line":943},[425,11243,11244],{"class":1155},"             *",[425,11246,11234],{"class":701},[425,11248,1629],{"class":1155},[425,11250,11251],{"class":701},"j)",[425,11253,8153],{"class":1155},[425,11255,11234],{"class":701},[425,11257,1629],{"class":1155},[425,11259,1615],{"class":701},[425,11261,1629],{"class":1155},[425,11263,1367],{"class":691},[425,11265,3719],{"class":701},[425,11267,11268,11270,11272,11274,11276,11278,11280,11282,11284],{"class":427,"line":956},[425,11269,11244],{"class":1155},[425,11271,11234],{"class":701},[425,11273,1629],{"class":1155},[425,11275,1615],{"class":701},[425,11277,1629],{"class":1155},[425,11279,1367],{"class":691},[425,11281,895],{"class":701},[425,11283,1204],{"class":1155},[425,11285,5280],{"class":701},[425,11287,11288],{"class":427,"line":964},[425,11289,11290],{"class":701},"         }\n",[425,11292,11293],{"class":427,"line":2733},[425,11294,11295],{"class":701},"     }\n",[425,11297,11298],{"class":427,"line":2750},[425,11299,3187],{"class":701},[425,11301,11302],{"class":427,"line":2755},[425,11303,2578],{"class":701},[425,11305,11306],{"class":427,"line":2760},[425,11307,11308],{"class":1216},"\u002F\u002F定义打印函数\n",[425,11310,11311,11313,11315,11317,11319,11321,11323,11325,11327,11329],{"class":427,"line":2765},[425,11312,6364],{"class":1155},[425,11314,10614],{"class":431},[425,11316,1159],{"class":701},[425,11318,11107],{"class":431},[425,11320,7518],{"class":1155},[425,11322,1843],{"class":6216},[425,11324,1527],{"class":701},[425,11326,1162],{"class":1155},[425,11328,8331],{"class":6216},[425,11330,1165],{"class":701},[425,11332,11333],{"class":427,"line":2779},[425,11334,2559],{"class":701},[425,11336,11337,11339,11341,11343,11345,11347,11349,11351,11353,11355,11357],{"class":427,"line":2784},[425,11338,4201],{"class":1155},[425,11340,2664],{"class":701},[425,11342,1162],{"class":1155},[425,11344,4032],{"class":701},[425,11346,1204],{"class":1155},[425,11348,1341],{"class":691},[425,11350,4039],{"class":701},[425,11352,2057],{"class":1155},[425,11354,11144],{"class":701},[425,11356,3292],{"class":1155},[425,11358,1165],{"class":701},[425,11360,11361],{"class":427,"line":3577},[425,11362,3030],{"class":701},[425,11364,11365,11367,11369,11371,11373,11376,11378,11380,11382,11385,11387,11389,11391,11394,11396,11398,11400,11403,11405,11407,11409,11412,11414,11416,11418,11421,11423],{"class":427,"line":3591},[425,11366,4451],{"class":701},[425,11368,2190],{"class":1155},[425,11370,1400],{"class":435},[425,11372,2247],{"class":691},[425,11374,11375],{"class":435},"姓名：\"",[425,11377,2190],{"class":1155},[425,11379,11234],{"class":701},[425,11381,1629],{"class":1155},[425,11383,11384],{"class":701},"i)->name",[425,11386,2190],{"class":1155},[425,11388,1400],{"class":435},[425,11390,2247],{"class":691},[425,11392,11393],{"class":435},"年龄：\"",[425,11395,2190],{"class":1155},[425,11397,11234],{"class":701},[425,11399,1629],{"class":1155},[425,11401,11402],{"class":701},"i)->age",[425,11404,2190],{"class":1155},[425,11406,1400],{"class":435},[425,11408,2247],{"class":691},[425,11410,11411],{"class":435},"性别：\"",[425,11413,2190],{"class":1155},[425,11415,11234],{"class":701},[425,11417,1629],{"class":1155},[425,11419,11420],{"class":701},"i)->gender",[425,11422,2190],{"class":1155},[425,11424,2212],{"class":701},[425,11426,11427],{"class":427,"line":3599},[425,11428,3187],{"class":701},[425,11430,11431],{"class":427,"line":3604},[425,11432,2578],{"class":701},[425,11434,11435,11437,11439],{"class":427,"line":3610},[425,11436,1162],{"class":1155},[425,11438,2973],{"class":431},[425,11440,2976],{"class":701},[425,11442,11443],{"class":427,"line":3616},[425,11444,2559],{"class":701},[425,11446,11447],{"class":427,"line":3621},[425,11448,11449],{"class":1216},"    \u002F\u002F定义结构体变量\n",[425,11451,11452,11455,11457,11459],{"class":427,"line":8948},[425,11453,11454],{"class":701},"    Sanguo s1[",[425,11456,1468],{"class":691},[425,11458,2087],{"class":701},[425,11460,5908],{"class":1155},[425,11462,11463],{"class":427,"line":8972},[425,11464,3030],{"class":701},[425,11466,11467,11469,11471,11473,11475,11477,11479],{"class":427,"line":8977},[425,11468,5917],{"class":701},[425,11470,10951],{"class":435},[425,11472,1527],{"class":701},[425,11474,1923],{"class":691},[425,11476,1527],{"class":701},[425,11478,10960],{"class":435},[425,11480,5930],{"class":701},[425,11482,11483,11485,11487,11489,11491,11493,11495],{"class":427,"line":8983},[425,11484,5917],{"class":701},[425,11486,10969],{"class":435},[425,11488,1527],{"class":701},[425,11490,1898],{"class":691},[425,11492,1527],{"class":701},[425,11494,10960],{"class":435},[425,11496,5930],{"class":701},[425,11498,11499,11501,11503,11505,11507,11509,11511],{"class":427,"line":9010},[425,11500,5917],{"class":701},[425,11502,10986],{"class":435},[425,11504,1527],{"class":701},[425,11506,1848],{"class":691},[425,11508,1527],{"class":701},[425,11510,10960],{"class":435},[425,11512,5930],{"class":701},[425,11514,11515,11517,11519,11521,11523,11525,11527],{"class":427,"line":9015},[425,11516,5917],{"class":701},[425,11518,11003],{"class":435},[425,11520,1527],{"class":701},[425,11522,1873],{"class":691},[425,11524,1527],{"class":701},[425,11526,10960],{"class":435},[425,11528,5930],{"class":701},[425,11530,11531,11533,11535,11537,11539,11541,11543],{"class":427,"line":9021},[425,11532,5917],{"class":701},[425,11534,11020],{"class":435},[425,11536,1527],{"class":701},[425,11538,1823],{"class":691},[425,11540,1527],{"class":701},[425,11542,11029],{"class":435},[425,11544,5930],{"class":701},[425,11546,11547],{"class":427,"line":9033},[425,11548,5951],{"class":701},[425,11550,11551,11553,11555,11557,11560,11562,11565,11567],{"class":427,"line":9045},[425,11552,2985],{"class":1155},[425,11554,8331],{"class":701},[425,11556,5203],{"class":1155},[425,11558,11559],{"class":701},"(s1)",[425,11561,5209],{"class":1155},[425,11563,11564],{"class":701},"(s1[",[425,11566,1341],{"class":691},[425,11568,4856],{"class":701},[425,11570,11571,11574,11576,11579,11581,11584,11587,11589],{"class":427,"line":9057},[425,11572,11573],{"class":701},"    Sanguo ",[425,11575,1603],{"class":1155},[425,11577,11578],{"class":701},"s ",[425,11580,1204],{"class":1155},[425,11582,11583],{"class":1155}," &",[425,11585,11586],{"class":701},"s1[",[425,11588,1341],{"class":691},[425,11590,5690],{"class":701},[425,11592,11593],{"class":427,"line":10715},[425,11594,11595],{"class":1216},"    \u002F\u002F排序前：\n",[425,11597,11598,11600,11602,11605,11607],{"class":427,"line":10740},[425,11599,7529],{"class":701},[425,11601,2190],{"class":1155},[425,11603,11604],{"class":435}," \"排序前：\"",[425,11606,2458],{"class":1155},[425,11608,9840],{"class":701},[425,11610,11611,11613],{"class":427,"line":10763},[425,11612,10914],{"class":431},[425,11614,11615],{"class":701},"(s,len);\n",[425,11617,11618],{"class":427,"line":10787},[425,11619,11620],{"class":1216},"    \u002F\u002F调用排序函数\n",[425,11622,11623,11625],{"class":427,"line":10792},[425,11624,8598],{"class":431},[425,11626,11615],{"class":701},[425,11628,11629],{"class":427,"line":10797},[425,11630,11631],{"class":1216},"    \u002F\u002F排序后\n",[425,11633,11634,11636,11638,11641,11643],{"class":427,"line":10802},[425,11635,7529],{"class":701},[425,11637,2190],{"class":1155},[425,11639,11640],{"class":435}," \"排序后：\"",[425,11642,2458],{"class":1155},[425,11644,9840],{"class":701},[425,11646,11647,11649],{"class":427,"line":10811},[425,11648,10914],{"class":431},[425,11650,11615],{"class":701},[425,11652,11653],{"class":427,"line":10816},[425,11654,2578],{"class":701},[19,11656,11657,11658,11660],{},"注意：使用指针时直接用传首地址**&s",[425,11659,1341],{},"**",[1074,11662,11663],{},"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":395,"searchDepth":698,"depth":698,"links":11665},[11666,11667,11668,11669,11670,11671,11672],{"id":8703,"depth":698,"text":8704},{"id":9065,"depth":698,"text":9066},{"id":9334,"depth":698,"text":9335},{"id":9499,"depth":698,"text":9500},{"id":9715,"depth":698,"text":9716},{"id":10035,"depth":698,"text":10036},{"id":10263,"depth":698,"text":10264},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8692,"description":8700},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11679,"title":11680,"body":11681,"description":395,"extension":1082,"meta":13024,"navigation":1084,"path":13025,"seo":13026,"stem":13027,"__hash__":13028},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11682,"toc":13018},[11683,11686,11690,11696,11710,11715,11718,11722,11729,11735,11738,11745,11751,11756,11759,11762,11765,12329,12332,12346,12350,12355,12371,12511,12514,12520,12523,12528,12536,12644,12647,12652,12655,12660,12663,12669,12672,13015],[10,11684,11680],{"id":11685},"_5程序内存模型",[1099,11687,11689],{"id":11688},"_51内存分区模型","5.1内存分区模型",[19,11691,11692,11693],{},"C++程序在执行时，将内存大方向划分为",[400,11694,11695],{},"4个区域",[447,11697,11698,11701,11704,11707],{},[450,11699,11700],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[450,11702,11703],{},"全局区：存放全局变量和静态变量以及常量",[450,11705,11706],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[450,11708,11709],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,11711,11712],{},[400,11713,11714],{},"内存四区意义：",[19,11716,11717],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[14,11719,11721],{"id":11720},"_511程序运行前","5.1.1程序运行前",[19,11723,11724,11725,11728],{},"​\t在程序编译后，生成了exe可执行程序，",[400,11726,11727],{},"未执行该程序前","分为两个区域",[19,11730,11731,11732],{},"​\t",[400,11733,11734],{},"代码区：",[19,11736,11737],{},"​\t\t存放 CPU 执行的机器指令",[19,11739,11740,11741,11744],{},"​\t\t代码区是",[400,11742,11743],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,11746,11740,11747,11750],{},[400,11748,11749],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,11752,11731,11753],{},[400,11754,11755],{},"全局区：",[19,11757,11758],{},"​\t\t全局变量和静态变量存放在此.",[19,11760,11761],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,11763,11764],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[416,11766,11768],{"className":1146,"code":11767,"language":1148,"meta":395,"style":395},"\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",[422,11769,11770,11775,11788,11801,11805,11810,11825,11840,11844,11853,11857,11862,11875,11888,11892,11897,11923,11949,11953,11980,12006,12010,12015,12031,12046,12050,12076,12102,12106,12131,12156,12160,12186,12212,12216,12232,12247,12273,12299,12303,12313,12317,12325],{"__ignoreMap":395},[425,11771,11772],{"class":427,"line":428},[425,11773,11774],{"class":1216},"\u002F\u002F全局变量\n",[425,11776,11777,11779,11782,11784,11786],{"class":427,"line":698},[425,11778,1162],{"class":1155},[425,11780,11781],{"class":701}," g_a ",[425,11783,1204],{"class":1155},[425,11785,3038],{"class":691},[425,11787,2307],{"class":701},[425,11789,11790,11792,11795,11797,11799],{"class":427,"line":710},[425,11791,1162],{"class":1155},[425,11793,11794],{"class":701}," g_b ",[425,11796,1204],{"class":1155},[425,11798,3038],{"class":691},[425,11800,2307],{"class":701},[425,11802,11803],{"class":427,"line":721},[425,11804,3400],{"emptyLinePlaceholder":1084},[425,11806,11807],{"class":427,"line":735},[425,11808,11809],{"class":1216},"\u002F\u002F全局常量\n",[425,11811,11812,11814,11816,11819,11821,11823],{"class":427,"line":743},[425,11813,7792],{"class":1155},[425,11815,3382],{"class":1155},[425,11817,11818],{"class":701}," c_g_a ",[425,11820,1204],{"class":1155},[425,11822,3038],{"class":691},[425,11824,2307],{"class":701},[425,11826,11827,11829,11831,11834,11836,11838],{"class":427,"line":751},[425,11828,7792],{"class":1155},[425,11830,3382],{"class":1155},[425,11832,11833],{"class":701}," c_g_b ",[425,11835,1204],{"class":1155},[425,11837,3038],{"class":691},[425,11839,2307],{"class":701},[425,11841,11842],{"class":427,"line":759},[425,11843,3400],{"emptyLinePlaceholder":1084},[425,11845,11846,11848,11850],{"class":427,"line":770},[425,11847,1162],{"class":1155},[425,11849,2973],{"class":431},[425,11851,11852],{"class":701},"() {\n",[425,11854,11855],{"class":427,"line":780},[425,11856,3400],{"emptyLinePlaceholder":1084},[425,11858,11859],{"class":427,"line":790},[425,11860,11861],{"class":1216},"    \u002F\u002F局部变量\n",[425,11863,11864,11866,11869,11871,11873],{"class":427,"line":805},[425,11865,2985],{"class":1155},[425,11867,11868],{"class":701}," a ",[425,11870,1204],{"class":1155},[425,11872,3038],{"class":691},[425,11874,2307],{"class":701},[425,11876,11877,11879,11882,11884,11886],{"class":427,"line":818},[425,11878,2985],{"class":1155},[425,11880,11881],{"class":701}," b ",[425,11883,1204],{"class":1155},[425,11885,3038],{"class":691},[425,11887,2307],{"class":701},[425,11889,11890],{"class":427,"line":831},[425,11891,3400],{"emptyLinePlaceholder":1084},[425,11893,11894],{"class":427,"line":841},[425,11895,11896],{"class":1216},"    \u002F\u002F打印地址\n",[425,11898,11899,11901,11903,11906,11908,11910,11912,11914,11916,11919,11921],{"class":427,"line":852},[425,11900,7529],{"class":701},[425,11902,2190],{"class":1155},[425,11904,11905],{"class":435}," \"局部变量a地址为： \"",[425,11907,2458],{"class":1155},[425,11909,2664],{"class":701},[425,11911,1162],{"class":1155},[425,11913,895],{"class":701},[425,11915,1502],{"class":1155},[425,11917,11918],{"class":701},"a ",[425,11920,2190],{"class":1155},[425,11922,9840],{"class":701},[425,11924,11925,11927,11929,11932,11934,11936,11938,11940,11942,11945,11947],{"class":427,"line":862},[425,11926,7529],{"class":701},[425,11928,2190],{"class":1155},[425,11930,11931],{"class":435}," \"局部变量b地址为： \"",[425,11933,2458],{"class":1155},[425,11935,2664],{"class":701},[425,11937,1162],{"class":1155},[425,11939,895],{"class":701},[425,11941,1502],{"class":1155},[425,11943,11944],{"class":701},"b ",[425,11946,2190],{"class":1155},[425,11948,9840],{"class":701},[425,11950,11951],{"class":427,"line":878},[425,11952,3400],{"emptyLinePlaceholder":1084},[425,11954,11955,11957,11959,11962,11964,11967,11969,11971,11973,11976,11978],{"class":427,"line":914},[425,11956,7529],{"class":701},[425,11958,2190],{"class":1155},[425,11960,11961],{"class":435}," \"全局变量g_a地址为： \"",[425,11963,2458],{"class":1155},[425,11965,11966],{"class":701},"  (",[425,11968,1162],{"class":1155},[425,11970,895],{"class":701},[425,11972,1502],{"class":1155},[425,11974,11975],{"class":701},"g_a ",[425,11977,2190],{"class":1155},[425,11979,9840],{"class":701},[425,11981,11982,11984,11986,11989,11991,11993,11995,11997,11999,12002,12004],{"class":427,"line":943},[425,11983,7529],{"class":701},[425,11985,2190],{"class":1155},[425,11987,11988],{"class":435}," \"全局变量g_b地址为： \"",[425,11990,2458],{"class":1155},[425,11992,11966],{"class":701},[425,11994,1162],{"class":1155},[425,11996,895],{"class":701},[425,11998,1502],{"class":1155},[425,12000,12001],{"class":701},"g_b ",[425,12003,2190],{"class":1155},[425,12005,9840],{"class":701},[425,12007,12008],{"class":427,"line":956},[425,12009,3400],{"emptyLinePlaceholder":1084},[425,12011,12012],{"class":427,"line":964},[425,12013,12014],{"class":1216},"    \u002F\u002F静态变量\n",[425,12016,12017,12020,12022,12025,12027,12029],{"class":427,"line":2733},[425,12018,12019],{"class":1155},"    static",[425,12021,3382],{"class":1155},[425,12023,12024],{"class":701}," s_a ",[425,12026,1204],{"class":1155},[425,12028,3038],{"class":691},[425,12030,2307],{"class":701},[425,12032,12033,12035,12037,12040,12042,12044],{"class":427,"line":2750},[425,12034,12019],{"class":1155},[425,12036,3382],{"class":1155},[425,12038,12039],{"class":701}," s_b ",[425,12041,1204],{"class":1155},[425,12043,3038],{"class":691},[425,12045,2307],{"class":701},[425,12047,12048],{"class":427,"line":2755},[425,12049,3400],{"emptyLinePlaceholder":1084},[425,12051,12052,12054,12056,12059,12061,12063,12065,12067,12069,12072,12074],{"class":427,"line":2760},[425,12053,7529],{"class":701},[425,12055,2190],{"class":1155},[425,12057,12058],{"class":435}," \"静态变量s_a地址为： \"",[425,12060,2458],{"class":1155},[425,12062,2664],{"class":701},[425,12064,1162],{"class":1155},[425,12066,895],{"class":701},[425,12068,1502],{"class":1155},[425,12070,12071],{"class":701},"s_a ",[425,12073,2190],{"class":1155},[425,12075,9840],{"class":701},[425,12077,12078,12080,12082,12085,12087,12089,12091,12093,12095,12098,12100],{"class":427,"line":2765},[425,12079,7529],{"class":701},[425,12081,2190],{"class":1155},[425,12083,12084],{"class":435}," \"静态变量s_b地址为： \"",[425,12086,2458],{"class":1155},[425,12088,2664],{"class":701},[425,12090,1162],{"class":1155},[425,12092,895],{"class":701},[425,12094,1502],{"class":1155},[425,12096,12097],{"class":701},"s_b ",[425,12099,2190],{"class":1155},[425,12101,9840],{"class":701},[425,12103,12104],{"class":427,"line":2779},[425,12105,3400],{"emptyLinePlaceholder":1084},[425,12107,12108,12110,12112,12115,12117,12119,12121,12123,12125,12127,12129],{"class":427,"line":2784},[425,12109,7529],{"class":701},[425,12111,2190],{"class":1155},[425,12113,12114],{"class":435}," \"字符串常量地址为： \"",[425,12116,2458],{"class":1155},[425,12118,2664],{"class":701},[425,12120,1162],{"class":1155},[425,12122,895],{"class":701},[425,12124,1502],{"class":1155},[425,12126,2207],{"class":435},[425,12128,2458],{"class":1155},[425,12130,9840],{"class":701},[425,12132,12133,12135,12137,12139,12141,12143,12145,12147,12149,12152,12154],{"class":427,"line":3577},[425,12134,7529],{"class":701},[425,12136,2190],{"class":1155},[425,12138,12114],{"class":435},[425,12140,2458],{"class":1155},[425,12142,2664],{"class":701},[425,12144,1162],{"class":1155},[425,12146,895],{"class":701},[425,12148,1502],{"class":1155},[425,12150,12151],{"class":435},"\"hello world1\"",[425,12153,2458],{"class":1155},[425,12155,9840],{"class":701},[425,12157,12158],{"class":427,"line":3591},[425,12159,3400],{"emptyLinePlaceholder":1084},[425,12161,12162,12164,12166,12169,12171,12173,12175,12177,12179,12182,12184],{"class":427,"line":3599},[425,12163,7529],{"class":701},[425,12165,2190],{"class":1155},[425,12167,12168],{"class":435}," \"全局常量c_g_a地址为： \"",[425,12170,2458],{"class":1155},[425,12172,2664],{"class":701},[425,12174,1162],{"class":1155},[425,12176,895],{"class":701},[425,12178,1502],{"class":1155},[425,12180,12181],{"class":701},"c_g_a ",[425,12183,2190],{"class":1155},[425,12185,9840],{"class":701},[425,12187,12188,12190,12192,12195,12197,12199,12201,12203,12205,12208,12210],{"class":427,"line":3604},[425,12189,7529],{"class":701},[425,12191,2190],{"class":1155},[425,12193,12194],{"class":435}," \"全局常量c_g_b地址为： \"",[425,12196,2458],{"class":1155},[425,12198,2664],{"class":701},[425,12200,1162],{"class":1155},[425,12202,895],{"class":701},[425,12204,1502],{"class":1155},[425,12206,12207],{"class":701},"c_g_b ",[425,12209,2190],{"class":1155},[425,12211,9840],{"class":701},[425,12213,12214],{"class":427,"line":3610},[425,12215,3400],{"emptyLinePlaceholder":1084},[425,12217,12218,12221,12223,12226,12228,12230],{"class":427,"line":3616},[425,12219,12220],{"class":1155},"    const",[425,12222,3382],{"class":1155},[425,12224,12225],{"class":701}," c_l_a ",[425,12227,1204],{"class":1155},[425,12229,3038],{"class":691},[425,12231,2307],{"class":701},[425,12233,12234,12236,12238,12241,12243,12245],{"class":427,"line":3621},[425,12235,12220],{"class":1155},[425,12237,3382],{"class":1155},[425,12239,12240],{"class":701}," c_l_b ",[425,12242,1204],{"class":1155},[425,12244,3038],{"class":691},[425,12246,2307],{"class":701},[425,12248,12249,12251,12253,12256,12258,12260,12262,12264,12266,12269,12271],{"class":427,"line":8948},[425,12250,7529],{"class":701},[425,12252,2190],{"class":1155},[425,12254,12255],{"class":435}," \"局部常量c_l_a地址为： \"",[425,12257,2458],{"class":1155},[425,12259,2664],{"class":701},[425,12261,1162],{"class":1155},[425,12263,895],{"class":701},[425,12265,1502],{"class":1155},[425,12267,12268],{"class":701},"c_l_a ",[425,12270,2190],{"class":1155},[425,12272,9840],{"class":701},[425,12274,12275,12277,12279,12282,12284,12286,12288,12290,12292,12295,12297],{"class":427,"line":8972},[425,12276,7529],{"class":701},[425,12278,2190],{"class":1155},[425,12280,12281],{"class":435}," \"局部常量c_l_b地址为： \"",[425,12283,2458],{"class":1155},[425,12285,2664],{"class":701},[425,12287,1162],{"class":1155},[425,12289,895],{"class":701},[425,12291,1502],{"class":1155},[425,12293,12294],{"class":701},"c_l_b ",[425,12296,2190],{"class":1155},[425,12298,9840],{"class":701},[425,12300,12301],{"class":427,"line":8977},[425,12302,3400],{"emptyLinePlaceholder":1084},[425,12304,12305,12307,12309,12311],{"class":427,"line":8983},[425,12306,3303],{"class":431},[425,12308,1159],{"class":701},[425,12310,3308],{"class":435},[425,12312,3719],{"class":701},[425,12314,12315],{"class":427,"line":9010},[425,12316,3400],{"emptyLinePlaceholder":1084},[425,12318,12319,12321,12323],{"class":427,"line":9015},[425,12320,5090],{"class":1155},[425,12322,5093],{"class":691},[425,12324,2307],{"class":701},[425,12326,12327],{"class":427,"line":9021},[425,12328,2578],{"class":701},[19,12330,12331],{},"总结：",[447,12333,12334,12337,12340,12343],{},[450,12335,12336],{},"c++中程序运行前分为全局区和代码区",[450,12338,12339],{},"代码区特点是共享和只读",[450,12341,12342],{},"全局区中存放全局变量、静态变量、常量",[450,12344,12345],{},"常量区中存放const修饰的全局常量和字符串常量",[14,12347,12349],{"id":12348},"_512程序运行后","5.1.2程序运行后",[972,12351,12352],{},[450,12353,12354],{},"栈区：",[447,12356,12357,12364],{},[450,12358,12359,12360,12363],{},"由编译器自动分配释放, 存放",[400,12361,12362],{},"函数的参数值,局部变量","等",[450,12365,12366,12367,12370],{},"注意事项：",[400,12368,12369],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[416,12372,12374],{"className":1146,"code":12373,"language":1148,"meta":395,"style":395},"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",[422,12375,12376,12387,12391,12406,12418,12422,12426,12434,12439,12454,12472,12489,12499,12507],{"__ignoreMap":395},[425,12377,12378,12380,12382,12385],{"class":427,"line":428},[425,12379,1162],{"class":1155},[425,12381,7518],{"class":1155},[425,12383,12384],{"class":431}," func",[425,12386,2976],{"class":701},[425,12388,12389],{"class":427,"line":698},[425,12390,2559],{"class":701},[425,12392,12393,12395,12397,12399,12401,12403],{"class":427,"line":710},[425,12394,2985],{"class":1155},[425,12396,11868],{"class":701},[425,12398,1204],{"class":1155},[425,12400,3038],{"class":691},[425,12402,1213],{"class":701},[425,12404,12405],{"class":1216}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[425,12407,12408,12410,12412,12415],{"class":427,"line":721},[425,12409,5090],{"class":1155},[425,12411,11583],{"class":1155},[425,12413,12414],{"class":701},"a;",[425,12416,12417],{"class":1216}," \u002F\u002F放回局部变量的地址\n",[425,12419,12420],{"class":427,"line":735},[425,12421,2578],{"class":701},[425,12423,12424],{"class":427,"line":743},[425,12425,3400],{"emptyLinePlaceholder":1084},[425,12427,12428,12430,12432],{"class":427,"line":751},[425,12429,1162],{"class":1155},[425,12431,2973],{"class":431},[425,12433,11852],{"class":701},[425,12435,12436],{"class":427,"line":759},[425,12437,12438],{"class":1216},"    \u002F\u002F接受func的返回值\n",[425,12440,12441,12443,12445,12448,12450,12452],{"class":427,"line":770},[425,12442,2985],{"class":1155},[425,12444,7518],{"class":1155},[425,12446,12447],{"class":701},"p ",[425,12449,1204],{"class":1155},[425,12451,12384],{"class":431},[425,12453,6636],{"class":701},[425,12455,12456,12458,12460,12462,12464,12466,12469],{"class":427,"line":780},[425,12457,7529],{"class":701},[425,12459,2190],{"class":1155},[425,12461,7518],{"class":1155},[425,12463,12447],{"class":701},[425,12465,2190],{"class":1155},[425,12467,12468],{"class":701}," endl;",[425,12470,12471],{"class":1216}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[425,12473,12474,12476,12478,12480,12482,12484,12486],{"class":427,"line":790},[425,12475,7529],{"class":701},[425,12477,2190],{"class":1155},[425,12479,7518],{"class":1155},[425,12481,12447],{"class":701},[425,12483,2190],{"class":1155},[425,12485,12468],{"class":701},[425,12487,12488],{"class":1216}," \u002F\u002F第二次这个数据不再保留\n",[425,12490,12491,12493,12495,12497],{"class":427,"line":805},[425,12492,3303],{"class":431},[425,12494,1159],{"class":701},[425,12496,3308],{"class":435},[425,12498,3719],{"class":701},[425,12500,12501,12503,12505],{"class":427,"line":818},[425,12502,5090],{"class":1155},[425,12504,5093],{"class":691},[425,12506,2307],{"class":701},[425,12508,12509],{"class":427,"line":831},[425,12510,2578],{"class":701},[19,12512,12513],{},"输出结果：",[19,12515,12516],{},[393,12517],{"alt":12518,"src":12519},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,12521,12522],{},"总结：不要返回局部变量的地址",[972,12524,12525],{"start":698},[450,12526,12527],{},"堆区",[447,12529,12530,12533],{},[450,12531,12532],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[450,12534,12535],{},"在c++中主要利用new在堆区开辟内存",[416,12537,12539],{"className":1146,"code":12538,"language":1148,"meta":395,"style":395},"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",[422,12540,12541,12556,12560,12565,12586,12593,12597,12605,12609,12614,12628,12640],{"__ignoreMap":395},[425,12542,12543,12545,12548,12551,12553],{"class":427,"line":428},[425,12544,1162],{"class":1155},[425,12546,12547],{"class":1155},"  *",[425,12549,12550],{"class":431},"func",[425,12552,3427],{"class":701},[425,12554,12555],{"class":1216},"  \u002F\u002F函数返回指针\n",[425,12557,12558],{"class":427,"line":698},[425,12559,2559],{"class":701},[425,12561,12562],{"class":427,"line":710},[425,12563,12564],{"class":1216},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[425,12566,12567,12569,12571,12573,12575,12578,12580,12582,12584],{"class":427,"line":721},[425,12568,5147],{"class":1155},[425,12570,7518],{"class":1155},[425,12572,19],{"class":701},[425,12574,1204],{"class":1155},[425,12576,12577],{"class":1155}," new",[425,12579,3382],{"class":1155},[425,12581,1159],{"class":701},[425,12583,1594],{"class":691},[425,12585,3719],{"class":701},[425,12587,12588,12590],{"class":427,"line":735},[425,12589,5381],{"class":1155},[425,12591,12592],{"class":701}," p;\n",[425,12594,12595],{"class":427,"line":743},[425,12596,2578],{"class":701},[425,12598,12599,12601,12603],{"class":427,"line":751},[425,12600,1162],{"class":1155},[425,12602,2973],{"class":431},[425,12604,2976],{"class":701},[425,12606,12607],{"class":427,"line":759},[425,12608,2559],{"class":701},[425,12610,12611],{"class":427,"line":770},[425,12612,12613],{"class":1216},"    \u002F\u002F在堆区开辟数据\n",[425,12615,12616,12618,12620,12622,12624,12626],{"class":427,"line":780},[425,12617,2985],{"class":1155},[425,12619,7518],{"class":1155},[425,12621,19],{"class":701},[425,12623,1204],{"class":1155},[425,12625,12550],{"class":431},[425,12627,6636],{"class":701},[425,12629,12630,12632,12634,12636,12638],{"class":427,"line":790},[425,12631,2564],{"class":701},[425,12633,7419],{"class":1155},[425,12635,19],{"class":701},[425,12637,2190],{"class":1155},[425,12639,2212],{"class":701},[425,12641,12642],{"class":427,"line":805},[425,12643,2578],{"class":701},[19,12645,12646],{},"图片展示：",[19,12648,12649],{},[393,12650],{"alt":12518,"src":12651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,12653,12654],{},"堆区内存由程序员管生死！！！",[972,12656,12657],{"start":710},[450,12658,12659],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,12661,12662],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,12664,12665,12666],{},"​语法：",[422,12667,12668],{}," new 数据类型",[19,12670,12671],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[416,12673,12675],{"className":1146,"code":12674,"language":1148,"meta":395,"style":395},"\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",[422,12676,12677,12682,12692,12696,12701,12706,12728,12732,12740,12744,12758,12770,12782,12794,12799,12804,12815,12819,12824,12832,12836,12841,12863,12889,12893,12911,12915,12941,12945,12957,12961,12966,12971,12979,12983,12987,12995,12999,13005,13011],{"__ignoreMap":395},[425,12678,12679],{"class":427,"line":428},[425,12680,12681],{"class":1216},"\u002F\u002F1.new的基本语法\n",[425,12683,12684,12686,12688,12690],{"class":427,"line":698},[425,12685,1162],{"class":1155},[425,12687,7518],{"class":1155},[425,12689,12550],{"class":431},[425,12691,2976],{"class":701},[425,12693,12694],{"class":427,"line":710},[425,12695,2559],{"class":701},[425,12697,12698],{"class":427,"line":721},[425,12699,12700],{"class":1216},"    \u002F\u002F在堆区创建整型数据\n",[425,12702,12703],{"class":427,"line":735},[425,12704,12705],{"class":1216},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[425,12707,12708,12710,12712,12714,12717,12719,12721,12723,12725],{"class":427,"line":743},[425,12709,2985],{"class":1155},[425,12711,7518],{"class":1155},[425,12713,19],{"class":701},[425,12715,12716],{"class":1155},"=new",[425,12718,3382],{"class":1155},[425,12720,1159],{"class":701},[425,12722,1594],{"class":691},[425,12724,6966],{"class":701},[425,12726,12727],{"class":1216},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[425,12729,12730],{"class":427,"line":751},[425,12731,2578],{"class":701},[425,12733,12734,12736,12738],{"class":427,"line":759},[425,12735,6364],{"class":1155},[425,12737,6588],{"class":431},[425,12739,2976],{"class":701},[425,12741,12742],{"class":427,"line":770},[425,12743,2559],{"class":701},[425,12745,12746,12748,12750,12752,12754,12756],{"class":427,"line":780},[425,12747,2985],{"class":1155},[425,12749,7518],{"class":1155},[425,12751,19],{"class":701},[425,12753,1204],{"class":1155},[425,12755,12550],{"class":431},[425,12757,6636],{"class":701},[425,12759,12760,12762,12764,12766,12768],{"class":427,"line":790},[425,12761,2564],{"class":701},[425,12763,7419],{"class":1155},[425,12765,19],{"class":701},[425,12767,2190],{"class":1155},[425,12769,2212],{"class":701},[425,12771,12772,12774,12776,12778,12780],{"class":427,"line":805},[425,12773,2564],{"class":701},[425,12775,7419],{"class":1155},[425,12777,19],{"class":701},[425,12779,2190],{"class":1155},[425,12781,2212],{"class":701},[425,12783,12784,12786,12788,12790,12792],{"class":427,"line":818},[425,12785,2564],{"class":701},[425,12787,7419],{"class":1155},[425,12789,19],{"class":701},[425,12791,2190],{"class":1155},[425,12793,2212],{"class":701},[425,12795,12796],{"class":427,"line":831},[425,12797,12798],{"class":1216},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[425,12800,12801],{"class":427,"line":841},[425,12802,12803],{"class":1216},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[425,12805,12806,12809,12812],{"class":427,"line":852},[425,12807,12808],{"class":1155},"    delete",[425,12810,12811],{"class":701}," p;",[425,12813,12814],{"class":1216},"\u002F\u002F删除这块地址\n",[425,12816,12817],{"class":427,"line":862},[425,12818,2578],{"class":701},[425,12820,12821],{"class":427,"line":878},[425,12822,12823],{"class":1216},"\u002F\u002F2.在堆区利用new开辟数组\n",[425,12825,12826,12828,12830],{"class":427,"line":914},[425,12827,6364],{"class":1155},[425,12829,6657],{"class":431},[425,12831,2976],{"class":701},[425,12833,12834],{"class":427,"line":943},[425,12835,2559],{"class":701},[425,12837,12838],{"class":427,"line":956},[425,12839,12840],{"class":1216},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[425,12842,12843,12845,12847,12849,12851,12853,12855,12857,12860],{"class":427,"line":964},[425,12844,2985],{"class":1155},[425,12846,7518],{"class":1155},[425,12848,4880],{"class":701},[425,12850,12716],{"class":1155},[425,12852,3382],{"class":1155},[425,12854,2037],{"class":701},[425,12856,1594],{"class":691},[425,12858,12859],{"class":701},"];",[425,12861,12862],{"class":1216},"\u002F\u002F10代表数组有10个元素\n",[425,12864,12865,12867,12869,12871,12873,12875,12877,12879,12881,12883,12885,12887],{"class":427,"line":2733},[425,12866,4201],{"class":1155},[425,12868,2664],{"class":701},[425,12870,1162],{"class":1155},[425,12872,4032],{"class":701},[425,12874,1204],{"class":1155},[425,12876,1341],{"class":691},[425,12878,4039],{"class":701},[425,12880,2057],{"class":1155},[425,12882,1594],{"class":691},[425,12884,4039],{"class":701},[425,12886,3292],{"class":1155},[425,12888,1165],{"class":701},[425,12890,12891],{"class":427,"line":2750},[425,12892,3030],{"class":701},[425,12894,12895,12898,12900,12902,12904,12906,12908],{"class":427,"line":2755},[425,12896,12897],{"class":701},"        arr[i]",[425,12899,1204],{"class":1155},[425,12901,1589],{"class":701},[425,12903,1629],{"class":1155},[425,12905,1460],{"class":691},[425,12907,1213],{"class":701},[425,12909,12910],{"class":1216},"\u002F\u002F给10个元素赋值100～109\n",[425,12912,12913],{"class":427,"line":2760},[425,12914,3187],{"class":701},[425,12916,12917,12919,12921,12923,12925,12927,12929,12931,12933,12935,12937,12939],{"class":427,"line":2765},[425,12918,4201],{"class":1155},[425,12920,2664],{"class":701},[425,12922,1162],{"class":1155},[425,12924,4032],{"class":701},[425,12926,1204],{"class":1155},[425,12928,1341],{"class":691},[425,12930,4039],{"class":701},[425,12932,2057],{"class":1155},[425,12934,1594],{"class":691},[425,12936,4039],{"class":701},[425,12938,3292],{"class":1155},[425,12940,1165],{"class":701},[425,12942,12943],{"class":427,"line":2779},[425,12944,3030],{"class":701},[425,12946,12947,12949,12951,12953,12955],{"class":427,"line":2784},[425,12948,4451],{"class":701},[425,12950,2190],{"class":1155},[425,12952,5354],{"class":701},[425,12954,2190],{"class":1155},[425,12956,2212],{"class":701},[425,12958,12959],{"class":427,"line":3577},[425,12960,3187],{"class":701},[425,12962,12963],{"class":427,"line":3591},[425,12964,12965],{"class":1216},"    \u002F\u002F释放堆区数组\n",[425,12967,12968],{"class":427,"line":3599},[425,12969,12970],{"class":1216},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[425,12972,12973,12976],{"class":427,"line":3604},[425,12974,12975],{"class":1155},"    delete[]",[425,12977,12978],{"class":701}," arr;\n",[425,12980,12981],{"class":427,"line":3610},[425,12982,2578],{"class":701},[425,12984,12985],{"class":427,"line":3616},[425,12986,3400],{"emptyLinePlaceholder":1084},[425,12988,12989,12991,12993],{"class":427,"line":3621},[425,12990,1162],{"class":1155},[425,12992,2973],{"class":431},[425,12994,2976],{"class":701},[425,12996,12997],{"class":427,"line":8948},[425,12998,2559],{"class":701},[425,13000,13001,13003],{"class":427,"line":8972},[425,13002,6633],{"class":431},[425,13004,6636],{"class":701},[425,13006,13007,13009],{"class":427,"line":8977},[425,13008,6702],{"class":431},[425,13010,6636],{"class":701},[425,13012,13013],{"class":427,"line":8983},[425,13014,2578],{"class":701},[1074,13016,13017],{},"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":395,"searchDepth":698,"depth":698,"links":13019},[13020],{"id":11688,"depth":698,"text":11689,"children":13021},[13022,13023],{"id":11720,"depth":710,"text":11721},{"id":12348,"depth":710,"text":12349},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11680,"description":395},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":13030,"title":13031,"body":13032,"description":395,"extension":1082,"meta":14513,"navigation":1084,"path":14514,"seo":14515,"stem":14516,"__hash__":14517},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":13033,"toc":14505},[13034,13037,13041,13044,13047,13216,13220,13225,13242,13247,13399,13403,13406,13409,13803,13807,13810,13815,13818,14130,14134,14140,14300,14302,14310,14314,14317,14324,14502],[10,13035,13031],{"id":13036},"_6引用",[1099,13038,13040],{"id":13039},"_61引用基本用法","6.1引用基本用法",[19,13042,13043],{},"引用的本质：给变量起别名",[19,13045,13046],{},"语法：数据类型 &别名=原名",[416,13048,13050],{"className":1146,"code":13049,"language":1148,"meta":395,"style":395},"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",[422,13051,13052,13060,13064,13076,13088,13092,13111,13130,13134,13145,13149,13168,13186,13190,13200,13204,13212],{"__ignoreMap":395},[425,13053,13054,13056,13058],{"class":427,"line":428},[425,13055,1162],{"class":1155},[425,13057,2973],{"class":431},[425,13059,11852],{"class":701},[425,13061,13062],{"class":427,"line":698},[425,13063,3400],{"emptyLinePlaceholder":1084},[425,13065,13066,13068,13070,13072,13074],{"class":427,"line":710},[425,13067,2985],{"class":1155},[425,13069,11868],{"class":701},[425,13071,1204],{"class":1155},[425,13073,3038],{"class":691},[425,13075,2307],{"class":701},[425,13077,13078,13080,13082,13084,13086],{"class":427,"line":721},[425,13079,2985],{"class":1155},[425,13081,11583],{"class":1155},[425,13083,11944],{"class":701},[425,13085,1204],{"class":1155},[425,13087,2446],{"class":701},[425,13089,13090],{"class":427,"line":735},[425,13091,3400],{"emptyLinePlaceholder":1084},[425,13093,13094,13096,13098,13101,13103,13105,13107,13109],{"class":427,"line":743},[425,13095,7529],{"class":701},[425,13097,2190],{"class":1155},[425,13099,13100],{"class":435}," \"a = \"",[425,13102,2458],{"class":1155},[425,13104,11868],{"class":701},[425,13106,2190],{"class":1155},[425,13108,12468],{"class":701},[425,13110,8268],{"class":1216},[425,13112,13113,13115,13117,13120,13122,13124,13126,13128],{"class":427,"line":751},[425,13114,7529],{"class":701},[425,13116,2190],{"class":1155},[425,13118,13119],{"class":435}," \"b = \"",[425,13121,2458],{"class":1155},[425,13123,11881],{"class":701},[425,13125,2190],{"class":1155},[425,13127,12468],{"class":701},[425,13129,8268],{"class":1216},[425,13131,13132],{"class":427,"line":759},[425,13133,3400],{"emptyLinePlaceholder":1084},[425,13135,13136,13139,13141,13143],{"class":427,"line":770},[425,13137,13138],{"class":701},"    b ",[425,13140,1204],{"class":1155},[425,13142,6754],{"class":691},[425,13144,2307],{"class":701},[425,13146,13147],{"class":427,"line":780},[425,13148,3400],{"emptyLinePlaceholder":1084},[425,13150,13151,13153,13155,13157,13159,13161,13163,13165],{"class":427,"line":790},[425,13152,7529],{"class":701},[425,13154,2190],{"class":1155},[425,13156,13100],{"class":435},[425,13158,2458],{"class":1155},[425,13160,11868],{"class":701},[425,13162,2190],{"class":1155},[425,13164,12468],{"class":701},[425,13166,13167],{"class":1216},"\u002F\u002F100\n",[425,13169,13170,13172,13174,13176,13178,13180,13182,13184],{"class":427,"line":805},[425,13171,7529],{"class":701},[425,13173,2190],{"class":1155},[425,13175,13119],{"class":435},[425,13177,2458],{"class":1155},[425,13179,11881],{"class":701},[425,13181,2190],{"class":1155},[425,13183,12468],{"class":701},[425,13185,13167],{"class":1216},[425,13187,13188],{"class":427,"line":818},[425,13189,3400],{"emptyLinePlaceholder":1084},[425,13191,13192,13194,13196,13198],{"class":427,"line":831},[425,13193,3303],{"class":431},[425,13195,1159],{"class":701},[425,13197,3308],{"class":435},[425,13199,3719],{"class":701},[425,13201,13202],{"class":427,"line":841},[425,13203,3400],{"emptyLinePlaceholder":1084},[425,13205,13206,13208,13210],{"class":427,"line":852},[425,13207,5090],{"class":1155},[425,13209,5093],{"class":691},[425,13211,2307],{"class":701},[425,13213,13214],{"class":427,"line":862},[425,13215,2578],{"class":701},[1099,13217,13219],{"id":13218},"_62引用的注意事项","6.2引用的注意事项",[972,13221,13222],{},[450,13223,13224],{},"引用必须要初始化",[416,13226,13228],{"className":1146,"code":13227,"language":1148,"meta":395,"style":395},"int &b;\u002F\u002F非常错误！\n",[422,13229,13230],{"__ignoreMap":395},[425,13231,13232,13234,13236,13239],{"class":427,"line":428},[425,13233,1162],{"class":1155},[425,13235,11583],{"class":1155},[425,13237,13238],{"class":701},"b;",[425,13240,13241],{"class":1216},"\u002F\u002F非常错误！\n",[972,13243,13244],{"start":698},[450,13245,13246],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[416,13248,13250],{"className":1146,"code":13249,"language":1148,"meta":395,"style":395},"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",[422,13251,13252,13260,13272,13284,13292,13308,13321,13339,13357,13377,13387,13395],{"__ignoreMap":395},[425,13253,13254,13256,13258],{"class":427,"line":428},[425,13255,1162],{"class":1155},[425,13257,2973],{"class":431},[425,13259,11852],{"class":701},[425,13261,13262,13264,13266,13268,13270],{"class":427,"line":698},[425,13263,2985],{"class":1155},[425,13265,11868],{"class":701},[425,13267,1204],{"class":1155},[425,13269,3038],{"class":691},[425,13271,2307],{"class":701},[425,13273,13274,13276,13278,13280,13282],{"class":427,"line":710},[425,13275,2985],{"class":1155},[425,13277,11881],{"class":701},[425,13279,1204],{"class":1155},[425,13281,9950],{"class":691},[425,13283,2307],{"class":701},[425,13285,13286,13289],{"class":427,"line":721},[425,13287,13288],{"class":1216},"    \u002F\u002Fint &c;",[425,13290,13291],{"class":1216}," \u002F\u002F错误，引用必须初始化\n",[425,13293,13294,13296,13298,13300,13302,13305],{"class":427,"line":735},[425,13295,2985],{"class":1155},[425,13297,11583],{"class":1155},[425,13299,3946],{"class":701},[425,13301,1204],{"class":1155},[425,13303,13304],{"class":701}," a;",[425,13306,13307],{"class":1216}," \u002F\u002F一旦初始化后，就不可以更改\n",[425,13309,13310,13313,13315,13318],{"class":427,"line":743},[425,13311,13312],{"class":701},"    c ",[425,13314,1204],{"class":1155},[425,13316,13317],{"class":701}," b;",[425,13319,13320],{"class":1216}," \u002F\u002F这是赋值操作，不是更改引用\n",[425,13322,13323,13325,13327,13329,13331,13333,13335,13337],{"class":427,"line":751},[425,13324,7529],{"class":701},[425,13326,2190],{"class":1155},[425,13328,13100],{"class":435},[425,13330,2458],{"class":1155},[425,13332,11868],{"class":701},[425,13334,2190],{"class":1155},[425,13336,12468],{"class":701},[425,13338,8253],{"class":1216},[425,13340,13341,13343,13345,13347,13349,13351,13353,13355],{"class":427,"line":759},[425,13342,7529],{"class":701},[425,13344,2190],{"class":1155},[425,13346,13119],{"class":435},[425,13348,2458],{"class":1155},[425,13350,11881],{"class":701},[425,13352,2190],{"class":1155},[425,13354,12468],{"class":701},[425,13356,8253],{"class":1216},[425,13358,13359,13361,13363,13366,13368,13371,13373,13375],{"class":427,"line":770},[425,13360,7529],{"class":701},[425,13362,2190],{"class":1155},[425,13364,13365],{"class":435}," \"c = \"",[425,13367,2458],{"class":1155},[425,13369,13370],{"class":701}," c ",[425,13372,2190],{"class":1155},[425,13374,12468],{"class":701},[425,13376,8253],{"class":1216},[425,13378,13379,13381,13383,13385],{"class":427,"line":780},[425,13380,3303],{"class":431},[425,13382,1159],{"class":701},[425,13384,3308],{"class":435},[425,13386,3719],{"class":701},[425,13388,13389,13391,13393],{"class":427,"line":790},[425,13390,5090],{"class":1155},[425,13392,5093],{"class":691},[425,13394,2307],{"class":701},[425,13396,13397],{"class":427,"line":805},[425,13398,2578],{"class":701},[1099,13400,13402],{"id":13401},"_63引用做函数参数","6.3引用做函数参数",[19,13404,13405],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,13407,13408],{},"优点：可以简化指针修改实参",[416,13410,13412],{"className":1146,"code":13411,"language":1148,"meta":395,"style":395},"\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",[422,13413,13414,13419,13442,13453,13463,13472,13476,13480,13485,13507,13519,13531,13541,13545,13549,13554,13576,13586,13594,13602,13606,13610,13618,13622,13634,13646,13650,13661,13687,13691,13711,13735,13739,13749,13773,13777,13787,13791,13799],{"__ignoreMap":395},[425,13415,13416],{"class":427,"line":428},[425,13417,13418],{"class":1216},"\u002F\u002F1. 值传递\n",[425,13420,13421,13423,13426,13428,13430,13432,13435,13437,13439],{"class":427,"line":698},[425,13422,6364],{"class":1155},[425,13424,13425],{"class":431}," mySwap01",[425,13427,1159],{"class":701},[425,13429,1162],{"class":1155},[425,13431,2412],{"class":6216},[425,13433,13434],{"class":701},", ",[425,13436,1162],{"class":1155},[425,13438,3833],{"class":6216},[425,13440,13441],{"class":701},") {\n",[425,13443,13444,13446,13449,13451],{"class":427,"line":710},[425,13445,2985],{"class":1155},[425,13447,13448],{"class":701}," temp ",[425,13450,1204],{"class":1155},[425,13452,2446],{"class":701},[425,13454,13455,13458,13460],{"class":427,"line":721},[425,13456,13457],{"class":701},"    a ",[425,13459,1204],{"class":1155},[425,13461,13462],{"class":701}," b;\n",[425,13464,13465,13467,13469],{"class":427,"line":735},[425,13466,13138],{"class":701},[425,13468,1204],{"class":1155},[425,13470,13471],{"class":701}," temp;\n",[425,13473,13474],{"class":427,"line":743},[425,13475,2578],{"class":701},[425,13477,13478],{"class":427,"line":751},[425,13479,3400],{"emptyLinePlaceholder":1084},[425,13481,13482],{"class":427,"line":759},[425,13483,13484],{"class":1216},"\u002F\u002F2. 地址传递\n",[425,13486,13487,13489,13492,13494,13497,13499,13501,13503,13505],{"class":427,"line":770},[425,13488,6364],{"class":1155},[425,13490,13491],{"class":431}," mySwap02",[425,13493,1159],{"class":701},[425,13495,13496],{"class":1155},"int*",[425,13498,2412],{"class":6216},[425,13500,13434],{"class":701},[425,13502,13496],{"class":1155},[425,13504,3833],{"class":6216},[425,13506,13441],{"class":701},[425,13508,13509,13511,13513,13515,13517],{"class":427,"line":780},[425,13510,2985],{"class":1155},[425,13512,13448],{"class":701},[425,13514,1204],{"class":1155},[425,13516,7518],{"class":1155},[425,13518,7197],{"class":701},[425,13520,13521,13523,13525,13527,13529],{"class":427,"line":790},[425,13522,7403],{"class":1155},[425,13524,11918],{"class":701},[425,13526,1204],{"class":1155},[425,13528,7518],{"class":1155},[425,13530,7069],{"class":701},[425,13532,13533,13535,13537,13539],{"class":427,"line":805},[425,13534,7403],{"class":1155},[425,13536,11944],{"class":701},[425,13538,1204],{"class":1155},[425,13540,13471],{"class":701},[425,13542,13543],{"class":427,"line":818},[425,13544,2578],{"class":701},[425,13546,13547],{"class":427,"line":831},[425,13548,3400],{"emptyLinePlaceholder":1084},[425,13550,13551],{"class":427,"line":841},[425,13552,13553],{"class":1216},"\u002F\u002F3. 引用传递\n",[425,13555,13556,13558,13561,13563,13566,13568,13570,13572,13574],{"class":427,"line":852},[425,13557,6364],{"class":1155},[425,13559,13560],{"class":431}," mySwap03",[425,13562,1159],{"class":701},[425,13564,13565],{"class":1155},"int&",[425,13567,2412],{"class":6216},[425,13569,13434],{"class":701},[425,13571,13565],{"class":1155},[425,13573,3833],{"class":6216},[425,13575,13441],{"class":701},[425,13577,13578,13580,13582,13584],{"class":427,"line":862},[425,13579,2985],{"class":1155},[425,13581,13448],{"class":701},[425,13583,1204],{"class":1155},[425,13585,2446],{"class":701},[425,13587,13588,13590,13592],{"class":427,"line":878},[425,13589,13457],{"class":701},[425,13591,1204],{"class":1155},[425,13593,13462],{"class":701},[425,13595,13596,13598,13600],{"class":427,"line":914},[425,13597,13138],{"class":701},[425,13599,1204],{"class":1155},[425,13601,13471],{"class":701},[425,13603,13604],{"class":427,"line":943},[425,13605,2578],{"class":701},[425,13607,13608],{"class":427,"line":956},[425,13609,3400],{"emptyLinePlaceholder":1084},[425,13611,13612,13614,13616],{"class":427,"line":964},[425,13613,1162],{"class":1155},[425,13615,2973],{"class":431},[425,13617,11852],{"class":701},[425,13619,13620],{"class":427,"line":2733},[425,13621,3400],{"emptyLinePlaceholder":1084},[425,13623,13624,13626,13628,13630,13632],{"class":427,"line":2750},[425,13625,2985],{"class":1155},[425,13627,11868],{"class":701},[425,13629,1204],{"class":1155},[425,13631,3038],{"class":691},[425,13633,2307],{"class":701},[425,13635,13636,13638,13640,13642,13644],{"class":427,"line":2755},[425,13637,2985],{"class":1155},[425,13639,11881],{"class":701},[425,13641,1204],{"class":1155},[425,13643,9950],{"class":691},[425,13645,2307],{"class":701},[425,13647,13648],{"class":427,"line":2760},[425,13649,3400],{"emptyLinePlaceholder":1084},[425,13651,13652,13655,13658],{"class":427,"line":2765},[425,13653,13654],{"class":431},"    mySwap01",[425,13656,13657],{"class":701},"(a, b);",[425,13659,13660],{"class":1216},"\u002F\u002F值传递，形参不会修饰实参\n",[425,13662,13663,13665,13667,13670,13672,13674,13676,13679,13681,13683,13685],{"class":427,"line":2779},[425,13664,7529],{"class":701},[425,13666,2190],{"class":1155},[425,13668,13669],{"class":435}," \"a:\"",[425,13671,2458],{"class":1155},[425,13673,11868],{"class":701},[425,13675,2190],{"class":1155},[425,13677,13678],{"class":435}," \" b:\"",[425,13680,2458],{"class":1155},[425,13682,11881],{"class":701},[425,13684,2190],{"class":1155},[425,13686,9840],{"class":701},[425,13688,13689],{"class":427,"line":2784},[425,13690,3400],{"emptyLinePlaceholder":1084},[425,13692,13693,13696,13698,13700,13703,13705,13708],{"class":427,"line":3577},[425,13694,13695],{"class":431},"    mySwap02",[425,13697,1159],{"class":701},[425,13699,1502],{"class":1155},[425,13701,13702],{"class":701},"a, ",[425,13704,1502],{"class":1155},[425,13706,13707],{"class":701},"b);",[425,13709,13710],{"class":1216},"\u002F\u002F地址传递，形参会修饰实参\n",[425,13712,13713,13715,13717,13719,13721,13723,13725,13727,13729,13731,13733],{"class":427,"line":3591},[425,13714,7529],{"class":701},[425,13716,2190],{"class":1155},[425,13718,13669],{"class":435},[425,13720,2458],{"class":1155},[425,13722,11868],{"class":701},[425,13724,2190],{"class":1155},[425,13726,13678],{"class":435},[425,13728,2458],{"class":1155},[425,13730,11881],{"class":701},[425,13732,2190],{"class":1155},[425,13734,9840],{"class":701},[425,13736,13737],{"class":427,"line":3599},[425,13738,3400],{"emptyLinePlaceholder":1084},[425,13740,13741,13744,13746],{"class":427,"line":3604},[425,13742,13743],{"class":431},"    mySwap03",[425,13745,13657],{"class":701},[425,13747,13748],{"class":1216},"\u002F\u002F引用传递，形参会修饰实参\n",[425,13750,13751,13753,13755,13757,13759,13761,13763,13765,13767,13769,13771],{"class":427,"line":3610},[425,13752,7529],{"class":701},[425,13754,2190],{"class":1155},[425,13756,13669],{"class":435},[425,13758,2458],{"class":1155},[425,13760,11868],{"class":701},[425,13762,2190],{"class":1155},[425,13764,13678],{"class":435},[425,13766,2458],{"class":1155},[425,13768,11881],{"class":701},[425,13770,2190],{"class":1155},[425,13772,9840],{"class":701},[425,13774,13775],{"class":427,"line":3616},[425,13776,3400],{"emptyLinePlaceholder":1084},[425,13778,13779,13781,13783,13785],{"class":427,"line":3621},[425,13780,3303],{"class":431},[425,13782,1159],{"class":701},[425,13784,3308],{"class":435},[425,13786,3719],{"class":701},[425,13788,13789],{"class":427,"line":8948},[425,13790,3400],{"emptyLinePlaceholder":1084},[425,13792,13793,13795,13797],{"class":427,"line":8972},[425,13794,5090],{"class":1155},[425,13796,5093],{"class":691},[425,13798,2307],{"class":701},[425,13800,13801],{"class":427,"line":8977},[425,13802,2578],{"class":701},[1099,13804,13806],{"id":13805},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,13808,13809],{},"作用：引用是可以作为函数的返回值存在的",[19,13811,970,13812],{},[400,13813,13814],{},"不要返回局部变量引用",[19,13816,13817],{},"用法：函数调用作为左值",[416,13819,13821],{"className":10940,"code":13820,"language":10942,"meta":395,"style":395},"\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",[422,13822,13823,13828,13836,13851,13857,13861,13865,13870,13878,13895,13901,13905,13909,13917,13921,13926,13940,13960,13979,13983,13988,14001,14021,14039,14043,14059,14063,14082,14100,14104,14114,14118,14126],{"__ignoreMap":395},[425,13824,13825],{"class":427,"line":428},[425,13826,13827],{"class":1216},"\u002F\u002F返回局部变量引用\n",[425,13829,13830,13832,13834],{"class":427,"line":698},[425,13831,13565],{"class":1155},[425,13833,6588],{"class":431},[425,13835,11852],{"class":701},[425,13837,13838,13840,13842,13844,13846,13848],{"class":427,"line":710},[425,13839,2985],{"class":1155},[425,13841,11868],{"class":701},[425,13843,1204],{"class":1155},[425,13845,3038],{"class":691},[425,13847,1213],{"class":701},[425,13849,13850],{"class":1216}," \u002F\u002F局部变量\n",[425,13852,13853,13855],{"class":427,"line":721},[425,13854,5090],{"class":1155},[425,13856,2446],{"class":701},[425,13858,13859],{"class":427,"line":735},[425,13860,2578],{"class":701},[425,13862,13863],{"class":427,"line":743},[425,13864,3400],{"emptyLinePlaceholder":1084},[425,13866,13867],{"class":427,"line":751},[425,13868,13869],{"class":1216},"\u002F\u002F返回静态变量引用\n",[425,13871,13872,13874,13876],{"class":427,"line":759},[425,13873,13565],{"class":1155},[425,13875,6657],{"class":431},[425,13877,11852],{"class":701},[425,13879,13880,13882,13884,13886,13888,13890,13892],{"class":427,"line":770},[425,13881,12019],{"class":1155},[425,13883,3382],{"class":1155},[425,13885,11868],{"class":701},[425,13887,1204],{"class":1155},[425,13889,9950],{"class":691},[425,13891,1213],{"class":701},[425,13893,13894],{"class":1216},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[425,13896,13897,13899],{"class":427,"line":780},[425,13898,5090],{"class":1155},[425,13900,2446],{"class":701},[425,13902,13903],{"class":427,"line":790},[425,13904,2578],{"class":701},[425,13906,13907],{"class":427,"line":805},[425,13908,3400],{"emptyLinePlaceholder":1084},[425,13910,13911,13913,13915],{"class":427,"line":818},[425,13912,1162],{"class":1155},[425,13914,2973],{"class":431},[425,13916,11852],{"class":701},[425,13918,13919],{"class":427,"line":831},[425,13920,3400],{"emptyLinePlaceholder":1084},[425,13922,13923],{"class":427,"line":841},[425,13924,13925],{"class":1216},"    \u002F\u002F不能返回局部变量的引用\n",[425,13927,13928,13931,13934,13936,13938],{"class":427,"line":852},[425,13929,13930],{"class":1155},"    int&",[425,13932,13933],{"class":701}," ref ",[425,13935,1204],{"class":1155},[425,13937,6588],{"class":431},[425,13939,6636],{"class":701},[425,13941,13942,13944,13946,13949,13951,13953,13955,13957],{"class":427,"line":862},[425,13943,7529],{"class":701},[425,13945,2190],{"class":1155},[425,13947,13948],{"class":435}," \"ref = \"",[425,13950,2458],{"class":1155},[425,13952,13933],{"class":701},[425,13954,2190],{"class":1155},[425,13956,12468],{"class":701},[425,13958,13959],{"class":1216},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[425,13961,13962,13964,13966,13968,13970,13972,13974,13976],{"class":427,"line":878},[425,13963,7529],{"class":701},[425,13965,2190],{"class":1155},[425,13967,13948],{"class":435},[425,13969,2458],{"class":1155},[425,13971,13933],{"class":701},[425,13973,2190],{"class":1155},[425,13975,12468],{"class":701},[425,13977,13978],{"class":1216},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[425,13980,13981],{"class":427,"line":914},[425,13982,3400],{"emptyLinePlaceholder":1084},[425,13984,13985],{"class":427,"line":943},[425,13986,13987],{"class":1216},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[425,13989,13990,13992,13995,13997,13999],{"class":427,"line":956},[425,13991,13930],{"class":1155},[425,13993,13994],{"class":701}," ref2 ",[425,13996,1204],{"class":1155},[425,13998,6657],{"class":431},[425,14000,6636],{"class":701},[425,14002,14003,14005,14007,14010,14012,14014,14016,14018],{"class":427,"line":964},[425,14004,7529],{"class":701},[425,14006,2190],{"class":1155},[425,14008,14009],{"class":435}," \"ref2 = \"",[425,14011,2458],{"class":1155},[425,14013,13994],{"class":701},[425,14015,2190],{"class":1155},[425,14017,12468],{"class":701},[425,14019,14020],{"class":1216}," \u002F\u002F20\n",[425,14022,14023,14025,14027,14029,14031,14033,14035,14037],{"class":427,"line":2733},[425,14024,7529],{"class":701},[425,14026,2190],{"class":1155},[425,14028,14009],{"class":435},[425,14030,2458],{"class":1155},[425,14032,13994],{"class":701},[425,14034,2190],{"class":1155},[425,14036,12468],{"class":701},[425,14038,14020],{"class":1216},[425,14040,14041],{"class":427,"line":2750},[425,14042,3400],{"emptyLinePlaceholder":1084},[425,14044,14045,14047,14050,14052,14054,14056],{"class":427,"line":2755},[425,14046,6702],{"class":431},[425,14048,14049],{"class":701},"() ",[425,14051,1204],{"class":1155},[425,14053,3999],{"class":691},[425,14055,1213],{"class":701},[425,14057,14058],{"class":1216},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[425,14060,14061],{"class":427,"line":2760},[425,14062,3400],{"emptyLinePlaceholder":1084},[425,14064,14065,14067,14069,14071,14073,14075,14077,14079],{"class":427,"line":2765},[425,14066,7529],{"class":701},[425,14068,2190],{"class":1155},[425,14070,14009],{"class":435},[425,14072,2458],{"class":1155},[425,14074,13994],{"class":701},[425,14076,2190],{"class":1155},[425,14078,12468],{"class":701},[425,14080,14081],{"class":1216}," \u002F\u002F1000\n",[425,14083,14084,14086,14088,14090,14092,14094,14096,14098],{"class":427,"line":2779},[425,14085,7529],{"class":701},[425,14087,2190],{"class":1155},[425,14089,14009],{"class":435},[425,14091,2458],{"class":1155},[425,14093,13994],{"class":701},[425,14095,2190],{"class":1155},[425,14097,12468],{"class":701},[425,14099,14081],{"class":1216},[425,14101,14102],{"class":427,"line":2784},[425,14103,3400],{"emptyLinePlaceholder":1084},[425,14105,14106,14108,14110,14112],{"class":427,"line":3577},[425,14107,3303],{"class":431},[425,14109,1159],{"class":701},[425,14111,3308],{"class":435},[425,14113,3719],{"class":701},[425,14115,14116],{"class":427,"line":3591},[425,14117,3400],{"emptyLinePlaceholder":1084},[425,14119,14120,14122,14124],{"class":427,"line":3599},[425,14121,5090],{"class":1155},[425,14123,5093],{"class":691},[425,14125,2307],{"class":701},[425,14127,14128],{"class":427,"line":3604},[425,14129,2578],{"class":701},[1099,14131,14133],{"id":14132},"_65引用的本质","6.5引用的本质",[19,14135,14136,14137],{},"本质：",[400,14138,14139],{},"引用的本质在c++内部实现是一个指针常量.",[416,14141,14143],{"className":1146,"code":14142,"language":1148,"meta":395,"style":395},"\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",[422,14144,14145,14150,14166,14180,14184,14193,14205,14210,14215,14226,14239,14243,14259,14276,14280,14288,14296],{"__ignoreMap":395},[425,14146,14147],{"class":427,"line":428},[425,14148,14149],{"class":1216},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[425,14151,14152,14154,14156,14158,14160,14163],{"class":427,"line":698},[425,14153,6364],{"class":1155},[425,14155,12384],{"class":431},[425,14157,1159],{"class":701},[425,14159,13565],{"class":1155},[425,14161,14162],{"class":6216}," ref",[425,14164,14165],{"class":701},"){\n",[425,14167,14168,14171,14173,14175,14177],{"class":427,"line":710},[425,14169,14170],{"class":701},"    ref ",[425,14172,1204],{"class":1155},[425,14174,6754],{"class":691},[425,14176,1213],{"class":701},[425,14178,14179],{"class":1216}," \u002F\u002F ref是引用，转换为*ref = 100\n",[425,14181,14182],{"class":427,"line":721},[425,14183,2578],{"class":701},[425,14185,14186,14188,14190],{"class":427,"line":735},[425,14187,1162],{"class":1155},[425,14189,2973],{"class":431},[425,14191,14192],{"class":701},"(){\n",[425,14194,14195,14197,14199,14201,14203],{"class":427,"line":743},[425,14196,2985],{"class":1155},[425,14198,11868],{"class":701},[425,14200,1204],{"class":1155},[425,14202,3038],{"class":691},[425,14204,2307],{"class":701},[425,14206,14207],{"class":427,"line":751},[425,14208,14209],{"class":701},"    \n",[425,14211,14212],{"class":427,"line":759},[425,14213,14214],{"class":1216},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[425,14216,14217,14219,14221,14223],{"class":427,"line":770},[425,14218,13930],{"class":1155},[425,14220,13933],{"class":701},[425,14222,1204],{"class":1155},[425,14224,14225],{"class":701}," a; \n",[425,14227,14228,14230,14232,14234,14236],{"class":427,"line":780},[425,14229,14170],{"class":701},[425,14231,1204],{"class":1155},[425,14233,9950],{"class":691},[425,14235,1213],{"class":701},[425,14237,14238],{"class":1216}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[425,14240,14241],{"class":427,"line":790},[425,14242,14209],{"class":701},[425,14244,14245,14247,14249,14251,14253,14255,14257],{"class":427,"line":805},[425,14246,7529],{"class":701},[425,14248,2190],{"class":1155},[425,14250,13669],{"class":435},[425,14252,2458],{"class":1155},[425,14254,11868],{"class":701},[425,14256,2190],{"class":1155},[425,14258,9840],{"class":701},[425,14260,14261,14263,14265,14268,14270,14272,14274],{"class":427,"line":818},[425,14262,7529],{"class":701},[425,14264,2190],{"class":1155},[425,14266,14267],{"class":435}," \"ref:\"",[425,14269,2458],{"class":1155},[425,14271,13933],{"class":701},[425,14273,2190],{"class":1155},[425,14275,9840],{"class":701},[425,14277,14278],{"class":427,"line":831},[425,14279,14209],{"class":701},[425,14281,14282,14285],{"class":427,"line":841},[425,14283,14284],{"class":431},"    func",[425,14286,14287],{"class":701},"(a);\n",[425,14289,14290,14292,14294],{"class":427,"line":852},[425,14291,5090],{"class":1155},[425,14293,5093],{"class":691},[425,14295,2307],{"class":701},[425,14297,14298],{"class":427,"line":862},[425,14299,2578],{"class":701},[19,14301,12331],{},[972,14303,14304,14307],{},[450,14305,14306],{},"引用的本质，就是一个指针常量",[450,14308,14309],{},"引用一旦初始化，就不可以发生改变",[1099,14311,14313],{"id":14312},"_66常量引用","6.6常量引用",[19,14315,14316],{},"作用：常量引用主要用来修饰形参",[19,14318,14319,14320,14323],{},"在函数形参列表中，可以加",[400,14321,14322],{},"const修饰形参","，防止形参改变实参",[416,14325,14327],{"className":1146,"code":14326,"language":1148,"meta":395,"style":395},"\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",[422,14328,14329,14334,14339,14358,14363,14376,14380,14384,14392,14396,14401,14406,14420,14424,14432,14444,14448,14453,14465,14472,14476,14486,14490,14498],{"__ignoreMap":395},[425,14330,14331],{"class":427,"line":428},[425,14332,14333],{"class":1216},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[425,14335,14336],{"class":427,"line":698},[425,14337,14338],{"class":1216},"\u002F\u002F加上const就不能修改实参的\n",[425,14340,14341,14343,14346,14348,14350,14353,14356],{"class":427,"line":710},[425,14342,6364],{"class":1155},[425,14344,14345],{"class":431}," showValue",[425,14347,1159],{"class":701},[425,14349,7792],{"class":1155},[425,14351,14352],{"class":1155}," int&",[425,14354,14355],{"class":6216}," v",[425,14357,13441],{"class":701},[425,14359,14360],{"class":427,"line":721},[425,14361,14362],{"class":1216},"    \u002F\u002Fv += 100;\n",[425,14364,14365,14367,14369,14372,14374],{"class":427,"line":735},[425,14366,7529],{"class":701},[425,14368,2190],{"class":1155},[425,14370,14371],{"class":701}," v ",[425,14373,2190],{"class":1155},[425,14375,9840],{"class":701},[425,14377,14378],{"class":427,"line":743},[425,14379,2578],{"class":701},[425,14381,14382],{"class":427,"line":751},[425,14383,3400],{"emptyLinePlaceholder":1084},[425,14385,14386,14388,14390],{"class":427,"line":759},[425,14387,1162],{"class":1155},[425,14389,2973],{"class":431},[425,14391,11852],{"class":701},[425,14393,14394],{"class":427,"line":770},[425,14395,3400],{"emptyLinePlaceholder":1084},[425,14397,14398],{"class":427,"line":780},[425,14399,14400],{"class":1216},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[425,14402,14403],{"class":427,"line":790},[425,14404,14405],{"class":1216},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[425,14407,14408,14410,14412,14414,14416,14418],{"class":427,"line":805},[425,14409,12220],{"class":1155},[425,14411,14352],{"class":1155},[425,14413,13933],{"class":701},[425,14415,1204],{"class":1155},[425,14417,3038],{"class":691},[425,14419,2307],{"class":701},[425,14421,14422],{"class":427,"line":818},[425,14423,3400],{"emptyLinePlaceholder":1084},[425,14425,14426,14429],{"class":427,"line":831},[425,14427,14428],{"class":1216},"    \u002F\u002Fref = 100;",[425,14430,14431],{"class":1216},"  \u002F\u002F加入const后不可以修改变量\n",[425,14433,14434,14436,14438,14440,14442],{"class":427,"line":841},[425,14435,7529],{"class":701},[425,14437,2190],{"class":1155},[425,14439,13933],{"class":701},[425,14441,2190],{"class":1155},[425,14443,9840],{"class":701},[425,14445,14446],{"class":427,"line":852},[425,14447,3400],{"emptyLinePlaceholder":1084},[425,14449,14450],{"class":427,"line":862},[425,14451,14452],{"class":1216},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[425,14454,14455,14457,14459,14461,14463],{"class":427,"line":878},[425,14456,2985],{"class":1155},[425,14458,11868],{"class":701},[425,14460,1204],{"class":1155},[425,14462,3038],{"class":691},[425,14464,2307],{"class":701},[425,14466,14467,14470],{"class":427,"line":914},[425,14468,14469],{"class":431},"    showValue",[425,14471,14287],{"class":701},[425,14473,14474],{"class":427,"line":943},[425,14475,3400],{"emptyLinePlaceholder":1084},[425,14477,14478,14480,14482,14484],{"class":427,"line":956},[425,14479,3303],{"class":431},[425,14481,1159],{"class":701},[425,14483,3308],{"class":435},[425,14485,3719],{"class":701},[425,14487,14488],{"class":427,"line":964},[425,14489,3400],{"emptyLinePlaceholder":1084},[425,14491,14492,14494,14496],{"class":427,"line":2733},[425,14493,5090],{"class":1155},[425,14495,5093],{"class":691},[425,14497,2307],{"class":701},[425,14499,14500],{"class":427,"line":2750},[425,14501,2578],{"class":701},[1074,14503,14504],{},"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":395,"searchDepth":698,"depth":698,"links":14506},[14507,14508,14509,14510,14511,14512],{"id":13039,"depth":698,"text":13040},{"id":13218,"depth":698,"text":13219},{"id":13401,"depth":698,"text":13402},{"id":13805,"depth":698,"text":13806},{"id":14132,"depth":698,"text":14133},{"id":14312,"depth":698,"text":14313},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":13031,"description":395},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":14519,"title":14520,"body":14521,"description":395,"extension":1082,"meta":15600,"navigation":1084,"path":15601,"seo":15602,"stem":15603,"__hash__":15604},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":14522,"toc":15592},[14523,14526,14530,14533,14538,14769,14771,14782,14786,14789,14796,14900,14903,14907,14910,14914,14917,14922,14944,14950,15277,15280,15284,15292,15589],[10,14524,14520],{"id":14525},"_7函数高级部分",[1099,14527,14529],{"id":14528},"_71函数默认参数","7.1函数默认参数",[19,14531,14532],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,14534,6181,14535],{},[422,14536,14537],{}," 返回值类型  函数名 （参数= 默认值）{}",[416,14539,14541],{"className":1146,"code":14540,"language":1148,"meta":395,"style":395},"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",[422,14542,14543,14578,14593,14597,14601,14606,14611,14640,14660,14670,14674,14678,14686,14690,14717,14739,14743,14753,14757,14765],{"__ignoreMap":395},[425,14544,14545,14547,14549,14551,14553,14555,14557,14559,14561,14564,14566,14568,14570,14572,14574,14576],{"class":427,"line":428},[425,14546,1162],{"class":1155},[425,14548,12384],{"class":431},[425,14550,1159],{"class":701},[425,14552,1162],{"class":1155},[425,14554,2412],{"class":6216},[425,14556,13434],{"class":701},[425,14558,1162],{"class":1155},[425,14560,3833],{"class":6216},[425,14562,14563],{"class":1155}," =",[425,14565,3038],{"class":691},[425,14567,13434],{"class":701},[425,14569,1162],{"class":1155},[425,14571,3849],{"class":6216},[425,14573,14563],{"class":1155},[425,14575,3038],{"class":691},[425,14577,13441],{"class":701},[425,14579,14580,14582,14584,14586,14588,14590],{"class":427,"line":698},[425,14581,5090],{"class":1155},[425,14583,11868],{"class":701},[425,14585,1629],{"class":1155},[425,14587,11881],{"class":701},[425,14589,1629],{"class":1155},[425,14591,14592],{"class":701}," c;\n",[425,14594,14595],{"class":427,"line":710},[425,14596,2578],{"class":701},[425,14598,14599],{"class":427,"line":721},[425,14600,3400],{"emptyLinePlaceholder":1084},[425,14602,14603],{"class":427,"line":735},[425,14604,14605],{"class":1216},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[425,14607,14608],{"class":427,"line":743},[425,14609,14610],{"class":1216},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[425,14612,14613,14615,14618,14620,14622,14624,14626,14628,14630,14632,14634,14636,14638],{"class":427,"line":751},[425,14614,1162],{"class":1155},[425,14616,14617],{"class":431}," func2",[425,14619,1159],{"class":701},[425,14621,1162],{"class":1155},[425,14623,2412],{"class":6216},[425,14625,14563],{"class":1155},[425,14627,3038],{"class":691},[425,14629,13434],{"class":701},[425,14631,1162],{"class":1155},[425,14633,3833],{"class":6216},[425,14635,14563],{"class":1155},[425,14637,3038],{"class":691},[425,14639,3719],{"class":701},[425,14641,14642,14644,14646,14648,14650,14652,14654,14656,14658],{"class":427,"line":759},[425,14643,1162],{"class":1155},[425,14645,14617],{"class":431},[425,14647,1159],{"class":701},[425,14649,1162],{"class":1155},[425,14651,2412],{"class":6216},[425,14653,13434],{"class":701},[425,14655,1162],{"class":1155},[425,14657,3833],{"class":6216},[425,14659,13441],{"class":701},[425,14661,14662,14664,14666,14668],{"class":427,"line":770},[425,14663,5090],{"class":1155},[425,14665,11868],{"class":701},[425,14667,1629],{"class":1155},[425,14669,13462],{"class":701},[425,14671,14672],{"class":427,"line":780},[425,14673,2578],{"class":701},[425,14675,14676],{"class":427,"line":790},[425,14677,3400],{"emptyLinePlaceholder":1084},[425,14679,14680,14682,14684],{"class":427,"line":805},[425,14681,1162],{"class":1155},[425,14683,2973],{"class":431},[425,14685,11852],{"class":701},[425,14687,14688],{"class":427,"line":818},[425,14689,3400],{"emptyLinePlaceholder":1084},[425,14691,14692,14694,14696,14699,14701,14703,14705,14707,14709,14711,14713,14715],{"class":427,"line":831},[425,14693,7529],{"class":701},[425,14695,2190],{"class":1155},[425,14697,14698],{"class":435}," \"ret = \"",[425,14700,2458],{"class":1155},[425,14702,12384],{"class":431},[425,14704,1159],{"class":701},[425,14706,1848],{"class":691},[425,14708,13434],{"class":701},[425,14710,1848],{"class":691},[425,14712,938],{"class":701},[425,14714,2190],{"class":1155},[425,14716,9840],{"class":701},[425,14718,14719,14721,14723,14725,14727,14729,14731,14733,14735,14737],{"class":427,"line":841},[425,14720,7529],{"class":701},[425,14722,2190],{"class":1155},[425,14724,14698],{"class":435},[425,14726,2458],{"class":1155},[425,14728,12384],{"class":431},[425,14730,1159],{"class":701},[425,14732,1460],{"class":691},[425,14734,938],{"class":701},[425,14736,2190],{"class":1155},[425,14738,9840],{"class":701},[425,14740,14741],{"class":427,"line":852},[425,14742,3400],{"emptyLinePlaceholder":1084},[425,14744,14745,14747,14749,14751],{"class":427,"line":862},[425,14746,3303],{"class":431},[425,14748,1159],{"class":701},[425,14750,3308],{"class":435},[425,14752,3719],{"class":701},[425,14754,14755],{"class":427,"line":878},[425,14756,3400],{"emptyLinePlaceholder":1084},[425,14758,14759,14761,14763],{"class":427,"line":914},[425,14760,5090],{"class":1155},[425,14762,5093],{"class":691},[425,14764,2307],{"class":701},[425,14766,14767],{"class":427,"line":943},[425,14768,2578],{"class":701},[19,14770,12331],{},[972,14772,14773,14776,14779],{},[450,14774,14775],{},"我传就用我；没传就用你",[450,14777,14778],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[450,14780,14781],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[1099,14783,14785],{"id":14784},"_72函数的占位参数","7.2函数的占位参数",[19,14787,14788],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,14790,14791,978,14793],{},[400,14792,6181],{},[422,14794,14795],{},"返回值类型 函数名 (数据类型){}",[416,14797,14799],{"className":1146,"code":14798,"language":1148,"meta":395,"style":395},"\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",[422,14800,14801,14806,14824,14837,14841,14849,14853,14870,14874,14884,14888,14896],{"__ignoreMap":395},[425,14802,14803],{"class":427,"line":428},[425,14804,14805],{"class":1216},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[425,14807,14808,14810,14812,14814,14816,14818,14820,14822],{"class":427,"line":698},[425,14809,6364],{"class":1155},[425,14811,12384],{"class":431},[425,14813,1159],{"class":701},[425,14815,1162],{"class":1155},[425,14817,2412],{"class":6216},[425,14819,13434],{"class":701},[425,14821,1162],{"class":1155},[425,14823,13441],{"class":701},[425,14825,14826,14828,14830,14833,14835],{"class":427,"line":710},[425,14827,7529],{"class":701},[425,14829,2190],{"class":1155},[425,14831,14832],{"class":435}," \"this is func\"",[425,14834,2458],{"class":1155},[425,14836,9840],{"class":701},[425,14838,14839],{"class":427,"line":721},[425,14840,2578],{"class":701},[425,14842,14843,14845,14847],{"class":427,"line":735},[425,14844,1162],{"class":1155},[425,14846,2973],{"class":431},[425,14848,11852],{"class":701},[425,14850,14851],{"class":427,"line":743},[425,14852,3400],{"emptyLinePlaceholder":1084},[425,14854,14855,14857,14859,14861,14863,14865,14867],{"class":427,"line":751},[425,14856,14284],{"class":431},[425,14858,1159],{"class":701},[425,14860,1594],{"class":691},[425,14862,1527],{"class":701},[425,14864,1594],{"class":691},[425,14866,6966],{"class":701},[425,14868,14869],{"class":1216}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[425,14871,14872],{"class":427,"line":759},[425,14873,3400],{"emptyLinePlaceholder":1084},[425,14875,14876,14878,14880,14882],{"class":427,"line":770},[425,14877,3303],{"class":431},[425,14879,1159],{"class":701},[425,14881,3308],{"class":435},[425,14883,3719],{"class":701},[425,14885,14886],{"class":427,"line":780},[425,14887,3400],{"emptyLinePlaceholder":1084},[425,14889,14890,14892,14894],{"class":427,"line":790},[425,14891,5090],{"class":1155},[425,14893,5093],{"class":691},[425,14895,2307],{"class":701},[425,14897,14898],{"class":427,"line":805},[425,14899,2578],{"class":701},[19,14901,14902],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[1099,14904,14906],{"id":14905},"_73函数重载","7.3函数重载",[19,14908,14909],{},"意思是函数名是可以相同的",[14,14911,14913],{"id":14912},"_731基本语法","7.3.1基本语法",[19,14915,14916],{},"作用：函数名可以相同，提高复用性",[19,14918,14919],{},[400,14920,14921],{},"函数重载满足条件：",[447,14923,14924,14927,14930],{},[450,14925,14926],{},"同一个作用域下",[450,14928,14929],{},"函数名称相同",[450,14931,14932,14933,14936,14937,14940,14941],{},"函数参数",[400,14934,14935],{},"类型不同","  或者 ",[400,14938,14939],{},"个数不同"," 或者 ",[400,14942,14943],{},"顺序不同",[19,14945,14946,14949],{},[400,14947,14948],{},"注意:","  函数的返回值不可以作为函数重载的条件",[416,14951,14953],{"className":10940,"code":14952,"language":10942,"meta":395,"style":395},"\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",[422,14954,14955,14960,14968,14972,14985,14989,15003,15007,15020,15024,15039,15043,15056,15060,15081,15085,15098,15102,15122,15126,15139,15143,15147,15152,15157,15162,15167,15172,15176,15180,15188,15192,15198,15208,15218,15232,15247,15251,15261,15265,15273],{"__ignoreMap":395},[425,14956,14957],{"class":427,"line":428},[425,14958,14959],{"class":1216},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[425,14961,14962,14964,14966],{"class":427,"line":698},[425,14963,6364],{"class":1155},[425,14965,12384],{"class":431},[425,14967,2976],{"class":701},[425,14969,14970],{"class":427,"line":710},[425,14971,2559],{"class":701},[425,14973,14974,14976,14978,14981,14983],{"class":427,"line":721},[425,14975,7529],{"class":701},[425,14977,2190],{"class":1155},[425,14979,14980],{"class":435}," \"func 的调用！\"",[425,14982,2458],{"class":1155},[425,14984,9840],{"class":701},[425,14986,14987],{"class":427,"line":735},[425,14988,2578],{"class":701},[425,14990,14991,14993,14995,14997,14999,15001],{"class":427,"line":743},[425,14992,6364],{"class":1155},[425,14994,12384],{"class":431},[425,14996,1159],{"class":701},[425,14998,1162],{"class":1155},[425,15000,2412],{"class":6216},[425,15002,1165],{"class":701},[425,15004,15005],{"class":427,"line":751},[425,15006,2559],{"class":701},[425,15008,15009,15011,15013,15016,15018],{"class":427,"line":759},[425,15010,7529],{"class":701},[425,15012,2190],{"class":1155},[425,15014,15015],{"class":435}," \"func (int a) 的调用！\"",[425,15017,2458],{"class":1155},[425,15019,9840],{"class":701},[425,15021,15022],{"class":427,"line":770},[425,15023,2578],{"class":701},[425,15025,15026,15028,15030,15032,15035,15037],{"class":427,"line":780},[425,15027,6364],{"class":1155},[425,15029,12384],{"class":431},[425,15031,1159],{"class":701},[425,15033,15034],{"class":1155},"double",[425,15036,2412],{"class":6216},[425,15038,1165],{"class":701},[425,15040,15041],{"class":427,"line":790},[425,15042,2559],{"class":701},[425,15044,15045,15047,15049,15052,15054],{"class":427,"line":805},[425,15046,7529],{"class":701},[425,15048,2190],{"class":1155},[425,15050,15051],{"class":435}," \"func (double a)的调用！\"",[425,15053,2458],{"class":1155},[425,15055,9840],{"class":701},[425,15057,15058],{"class":427,"line":818},[425,15059,2578],{"class":701},[425,15061,15062,15064,15066,15068,15070,15072,15075,15077,15079],{"class":427,"line":831},[425,15063,6364],{"class":1155},[425,15065,12384],{"class":431},[425,15067,1159],{"class":701},[425,15069,1162],{"class":1155},[425,15071,2412],{"class":6216},[425,15073,15074],{"class":701}," ,",[425,15076,15034],{"class":1155},[425,15078,3833],{"class":6216},[425,15080,1165],{"class":701},[425,15082,15083],{"class":427,"line":841},[425,15084,2559],{"class":701},[425,15086,15087,15089,15091,15094,15096],{"class":427,"line":852},[425,15088,7529],{"class":701},[425,15090,2190],{"class":1155},[425,15092,15093],{"class":435}," \"func (int a ,double b) 的调用！\"",[425,15095,2458],{"class":1155},[425,15097,9840],{"class":701},[425,15099,15100],{"class":427,"line":862},[425,15101,2578],{"class":701},[425,15103,15104,15106,15108,15110,15112,15114,15116,15118,15120],{"class":427,"line":878},[425,15105,6364],{"class":1155},[425,15107,12384],{"class":431},[425,15109,1159],{"class":701},[425,15111,15034],{"class":1155},[425,15113,2412],{"class":6216},[425,15115,15074],{"class":701},[425,15117,1162],{"class":1155},[425,15119,3833],{"class":6216},[425,15121,1165],{"class":701},[425,15123,15124],{"class":427,"line":914},[425,15125,2559],{"class":701},[425,15127,15128,15130,15132,15135,15137],{"class":427,"line":943},[425,15129,7529],{"class":701},[425,15131,2190],{"class":1155},[425,15133,15134],{"class":435}," \"func (double a ,int b)的调用！\"",[425,15136,2458],{"class":1155},[425,15138,9840],{"class":701},[425,15140,15141],{"class":427,"line":956},[425,15142,2578],{"class":701},[425,15144,15145],{"class":427,"line":964},[425,15146,3400],{"emptyLinePlaceholder":1084},[425,15148,15149],{"class":427,"line":2733},[425,15150,15151],{"class":1216},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[425,15153,15154],{"class":427,"line":2750},[425,15155,15156],{"class":1216},"\u002F\u002Fint func(double a, int b)\n",[425,15158,15159],{"class":427,"line":2755},[425,15160,15161],{"class":1216},"\u002F\u002F{\n",[425,15163,15164],{"class":427,"line":2760},[425,15165,15166],{"class":1216},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[425,15168,15169],{"class":427,"line":2765},[425,15170,15171],{"class":1216},"\u002F\u002F}\n",[425,15173,15174],{"class":427,"line":2779},[425,15175,3400],{"emptyLinePlaceholder":1084},[425,15177,15178],{"class":427,"line":2784},[425,15179,3400],{"emptyLinePlaceholder":1084},[425,15181,15182,15184,15186],{"class":427,"line":3577},[425,15183,1162],{"class":1155},[425,15185,2973],{"class":431},[425,15187,11852],{"class":701},[425,15189,15190],{"class":427,"line":3591},[425,15191,3400],{"emptyLinePlaceholder":1084},[425,15193,15194,15196],{"class":427,"line":3599},[425,15195,14284],{"class":431},[425,15197,6636],{"class":701},[425,15199,15200,15202,15204,15206],{"class":427,"line":3604},[425,15201,14284],{"class":431},[425,15203,1159],{"class":701},[425,15205,1594],{"class":691},[425,15207,3719],{"class":701},[425,15209,15210,15212,15214,15216],{"class":427,"line":3610},[425,15211,14284],{"class":431},[425,15213,1159],{"class":701},[425,15215,1207],{"class":691},[425,15217,3719],{"class":701},[425,15219,15220,15222,15224,15226,15228,15230],{"class":427,"line":3616},[425,15221,14284],{"class":431},[425,15223,1159],{"class":701},[425,15225,1594],{"class":691},[425,15227,1527],{"class":701},[425,15229,1207],{"class":691},[425,15231,3719],{"class":701},[425,15233,15234,15236,15238,15240,15243,15245],{"class":427,"line":3621},[425,15235,14284],{"class":431},[425,15237,1159],{"class":701},[425,15239,1207],{"class":691},[425,15241,15242],{"class":701}," , ",[425,15244,1594],{"class":691},[425,15246,3719],{"class":701},[425,15248,15249],{"class":427,"line":8948},[425,15250,14209],{"class":701},[425,15252,15253,15255,15257,15259],{"class":427,"line":8972},[425,15254,3303],{"class":431},[425,15256,1159],{"class":701},[425,15258,3308],{"class":435},[425,15260,3719],{"class":701},[425,15262,15263],{"class":427,"line":8977},[425,15264,3400],{"emptyLinePlaceholder":1084},[425,15266,15267,15269,15271],{"class":427,"line":8983},[425,15268,5090],{"class":1155},[425,15270,5093],{"class":691},[425,15272,2307],{"class":701},[425,15274,15275],{"class":427,"line":9010},[425,15276,2578],{"class":701},[19,15278,15279],{},"重点：函数返回值不可以作为函数重载条件！",[14,15281,15283],{"id":15282},"_732注意事项","7.3.2注意事项",[447,15285,15286,15289],{},[450,15287,15288],{},"引用作为重载条件!!!",[450,15290,15291],{},"函数重载碰到函数默认参数",[416,15293,15295],{"className":1146,"code":15294,"language":1148,"meta":395,"style":395},"\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",[422,15296,15297,15302,15307,15311,15327,15331,15344,15348,15352,15370,15374,15387,15391,15395,15399,15404,15408,15432,15436,15449,15453,15457,15471,15475,15488,15492,15496,15504,15508,15520,15530,15543,15547,15551,15559,15563,15573,15577,15585],{"__ignoreMap":395},[425,15298,15299],{"class":427,"line":428},[425,15300,15301],{"class":1216},"\u002F\u002F函数重载注意事项\n",[425,15303,15304],{"class":427,"line":698},[425,15305,15306],{"class":1216},"\u002F\u002F1、引用作为重载条件\n",[425,15308,15309],{"class":427,"line":710},[425,15310,3400],{"emptyLinePlaceholder":1084},[425,15312,15313,15315,15317,15319,15321,15323,15325],{"class":427,"line":721},[425,15314,6364],{"class":1155},[425,15316,12384],{"class":431},[425,15318,1159],{"class":701},[425,15320,1162],{"class":1155},[425,15322,11583],{"class":1155},[425,15324,22],{"class":6216},[425,15326,1165],{"class":701},[425,15328,15329],{"class":427,"line":735},[425,15330,2559],{"class":701},[425,15332,15333,15335,15337,15340,15342],{"class":427,"line":743},[425,15334,7529],{"class":701},[425,15336,2190],{"class":1155},[425,15338,15339],{"class":435}," \"func (int &a) 调用 \"",[425,15341,2458],{"class":1155},[425,15343,9840],{"class":701},[425,15345,15346],{"class":427,"line":751},[425,15347,2578],{"class":701},[425,15349,15350],{"class":427,"line":759},[425,15351,3400],{"emptyLinePlaceholder":1084},[425,15353,15354,15356,15358,15360,15362,15364,15366,15368],{"class":427,"line":770},[425,15355,6364],{"class":1155},[425,15357,12384],{"class":431},[425,15359,1159],{"class":701},[425,15361,7792],{"class":1155},[425,15363,3382],{"class":1155},[425,15365,11583],{"class":1155},[425,15367,22],{"class":6216},[425,15369,1165],{"class":701},[425,15371,15372],{"class":427,"line":780},[425,15373,2559],{"class":701},[425,15375,15376,15378,15380,15383,15385],{"class":427,"line":790},[425,15377,7529],{"class":701},[425,15379,2190],{"class":1155},[425,15381,15382],{"class":435}," \"func (const int &a) 调用 \"",[425,15384,2458],{"class":1155},[425,15386,9840],{"class":701},[425,15388,15389],{"class":427,"line":805},[425,15390,2578],{"class":701},[425,15392,15393],{"class":427,"line":818},[425,15394,3400],{"emptyLinePlaceholder":1084},[425,15396,15397],{"class":427,"line":831},[425,15398,3400],{"emptyLinePlaceholder":1084},[425,15400,15401],{"class":427,"line":841},[425,15402,15403],{"class":1216},"\u002F\u002F2、函数重载碰到函数默认参数\n",[425,15405,15406],{"class":427,"line":852},[425,15407,3400],{"emptyLinePlaceholder":1084},[425,15409,15410,15412,15414,15416,15418,15420,15422,15424,15426,15428,15430],{"class":427,"line":862},[425,15411,6364],{"class":1155},[425,15413,14617],{"class":431},[425,15415,1159],{"class":701},[425,15417,1162],{"class":1155},[425,15419,2412],{"class":6216},[425,15421,13434],{"class":701},[425,15423,1162],{"class":1155},[425,15425,3833],{"class":6216},[425,15427,14563],{"class":1155},[425,15429,3038],{"class":691},[425,15431,1165],{"class":701},[425,15433,15434],{"class":427,"line":878},[425,15435,2559],{"class":701},[425,15437,15438,15440,15442,15445,15447],{"class":427,"line":914},[425,15439,7529],{"class":701},[425,15441,2190],{"class":1155},[425,15443,15444],{"class":435}," \"func2(int a, int b = 10) 调用\"",[425,15446,2458],{"class":1155},[425,15448,9840],{"class":701},[425,15450,15451],{"class":427,"line":943},[425,15452,2578],{"class":701},[425,15454,15455],{"class":427,"line":956},[425,15456,3400],{"emptyLinePlaceholder":1084},[425,15458,15459,15461,15463,15465,15467,15469],{"class":427,"line":964},[425,15460,6364],{"class":1155},[425,15462,14617],{"class":431},[425,15464,1159],{"class":701},[425,15466,1162],{"class":1155},[425,15468,2412],{"class":6216},[425,15470,1165],{"class":701},[425,15472,15473],{"class":427,"line":2733},[425,15474,2559],{"class":701},[425,15476,15477,15479,15481,15484,15486],{"class":427,"line":2750},[425,15478,7529],{"class":701},[425,15480,2190],{"class":1155},[425,15482,15483],{"class":435}," \"func2(int a) 调用\"",[425,15485,2458],{"class":1155},[425,15487,9840],{"class":701},[425,15489,15490],{"class":427,"line":2755},[425,15491,2578],{"class":701},[425,15493,15494],{"class":427,"line":2760},[425,15495,3400],{"emptyLinePlaceholder":1084},[425,15497,15498,15500,15502],{"class":427,"line":2765},[425,15499,1162],{"class":1155},[425,15501,2973],{"class":431},[425,15503,11852],{"class":701},[425,15505,15506],{"class":427,"line":2779},[425,15507,14209],{"class":701},[425,15509,15510,15512,15514,15516,15518],{"class":427,"line":2784},[425,15511,2985],{"class":1155},[425,15513,11868],{"class":701},[425,15515,1204],{"class":1155},[425,15517,3038],{"class":691},[425,15519,2307],{"class":701},[425,15521,15522,15524,15527],{"class":427,"line":3577},[425,15523,14284],{"class":431},[425,15525,15526],{"class":701},"(a);",[425,15528,15529],{"class":1216}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[425,15531,15532,15534,15536,15538,15540],{"class":427,"line":3591},[425,15533,14284],{"class":431},[425,15535,1159],{"class":701},[425,15537,1594],{"class":691},[425,15539,6966],{"class":701},[425,15541,15542],{"class":1216},"\u002F\u002F调用有const   10是个常量\n",[425,15544,15545],{"class":427,"line":3599},[425,15546,3400],{"emptyLinePlaceholder":1084},[425,15548,15549],{"class":427,"line":3604},[425,15550,3400],{"emptyLinePlaceholder":1084},[425,15552,15553,15556],{"class":427,"line":3610},[425,15554,15555],{"class":1216},"    \u002F\u002Ffunc2(10);",[425,15557,15558],{"class":1216}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[425,15560,15561],{"class":427,"line":3616},[425,15562,3400],{"emptyLinePlaceholder":1084},[425,15564,15565,15567,15569,15571],{"class":427,"line":3621},[425,15566,3303],{"class":431},[425,15568,1159],{"class":701},[425,15570,3308],{"class":435},[425,15572,3719],{"class":701},[425,15574,15575],{"class":427,"line":8948},[425,15576,3400],{"emptyLinePlaceholder":1084},[425,15578,15579,15581,15583],{"class":427,"line":8972},[425,15580,5090],{"class":1155},[425,15582,5093],{"class":691},[425,15584,2307],{"class":701},[425,15586,15587],{"class":427,"line":8977},[425,15588,2578],{"class":701},[1074,15590,15591],{},"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":395,"searchDepth":698,"depth":698,"links":15593},[15594,15595,15596],{"id":14528,"depth":698,"text":14529},{"id":14784,"depth":698,"text":14785},{"id":14905,"depth":698,"text":14906,"children":15597},[15598,15599],{"id":14912,"depth":710,"text":14913},{"id":15282,"depth":710,"text":15283},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":14520,"description":395},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":15606,"title":15607,"body":15608,"description":24362,"extension":1082,"meta":24363,"navigation":1084,"path":24364,"seo":24365,"stem":24366,"__hash__":24367},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":15609,"toc":24343},[15610,15613,15619,15626,15631,15634,15637,15640,15644,15648,15651,15654,15662,15667,15670,15677,15682,15841,15844,16097,16100,16103,16106,16111,16114,16117,16128,16133,16369,16373,16383,16386,16394,16541,16545,16548,16551,16555,17000,17004,17012,17020,17932,17939,17944,18572,18575,18578,18581,18700,18703,18790,18793,18919,18922,19016,19019,19372,19376,19384,19388,19395,19398,19401,19412,19418,19423,19435,19443,19463,19471,19488,19674,19677,19681,19684,19687,19690,19693,19696,19699,19702,20162,20168,20172,20175,20186,20773,20776,21265,21269,21272,21275,21278,21281,21284,21292,21688,21692,21695,21698,22145,22148,22151,22156,22159,22164,22167,22171,22174,22176,22182,22185,22491,22501,22542,22546,22549,22551,22584,22587,22894,22896,22911,22914,22937,22946,22952,22955,22959,22962,22965,22970,22981,22986,22994,22999,23129,23132,23135,23310,23315,23527,23531,23534,23648,23653,23892,23896,23900,23903,23906,23911,24016,24019,24022,24025,24029,24140,24143,24146,24151,24203,24206,24209,24214,24260,24263,24268,24336,24338,24341],[10,15611,15607],{"id":15612},"_8类和对象",[19,15614,15615,15616],{},"C++面向对象的三大特性为",[400,15617,15618],{},"封装、继承、多态",[19,15620,15621,15622,15625],{},"C++认为",[400,15623,15624],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,15627,15628],{},[400,15629,15630],{},"例如：",[19,15632,15633],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,15635,15636],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,15638,15639],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[1099,15641,15643],{"id":15642},"_81封装","8.1封装",[14,15645,15647],{"id":15646},"_811封装的意义","8.1.1封装的意义",[19,15649,15650],{},"封装是C++面向对象三大特性之一",[19,15652,15653],{},"封装的意义：",[447,15655,15656,15659],{},[450,15657,15658],{},"将属性和行为作为一个整体，表现生活中的事物",[450,15660,15661],{},"将属性和行为加以权限控制",[19,15663,15664],{},[400,15665,15666],{},"封装意义一：",[19,15668,15669],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,15671,15672,978,15674],{},[400,15673,6181],{},[422,15675,15676],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[972,15678,15679],{},[450,15680,15681],{},"**示例1：**设计一个圆类，求圆的周长",[416,15683,15685],{"className":1146,"code":15684,"language":1148,"meta":395,"style":395},"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",[422,15686,15687,15695,15699,15704,15709,15714,15719,15726,15731,15741,15745,15763,15767,15771,15779,15783,15788,15793,15798,15803,15814,15837],{"__ignoreMap":395},[425,15688,15689,15692],{"class":427,"line":428},[425,15690,15691],{"class":1155},"class",[425,15693,15694],{"class":431}," Circle\n",[425,15696,15697],{"class":427,"line":698},[425,15698,2559],{"class":701},[425,15700,15701],{"class":427,"line":710},[425,15702,15703],{"class":1216},"    \u002F\u002F访问权限\n",[425,15705,15706],{"class":427,"line":721},[425,15707,15708],{"class":1216},"    \u002F\u002F公共权限\n",[425,15710,15711],{"class":427,"line":735},[425,15712,15713],{"class":1155},"public:\n",[425,15715,15716],{"class":427,"line":743},[425,15717,15718],{"class":1216},"    \u002F\u002F属性\n",[425,15720,15721,15723],{"class":427,"line":751},[425,15722,2985],{"class":1155},[425,15724,15725],{"class":701}," m_r;\n",[425,15727,15728],{"class":427,"line":759},[425,15729,15730],{"class":1216},"    \u002F\u002F行为\n",[425,15732,15733,15736,15739],{"class":427,"line":770},[425,15734,15735],{"class":1155},"    double",[425,15737,15738],{"class":431}," calculateZC",[425,15740,2976],{"class":701},[425,15742,15743],{"class":427,"line":780},[425,15744,3030],{"class":701},[425,15746,15747,15750,15753,15755,15758,15760],{"class":427,"line":790},[425,15748,15749],{"class":1155},"        return",[425,15751,15752],{"class":691}," 2",[425,15754,1603],{"class":1155},[425,15756,15757],{"class":701},"PI",[425,15759,1603],{"class":1155},[425,15761,15762],{"class":701},"m_r;\n",[425,15764,15765],{"class":427,"line":805},[425,15766,3187],{"class":701},[425,15768,15769],{"class":427,"line":818},[425,15770,4995],{"class":701},[425,15772,15773,15775,15777],{"class":427,"line":831},[425,15774,1162],{"class":1155},[425,15776,2973],{"class":431},[425,15778,2976],{"class":701},[425,15780,15781],{"class":427,"line":841},[425,15782,2559],{"class":701},[425,15784,15785],{"class":427,"line":852},[425,15786,15787],{"class":1216},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[425,15789,15790],{"class":427,"line":862},[425,15791,15792],{"class":1216},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[425,15794,15795],{"class":427,"line":878},[425,15796,15797],{"class":701},"    Circle c1;\n",[425,15799,15800],{"class":427,"line":914},[425,15801,15802],{"class":1216},"    \u002F\u002F给圆对象 的属性进行赋值\n",[425,15804,15805,15808,15810,15812],{"class":427,"line":943},[425,15806,15807],{"class":701},"    c1.m_r",[425,15809,1204],{"class":1155},[425,15811,1594],{"class":691},[425,15813,2307],{"class":701},[425,15815,15816,15818,15820,15823,15825,15828,15831,15833,15835],{"class":427,"line":956},[425,15817,2564],{"class":701},[425,15819,2190],{"class":1155},[425,15821,15822],{"class":435},"\"圆的周长\"",[425,15824,2190],{"class":1155},[425,15826,15827],{"class":701},"c1.",[425,15829,15830],{"class":431},"calculateZC",[425,15832,3427],{"class":701},[425,15834,2190],{"class":1155},[425,15836,2212],{"class":701},[425,15838,15839],{"class":427,"line":964},[425,15840,2578],{"class":701},[19,15842,15843],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[416,15845,15847],{"className":1146,"code":15846,"language":1148,"meta":395,"style":395},"#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",[422,15848,15849,15855,15865,15871,15877,15881,15885,15890,15897,15902,15920,15924,15934,15938,15943,15959,15963,15973,15977,15982,15990,15994,16026,16030,16034,16042,16046,16051,16056,16070,16084,16093],{"__ignoreMap":395},[425,15850,15851,15853],{"class":427,"line":428},[425,15852,2950],{"class":1155},[425,15854,2953],{"class":435},[425,15856,15857,15859,15861,15863],{"class":427,"line":698},[425,15858,2958],{"class":1155},[425,15860,2961],{"class":1155},[425,15862,2964],{"class":431},[425,15864,2307],{"class":701},[425,15866,15867,15869],{"class":427,"line":710},[425,15868,2950],{"class":1155},[425,15870,8749],{"class":435},[425,15872,15873,15875],{"class":427,"line":721},[425,15874,15691],{"class":1155},[425,15876,8762],{"class":431},[425,15878,15879],{"class":427,"line":735},[425,15880,2559],{"class":701},[425,15882,15883],{"class":427,"line":743},[425,15884,15713],{"class":1155},[425,15886,15887],{"class":427,"line":751},[425,15888,15889],{"class":701},"    string m_name;\n",[425,15891,15892,15894],{"class":427,"line":759},[425,15893,2985],{"class":1155},[425,15895,15896],{"class":701}," m_id;\n",[425,15898,15899],{"class":427,"line":770},[425,15900,15901],{"class":1216},"    \u002F\u002F赋值姓名\n",[425,15903,15904,15907,15910,15912,15915,15918],{"class":427,"line":780},[425,15905,15906],{"class":1155},"    void",[425,15908,15909],{"class":431}," setName",[425,15911,1159],{"class":701},[425,15913,15914],{"class":431},"string",[425,15916,15917],{"class":6216}," name",[425,15919,1165],{"class":701},[425,15921,15922],{"class":427,"line":790},[425,15923,3030],{"class":701},[425,15925,15926,15929,15931],{"class":427,"line":805},[425,15927,15928],{"class":701},"        m_name",[425,15930,1204],{"class":1155},[425,15932,15933],{"class":701},"name;\n",[425,15935,15936],{"class":427,"line":818},[425,15937,3187],{"class":701},[425,15939,15940],{"class":427,"line":831},[425,15941,15942],{"class":1216},"    \u002F\u002F赋值学号\n",[425,15944,15945,15947,15950,15952,15954,15957],{"class":427,"line":841},[425,15946,15906],{"class":1155},[425,15948,15949],{"class":431}," setId",[425,15951,1159],{"class":701},[425,15953,1162],{"class":1155},[425,15955,15956],{"class":6216}," id",[425,15958,1165],{"class":701},[425,15960,15961],{"class":427,"line":852},[425,15962,3030],{"class":701},[425,15964,15965,15968,15970],{"class":427,"line":862},[425,15966,15967],{"class":701},"        m_id",[425,15969,1204],{"class":1155},[425,15971,15972],{"class":701},"id;\n",[425,15974,15975],{"class":427,"line":878},[425,15976,3187],{"class":701},[425,15978,15979],{"class":427,"line":914},[425,15980,15981],{"class":1216},"    \u002F\u002F打印学生信息\n",[425,15983,15984,15986,15988],{"class":427,"line":943},[425,15985,15906],{"class":1155},[425,15987,10614],{"class":431},[425,15989,2976],{"class":701},[425,15991,15992],{"class":427,"line":956},[425,15993,3030],{"class":701},[425,15995,15996,15998,16000,16003,16005,16008,16010,16012,16014,16017,16019,16022,16024],{"class":427,"line":964},[425,15997,4451],{"class":701},[425,15999,2190],{"class":1155},[425,16001,16002],{"class":435},"\"姓名：\"",[425,16004,2190],{"class":1155},[425,16006,16007],{"class":701},"m_name",[425,16009,2190],{"class":1155},[425,16011,5359],{"class":435},[425,16013,2190],{"class":1155},[425,16015,16016],{"class":435},"\"学号：\"",[425,16018,2190],{"class":1155},[425,16020,16021],{"class":701},"m_id",[425,16023,2190],{"class":1155},[425,16025,2212],{"class":701},[425,16027,16028],{"class":427,"line":2733},[425,16029,3187],{"class":701},[425,16031,16032],{"class":427,"line":2750},[425,16033,4995],{"class":701},[425,16035,16036,16038,16040],{"class":427,"line":2755},[425,16037,1162],{"class":1155},[425,16039,2973],{"class":431},[425,16041,2976],{"class":701},[425,16043,16044],{"class":427,"line":2760},[425,16045,2559],{"class":701},[425,16047,16048],{"class":427,"line":2765},[425,16049,16050],{"class":1216},"    \u002F\u002F实例化\n",[425,16052,16053],{"class":427,"line":2779},[425,16054,16055],{"class":701},"    Student s1;\n",[425,16057,16058,16061,16064,16066,16068],{"class":427,"line":2784},[425,16059,16060],{"class":701},"    s1.",[425,16062,16063],{"class":431},"setName",[425,16065,1159],{"class":701},[425,16067,8916],{"class":435},[425,16069,3719],{"class":701},[425,16071,16072,16074,16077,16079,16082],{"class":427,"line":3577},[425,16073,16060],{"class":701},[425,16075,16076],{"class":431},"setId",[425,16078,1159],{"class":701},[425,16080,16081],{"class":691},"123456",[425,16083,3719],{"class":701},[425,16085,16086,16088,16091],{"class":427,"line":3591},[425,16087,16060],{"class":701},[425,16089,16090],{"class":431},"printInfo",[425,16092,6636],{"class":701},[425,16094,16095],{"class":427,"line":3599},[425,16096,2578],{"class":701},[19,16098,16099],{},"类中的属性和行为统称为成员",[19,16101,16102],{},"属性：成员属性(成员变量)",[19,16104,16105],{},"方法：成员函数(成员方法)",[19,16107,16108],{},[400,16109,16110],{},"封装意义二：",[19,16112,16113],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,16115,16116],{},"访问权限有三种：",[972,16118,16119,16122,16125],{},[450,16120,16121],{},"public        公共权限",[450,16123,16124],{},"protected 保护权限",[450,16126,16127],{},"private      私有权限",[19,16129,16130],{},[400,16131,16132],{},"示例：",[416,16134,16136],{"className":10940,"code":16135,"language":10942,"meta":395,"style":395},"\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",[422,16137,16138,16143,16148,16153,16158,16162,16169,16173,16178,16182,16187,16191,16196,16201,16206,16210,16215,16220,16227,16231,16235,16243,16247,16258,16270,16282,16286,16290,16294,16302,16306,16311,16323,16331,16339,16343,16353,16357,16365],{"__ignoreMap":395},[425,16139,16140],{"class":427,"line":428},[425,16141,16142],{"class":1216},"\u002F\u002F三种权限\n",[425,16144,16145],{"class":427,"line":698},[425,16146,16147],{"class":1216},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[425,16149,16150],{"class":427,"line":710},[425,16151,16152],{"class":1216},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[425,16154,16155],{"class":427,"line":721},[425,16156,16157],{"class":1216},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[425,16159,16160],{"class":427,"line":735},[425,16161,3400],{"emptyLinePlaceholder":1084},[425,16163,16164,16166],{"class":427,"line":743},[425,16165,15691],{"class":1155},[425,16167,16168],{"class":431}," Person\n",[425,16170,16171],{"class":427,"line":751},[425,16172,2559],{"class":701},[425,16174,16175],{"class":427,"line":759},[425,16176,16177],{"class":1216},"    \u002F\u002F姓名  公共权限\n",[425,16179,16180],{"class":427,"line":770},[425,16181,15713],{"class":1155},[425,16183,16184],{"class":427,"line":780},[425,16185,16186],{"class":701},"    string m_Name;\n",[425,16188,16189],{"class":427,"line":790},[425,16190,3400],{"emptyLinePlaceholder":1084},[425,16192,16193],{"class":427,"line":805},[425,16194,16195],{"class":1216},"    \u002F\u002F汽车  保护权限\n",[425,16197,16198],{"class":427,"line":818},[425,16199,16200],{"class":1155},"protected:\n",[425,16202,16203],{"class":427,"line":831},[425,16204,16205],{"class":701},"    string m_Car;\n",[425,16207,16208],{"class":427,"line":841},[425,16209,3400],{"emptyLinePlaceholder":1084},[425,16211,16212],{"class":427,"line":852},[425,16213,16214],{"class":1216},"    \u002F\u002F银行卡密码  私有权限\n",[425,16216,16217],{"class":427,"line":862},[425,16218,16219],{"class":1155},"private:\n",[425,16221,16222,16224],{"class":427,"line":878},[425,16223,2985],{"class":1155},[425,16225,16226],{"class":701}," m_Password;\n",[425,16228,16229],{"class":427,"line":914},[425,16230,3400],{"emptyLinePlaceholder":1084},[425,16232,16233],{"class":427,"line":943},[425,16234,15713],{"class":1155},[425,16236,16237,16239,16241],{"class":427,"line":956},[425,16238,15906],{"class":1155},[425,16240,12384],{"class":431},[425,16242,2976],{"class":701},[425,16244,16245],{"class":427,"line":964},[425,16246,3030],{"class":701},[425,16248,16249,16252,16254,16256],{"class":427,"line":2733},[425,16250,16251],{"class":701},"        m_Name ",[425,16253,1204],{"class":1155},[425,16255,9938],{"class":435},[425,16257,2307],{"class":701},[425,16259,16260,16263,16265,16268],{"class":427,"line":2750},[425,16261,16262],{"class":701},"        m_Car ",[425,16264,1204],{"class":1155},[425,16266,16267],{"class":435}," \"拖拉机\"",[425,16269,2307],{"class":701},[425,16271,16272,16275,16277,16280],{"class":427,"line":2755},[425,16273,16274],{"class":701},"        m_Password ",[425,16276,1204],{"class":1155},[425,16278,16279],{"class":691}," 123456",[425,16281,2307],{"class":701},[425,16283,16284],{"class":427,"line":2760},[425,16285,3187],{"class":701},[425,16287,16288],{"class":427,"line":2765},[425,16289,4995],{"class":701},[425,16291,16292],{"class":427,"line":2779},[425,16293,3400],{"emptyLinePlaceholder":1084},[425,16295,16296,16298,16300],{"class":427,"line":2784},[425,16297,1162],{"class":1155},[425,16299,2973],{"class":431},[425,16301,11852],{"class":701},[425,16303,16304],{"class":427,"line":3577},[425,16305,3400],{"emptyLinePlaceholder":1084},[425,16307,16308],{"class":427,"line":3591},[425,16309,16310],{"class":701},"    Person p;\n",[425,16312,16313,16316,16318,16321],{"class":427,"line":3599},[425,16314,16315],{"class":701},"    p.m_Name ",[425,16317,1204],{"class":1155},[425,16319,16320],{"class":435}," \"李四\"",[425,16322,2307],{"class":701},[425,16324,16325,16328],{"class":427,"line":3604},[425,16326,16327],{"class":1216},"    \u002F\u002Fp.m_Car = \"奔驰\";",[425,16329,16330],{"class":1216},"  \u002F\u002F保护权限类外访问不到\n",[425,16332,16333,16336],{"class":427,"line":3610},[425,16334,16335],{"class":1216},"    \u002F\u002Fp.m_Password = 123;",[425,16337,16338],{"class":1216}," \u002F\u002F私有权限类外访问不到\n",[425,16340,16341],{"class":427,"line":3616},[425,16342,3400],{"emptyLinePlaceholder":1084},[425,16344,16345,16347,16349,16351],{"class":427,"line":3621},[425,16346,3303],{"class":431},[425,16348,1159],{"class":701},[425,16350,3308],{"class":435},[425,16352,3719],{"class":701},[425,16354,16355],{"class":427,"line":8948},[425,16356,3400],{"emptyLinePlaceholder":1084},[425,16358,16359,16361,16363],{"class":427,"line":8972},[425,16360,5090],{"class":1155},[425,16362,5093],{"class":691},[425,16364,2307],{"class":701},[425,16366,16367],{"class":427,"line":8977},[425,16368,2578],{"class":701},[14,16370,16372],{"id":16371},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,16374,16375,16376,16379,16380],{},"在C++中 struct和class唯一的",[400,16377,16378],{},"区别","就在于 ",[400,16381,16382],{},"默认的访问权限不同",[19,16384,16385],{},"区别：",[447,16387,16388,16391],{},[450,16389,16390],{},"struct 默认权限为公共",[450,16392,16393],{},"class   默认权限为私有",[416,16395,16397],{"className":10940,"code":16396,"language":10942,"meta":395,"style":395},"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",[422,16398,16399,16406,16410,16420,16424,16428,16435,16439,16449,16453,16457,16465,16469,16474,16488,16492,16497,16511,16515,16525,16529,16537],{"__ignoreMap":395},[425,16400,16401,16403],{"class":427,"line":428},[425,16402,15691],{"class":1155},[425,16404,16405],{"class":431}," C1\n",[425,16407,16408],{"class":427,"line":698},[425,16409,2559],{"class":701},[425,16411,16412,16414,16417],{"class":427,"line":710},[425,16413,2985],{"class":1155},[425,16415,16416],{"class":701},"  m_A;",[425,16418,16419],{"class":1216}," \u002F\u002F默认是私有权限\n",[425,16421,16422],{"class":427,"line":721},[425,16423,4995],{"class":701},[425,16425,16426],{"class":427,"line":735},[425,16427,3400],{"emptyLinePlaceholder":1084},[425,16429,16430,16432],{"class":427,"line":743},[425,16431,8759],{"class":1155},[425,16433,16434],{"class":431}," C2\n",[425,16436,16437],{"class":427,"line":751},[425,16438,2559],{"class":701},[425,16440,16441,16443,16446],{"class":427,"line":759},[425,16442,2985],{"class":1155},[425,16444,16445],{"class":701}," m_A;",[425,16447,16448],{"class":1216},"  \u002F\u002F默认是公共权限\n",[425,16450,16451],{"class":427,"line":770},[425,16452,4995],{"class":701},[425,16454,16455],{"class":427,"line":780},[425,16456,3400],{"emptyLinePlaceholder":1084},[425,16458,16459,16461,16463],{"class":427,"line":790},[425,16460,1162],{"class":1155},[425,16462,2973],{"class":431},[425,16464,11852],{"class":701},[425,16466,16467],{"class":427,"line":805},[425,16468,3400],{"emptyLinePlaceholder":1084},[425,16470,16471],{"class":427,"line":818},[425,16472,16473],{"class":701},"    C1 c1;\n",[425,16475,16476,16479,16481,16483,16485],{"class":427,"line":831},[425,16477,16478],{"class":701},"    c1.m_A ",[425,16480,1204],{"class":1155},[425,16482,3038],{"class":691},[425,16484,1213],{"class":701},[425,16486,16487],{"class":1216}," \u002F\u002F错误，访问权限是私有\n",[425,16489,16490],{"class":427,"line":841},[425,16491,3400],{"emptyLinePlaceholder":1084},[425,16493,16494],{"class":427,"line":852},[425,16495,16496],{"class":701},"    C2 c2;\n",[425,16498,16499,16502,16504,16506,16508],{"class":427,"line":862},[425,16500,16501],{"class":701},"    c2.m_A ",[425,16503,1204],{"class":1155},[425,16505,3038],{"class":691},[425,16507,1213],{"class":701},[425,16509,16510],{"class":1216}," \u002F\u002F正确，访问权限是公共\n",[425,16512,16513],{"class":427,"line":878},[425,16514,3400],{"emptyLinePlaceholder":1084},[425,16516,16517,16519,16521,16523],{"class":427,"line":914},[425,16518,3303],{"class":431},[425,16520,1159],{"class":701},[425,16522,3308],{"class":435},[425,16524,3719],{"class":701},[425,16526,16527],{"class":427,"line":943},[425,16528,3400],{"emptyLinePlaceholder":1084},[425,16530,16531,16533,16535],{"class":427,"line":956},[425,16532,5090],{"class":1155},[425,16534,5093],{"class":691},[425,16536,2307],{"class":701},[425,16538,16539],{"class":427,"line":964},[425,16540,2578],{"class":701},[14,16542,16544],{"id":16543},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,16546,16547],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,16549,16550],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,16552,16553],{},[400,16554,16132],{},[416,16556,16558],{"className":10940,"code":16557,"language":10942,"meta":395,"style":395},"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",[422,16559,16560,16570,16574,16578,16583,16597,16606,16610,16620,16624,16631,16635,16639,16643,16648,16657,16664,16668,16673,16689,16712,16725,16732,16736,16745,16749,16753,16758,16774,16784,16788,16792,16796,16804,16808,16818,16822,16830,16834,16838,16846,16850,16854,16859,16872,16895,16899,16904,16917,16939,16943,16948,16962,16970,16974,16984,16988,16996],{"__ignoreMap":395},[425,16561,16562,16564,16567],{"class":427,"line":428},[425,16563,15691],{"class":1155},[425,16565,16566],{"class":431}," Person",[425,16568,16569],{"class":701}," {\n",[425,16571,16572],{"class":427,"line":698},[425,16573,15713],{"class":1155},[425,16575,16576],{"class":427,"line":710},[425,16577,3400],{"emptyLinePlaceholder":1084},[425,16579,16580],{"class":427,"line":721},[425,16581,16582],{"class":1216},"    \u002F\u002F姓名设置可读可写\n",[425,16584,16585,16587,16589,16591,16593,16595],{"class":427,"line":735},[425,16586,15906],{"class":1155},[425,16588,15909],{"class":431},[425,16590,1159],{"class":701},[425,16592,15914],{"class":431},[425,16594,15917],{"class":6216},[425,16596,13441],{"class":701},[425,16598,16599,16601,16603],{"class":427,"line":743},[425,16600,16251],{"class":701},[425,16602,1204],{"class":1155},[425,16604,16605],{"class":701}," name;\n",[425,16607,16608],{"class":427,"line":751},[425,16609,3187],{"class":701},[425,16611,16612,16615,16618],{"class":427,"line":759},[425,16613,16614],{"class":431},"    string",[425,16616,16617],{"class":431}," getName",[425,16619,2976],{"class":701},[425,16621,16622],{"class":427,"line":770},[425,16623,3030],{"class":701},[425,16625,16626,16628],{"class":427,"line":780},[425,16627,15749],{"class":1155},[425,16629,16630],{"class":701}," m_Name;\n",[425,16632,16633],{"class":427,"line":790},[425,16634,3187],{"class":701},[425,16636,16637],{"class":427,"line":805},[425,16638,3400],{"emptyLinePlaceholder":1084},[425,16640,16641],{"class":427,"line":818},[425,16642,3400],{"emptyLinePlaceholder":1084},[425,16644,16645],{"class":427,"line":831},[425,16646,16647],{"class":1216},"    \u002F\u002F获取年龄 \n",[425,16649,16650,16652,16655],{"class":427,"line":841},[425,16651,2985],{"class":1155},[425,16653,16654],{"class":431}," getAge",[425,16656,11852],{"class":701},[425,16658,16659,16661],{"class":427,"line":852},[425,16660,15749],{"class":1155},[425,16662,16663],{"class":701}," m_Age;\n",[425,16665,16666],{"class":427,"line":862},[425,16667,3187],{"class":701},[425,16669,16670],{"class":427,"line":878},[425,16671,16672],{"class":1216},"    \u002F\u002F设置年龄\n",[425,16674,16675,16677,16680,16682,16684,16687],{"class":427,"line":914},[425,16676,15906],{"class":1155},[425,16678,16679],{"class":431}," setAge",[425,16681,1159],{"class":701},[425,16683,1162],{"class":1155},[425,16685,16686],{"class":6216}," age",[425,16688,13441],{"class":701},[425,16690,16691,16693,16696,16698,16700,16702,16705,16707,16710],{"class":427,"line":943},[425,16692,3497],{"class":1155},[425,16694,16695],{"class":701}," (age ",[425,16697,2057],{"class":1155},[425,16699,5093],{"class":691},[425,16701,4255],{"class":1155},[425,16703,16704],{"class":701}," age ",[425,16706,2107],{"class":1155},[425,16708,16709],{"class":691}," 150",[425,16711,13441],{"class":701},[425,16713,16714,16716,16718,16721,16723],{"class":427,"line":956},[425,16715,10718],{"class":701},[425,16717,2190],{"class":1155},[425,16719,16720],{"class":435}," \"你个老妖精!\"",[425,16722,2458],{"class":1155},[425,16724,9840],{"class":701},[425,16726,16727,16730],{"class":427,"line":964},[425,16728,16729],{"class":1155},"            return",[425,16731,2307],{"class":701},[425,16733,16734],{"class":427,"line":2733},[425,16735,3529],{"class":701},[425,16737,16738,16741,16743],{"class":427,"line":2750},[425,16739,16740],{"class":701},"        m_Age ",[425,16742,1204],{"class":1155},[425,16744,8797],{"class":701},[425,16746,16747],{"class":427,"line":2755},[425,16748,3187],{"class":701},[425,16750,16751],{"class":427,"line":2760},[425,16752,3400],{"emptyLinePlaceholder":1084},[425,16754,16755],{"class":427,"line":2765},[425,16756,16757],{"class":1216},"    \u002F\u002F情人设置为只写\n",[425,16759,16760,16762,16765,16767,16769,16772],{"class":427,"line":2779},[425,16761,15906],{"class":1155},[425,16763,16764],{"class":431}," setLover",[425,16766,1159],{"class":701},[425,16768,15914],{"class":431},[425,16770,16771],{"class":6216}," lover",[425,16773,13441],{"class":701},[425,16775,16776,16779,16781],{"class":427,"line":2784},[425,16777,16778],{"class":701},"        m_Lover ",[425,16780,1204],{"class":1155},[425,16782,16783],{"class":701}," lover;\n",[425,16785,16786],{"class":427,"line":3577},[425,16787,3187],{"class":701},[425,16789,16790],{"class":427,"line":3591},[425,16791,3400],{"emptyLinePlaceholder":1084},[425,16793,16794],{"class":427,"line":3599},[425,16795,16219],{"class":1155},[425,16797,16798,16801],{"class":427,"line":3604},[425,16799,16800],{"class":701},"    string m_Name;",[425,16802,16803],{"class":1216}," \u002F\u002F可读可写  姓名\n",[425,16805,16806],{"class":427,"line":3610},[425,16807,14209],{"class":701},[425,16809,16810,16812,16815],{"class":427,"line":3616},[425,16811,2985],{"class":1155},[425,16813,16814],{"class":701}," m_Age;",[425,16816,16817],{"class":1216}," \u002F\u002F只读  年龄\n",[425,16819,16820],{"class":427,"line":3621},[425,16821,3400],{"emptyLinePlaceholder":1084},[425,16823,16824,16827],{"class":427,"line":8948},[425,16825,16826],{"class":701},"    string m_Lover;",[425,16828,16829],{"class":1216}," \u002F\u002F只写  情人\n",[425,16831,16832],{"class":427,"line":8972},[425,16833,4995],{"class":701},[425,16835,16836],{"class":427,"line":8977},[425,16837,3400],{"emptyLinePlaceholder":1084},[425,16839,16840,16842,16844],{"class":427,"line":8983},[425,16841,1162],{"class":1155},[425,16843,2973],{"class":431},[425,16845,11852],{"class":701},[425,16847,16848],{"class":427,"line":9010},[425,16849,3400],{"emptyLinePlaceholder":1084},[425,16851,16852],{"class":427,"line":9015},[425,16853,16310],{"class":701},[425,16855,16856],{"class":427,"line":9021},[425,16857,16858],{"class":1216},"    \u002F\u002F姓名设置\n",[425,16860,16861,16864,16866,16868,16870],{"class":427,"line":9033},[425,16862,16863],{"class":701},"    p.",[425,16865,16063],{"class":431},[425,16867,1159],{"class":701},[425,16869,8916],{"class":435},[425,16871,3719],{"class":701},[425,16873,16874,16876,16878,16881,16883,16886,16889,16891,16893],{"class":427,"line":9045},[425,16875,7529],{"class":701},[425,16877,2190],{"class":1155},[425,16879,16880],{"class":435}," \"姓名： \"",[425,16882,2458],{"class":1155},[425,16884,16885],{"class":701}," p.",[425,16887,16888],{"class":431},"getName",[425,16890,14049],{"class":701},[425,16892,2190],{"class":1155},[425,16894,9840],{"class":701},[425,16896,16897],{"class":427,"line":9057},[425,16898,3400],{"emptyLinePlaceholder":1084},[425,16900,16901],{"class":427,"line":10715},[425,16902,16903],{"class":1216},"    \u002F\u002F年龄设置\n",[425,16905,16906,16908,16911,16913,16915],{"class":427,"line":10740},[425,16907,16863],{"class":701},[425,16909,16910],{"class":431},"setAge",[425,16912,1159],{"class":701},[425,16914,1804],{"class":691},[425,16916,3719],{"class":701},[425,16918,16919,16921,16923,16926,16928,16930,16933,16935,16937],{"class":427,"line":10763},[425,16920,7529],{"class":701},[425,16922,2190],{"class":1155},[425,16924,16925],{"class":435}," \"年龄： \"",[425,16927,2458],{"class":1155},[425,16929,16885],{"class":701},[425,16931,16932],{"class":431},"getAge",[425,16934,14049],{"class":701},[425,16936,2190],{"class":1155},[425,16938,9840],{"class":701},[425,16940,16941],{"class":427,"line":10787},[425,16942,3400],{"emptyLinePlaceholder":1084},[425,16944,16945],{"class":427,"line":10792},[425,16946,16947],{"class":1216},"    \u002F\u002F情人设置\n",[425,16949,16950,16952,16955,16957,16960],{"class":427,"line":10797},[425,16951,16863],{"class":701},[425,16953,16954],{"class":431},"setLover",[425,16956,1159],{"class":701},[425,16958,16959],{"class":435},"\"苍井\"",[425,16961,3719],{"class":701},[425,16963,16964,16967],{"class":427,"line":10802},[425,16965,16966],{"class":1216},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[425,16968,16969],{"class":1216},"  \u002F\u002F只写属性，不可以读取\n",[425,16971,16972],{"class":427,"line":10811},[425,16973,3400],{"emptyLinePlaceholder":1084},[425,16975,16976,16978,16980,16982],{"class":427,"line":10816},[425,16977,3303],{"class":431},[425,16979,1159],{"class":701},[425,16981,3308],{"class":435},[425,16983,3719],{"class":701},[425,16985,16986],{"class":427,"line":10822},[425,16987,3400],{"emptyLinePlaceholder":1084},[425,16989,16990,16992,16994],{"class":427,"line":10843},[425,16991,5090],{"class":1155},[425,16993,5093],{"class":691},[425,16995,2307],{"class":701},[425,16997,16998],{"class":427,"line":10849},[425,16999,2578],{"class":701},[14,17001,17003],{"id":17002},"_814封装案例","8.1.4封装案例",[972,17005,17006],{},[450,17007,17008,17011],{},[400,17009,17010],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[447,17013,17014,17017],{},[450,17015,17016],{},"求出立方体的面积和体积",[450,17018,17019],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[416,17021,17023],{"className":1146,"code":17022,"language":1148,"meta":395,"style":395},"#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",[422,17024,17025,17031,17041,17048,17052,17056,17061,17091,17095,17105,17115,17125,17129,17138,17142,17178,17182,17191,17195,17211,17215,17220,17229,17233,17240,17244,17253,17257,17264,17268,17277,17281,17288,17292,17297,17314,17318,17364,17368,17377,17381,17385,17389,17398,17402,17406,17411,17415,17421,17427,17433,17437,17441,17446,17468,17472,17526,17530,17538,17542,17547,17552,17565,17572,17588,17599,17605,17628,17634,17657,17671,17691,17697,17708,17731,17753,17758,17764,17778,17791,17796,17810,17815,17821,17826,17840,17845,17850,17864,17876,17881,17894,17899,17904,17909,17922,17927],{"__ignoreMap":395},[425,17026,17027,17029],{"class":427,"line":428},[425,17028,2950],{"class":1155},[425,17030,2953],{"class":435},[425,17032,17033,17035,17037,17039],{"class":427,"line":698},[425,17034,2958],{"class":1155},[425,17036,2961],{"class":1155},[425,17038,2964],{"class":431},[425,17040,2307],{"class":701},[425,17042,17043,17045],{"class":427,"line":710},[425,17044,15691],{"class":1155},[425,17046,17047],{"class":431}," Cube\n",[425,17049,17050],{"class":427,"line":721},[425,17051,2559],{"class":701},[425,17053,17054],{"class":427,"line":735},[425,17055,15713],{"class":1155},[425,17057,17058],{"class":427,"line":743},[425,17059,17060],{"class":1216},"    \u002F\u002F输入长宽高\n",[425,17062,17063,17065,17068,17070,17072,17075,17077,17079,17082,17084,17086,17089],{"class":427,"line":751},[425,17064,15906],{"class":1155},[425,17066,17067],{"class":431}," setLwh",[425,17069,1159],{"class":701},[425,17071,1162],{"class":1155},[425,17073,17074],{"class":6216}," l",[425,17076,1527],{"class":701},[425,17078,1162],{"class":1155},[425,17080,17081],{"class":6216}," w",[425,17083,1527],{"class":701},[425,17085,1162],{"class":1155},[425,17087,17088],{"class":6216}," h",[425,17090,1165],{"class":701},[425,17092,17093],{"class":427,"line":759},[425,17094,3030],{"class":701},[425,17096,17097,17100,17102],{"class":427,"line":770},[425,17098,17099],{"class":701},"        m_L",[425,17101,1204],{"class":1155},[425,17103,17104],{"class":701},"l;\n",[425,17106,17107,17110,17112],{"class":427,"line":780},[425,17108,17109],{"class":701},"        m_W",[425,17111,1204],{"class":1155},[425,17113,17114],{"class":701},"w;\n",[425,17116,17117,17120,17122],{"class":427,"line":790},[425,17118,17119],{"class":701},"        m_H",[425,17121,1204],{"class":1155},[425,17123,17124],{"class":701},"h;\n",[425,17126,17127],{"class":427,"line":805},[425,17128,3187],{"class":701},[425,17130,17131,17133,17136],{"class":427,"line":818},[425,17132,2985],{"class":1155},[425,17134,17135],{"class":431}," mianji",[425,17137,2976],{"class":701},[425,17139,17140],{"class":427,"line":831},[425,17141,3030],{"class":701},[425,17143,17144,17146,17148,17150,17153,17155,17158,17160,17163,17165,17168,17170,17173,17175],{"class":427,"line":841},[425,17145,15749],{"class":1155},[425,17147,15752],{"class":691},[425,17149,1603],{"class":1155},[425,17151,17152],{"class":701},"(m_L",[425,17154,1603],{"class":1155},[425,17156,17157],{"class":701},"m_W ",[425,17159,1629],{"class":1155},[425,17161,17162],{"class":701}," m_L",[425,17164,1603],{"class":1155},[425,17166,17167],{"class":701},"m_H ",[425,17169,1629],{"class":1155},[425,17171,17172],{"class":701}," m_W",[425,17174,1603],{"class":1155},[425,17176,17177],{"class":701},"m_H);\n",[425,17179,17180],{"class":427,"line":852},[425,17181,3187],{"class":701},[425,17183,17184,17186,17189],{"class":427,"line":862},[425,17185,2985],{"class":1155},[425,17187,17188],{"class":431}," tiji",[425,17190,2976],{"class":701},[425,17192,17193],{"class":427,"line":878},[425,17194,3030],{"class":701},[425,17196,17197,17199,17201,17203,17206,17208],{"class":427,"line":914},[425,17198,15749],{"class":1155},[425,17200,17162],{"class":701},[425,17202,1603],{"class":1155},[425,17204,17205],{"class":701},"m_W",[425,17207,1603],{"class":1155},[425,17209,17210],{"class":701},"m_H;\n",[425,17212,17213],{"class":427,"line":943},[425,17214,3187],{"class":701},[425,17216,17217],{"class":427,"line":956},[425,17218,17219],{"class":1216},"    \u002F\u002F获取长宽高\n",[425,17221,17222,17224,17227],{"class":427,"line":964},[425,17223,2985],{"class":1155},[425,17225,17226],{"class":431}," getLength",[425,17228,2976],{"class":701},[425,17230,17231],{"class":427,"line":2733},[425,17232,3030],{"class":701},[425,17234,17235,17237],{"class":427,"line":2750},[425,17236,15749],{"class":1155},[425,17238,17239],{"class":701}," m_L;\n",[425,17241,17242],{"class":427,"line":2755},[425,17243,3187],{"class":701},[425,17245,17246,17248,17251],{"class":427,"line":2760},[425,17247,2985],{"class":1155},[425,17249,17250],{"class":431}," getWidth",[425,17252,2976],{"class":701},[425,17254,17255],{"class":427,"line":2765},[425,17256,3030],{"class":701},[425,17258,17259,17261],{"class":427,"line":2779},[425,17260,15749],{"class":1155},[425,17262,17263],{"class":701}," m_W;\n",[425,17265,17266],{"class":427,"line":2784},[425,17267,3187],{"class":701},[425,17269,17270,17272,17275],{"class":427,"line":3577},[425,17271,2985],{"class":1155},[425,17273,17274],{"class":431}," getHeight",[425,17276,2976],{"class":701},[425,17278,17279],{"class":427,"line":3591},[425,17280,3030],{"class":701},[425,17282,17283,17285],{"class":427,"line":3599},[425,17284,15749],{"class":1155},[425,17286,17287],{"class":701}," m_H;\n",[425,17289,17290],{"class":427,"line":3604},[425,17291,3187],{"class":701},[425,17293,17294],{"class":427,"line":3610},[425,17295,17296],{"class":1216},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[425,17298,17299,17302,17305,17307,17310,17312],{"class":427,"line":3616},[425,17300,17301],{"class":1155},"    bool",[425,17303,17304],{"class":431}," isEqual",[425,17306,1159],{"class":701},[425,17308,17309],{"class":431},"Cube",[425,17311,3849],{"class":6216},[425,17313,1165],{"class":701},[425,17315,17316],{"class":427,"line":3621},[425,17317,3030],{"class":701},[425,17319,17320,17322,17325,17328,17330,17332,17335,17337,17340,17343,17345,17347,17350,17352,17354,17357,17359,17361],{"class":427,"line":8948},[425,17321,3497],{"class":1155},[425,17323,17324],{"class":701}," (c.",[425,17326,17327],{"class":431},"getLength",[425,17329,14049],{"class":701},[425,17331,3949],{"class":1155},[425,17333,17334],{"class":701}," m_L ",[425,17336,2717],{"class":1155},[425,17338,17339],{"class":701}," c.",[425,17341,17342],{"class":431},"getWidth",[425,17344,14049],{"class":701},[425,17346,3949],{"class":1155},[425,17348,17349],{"class":701}," m_W ",[425,17351,2717],{"class":1155},[425,17353,17339],{"class":701},[425,17355,17356],{"class":431},"getHeight",[425,17358,14049],{"class":701},[425,17360,3949],{"class":1155},[425,17362,17363],{"class":701}," m_H)\n",[425,17365,17366],{"class":427,"line":8972},[425,17367,3510],{"class":701},[425,17369,17370,17372,17375],{"class":427,"line":8977},[425,17371,16729],{"class":1155},[425,17373,17374],{"class":691}," true",[425,17376,2307],{"class":701},[425,17378,17379],{"class":427,"line":8983},[425,17380,3529],{"class":701},[425,17382,17383],{"class":427,"line":9010},[425,17384,3570],{"class":1155},[425,17386,17387],{"class":427,"line":9015},[425,17388,3510],{"class":701},[425,17390,17391,17393,17396],{"class":427,"line":9021},[425,17392,16729],{"class":1155},[425,17394,17395],{"class":691}," false",[425,17397,2307],{"class":701},[425,17399,17400],{"class":427,"line":9033},[425,17401,3529],{"class":701},[425,17403,17404],{"class":427,"line":9045},[425,17405,3187],{"class":701},[425,17407,17408],{"class":427,"line":9057},[425,17409,17410],{"class":1216},"    \u002F\u002F私有属性\n",[425,17412,17413],{"class":427,"line":10715},[425,17414,16219],{"class":1155},[425,17416,17417,17419],{"class":427,"line":10740},[425,17418,2985],{"class":1155},[425,17420,17239],{"class":701},[425,17422,17423,17425],{"class":427,"line":10763},[425,17424,2985],{"class":1155},[425,17426,17263],{"class":701},[425,17428,17429,17431],{"class":427,"line":10787},[425,17430,2985],{"class":1155},[425,17432,17287],{"class":701},[425,17434,17435],{"class":427,"line":10792},[425,17436,3400],{"emptyLinePlaceholder":1084},[425,17438,17439],{"class":427,"line":10797},[425,17440,4995],{"class":701},[425,17442,17443],{"class":427,"line":10802},[425,17444,17445],{"class":1216},"\u002F\u002F全局函数判断两个立方体是否相等\n",[425,17447,17448,17450,17452,17454,17456,17459,17461,17463,17466],{"class":427,"line":10811},[425,17449,2368],{"class":1155},[425,17451,17304],{"class":431},[425,17453,1159],{"class":701},[425,17455,17309],{"class":431},[425,17457,17458],{"class":6216}," c1",[425,17460,1527],{"class":701},[425,17462,17309],{"class":431},[425,17464,17465],{"class":6216}," c2",[425,17467,1165],{"class":701},[425,17469,17470],{"class":427,"line":10816},[425,17471,2559],{"class":701},[425,17473,17474,17476,17479,17481,17483,17485,17488,17490,17493,17495,17497,17499,17501,17503,17505,17507,17509,17511,17513,17515,17517,17519,17521,17523],{"class":427,"line":10822},[425,17475,5090],{"class":1155},[425,17477,17478],{"class":701}," (c1.",[425,17480,17327],{"class":431},[425,17482,14049],{"class":701},[425,17484,3949],{"class":1155},[425,17486,17487],{"class":701}," c2.",[425,17489,17327],{"class":431},[425,17491,17492],{"class":701},"()) ",[425,17494,2717],{"class":1155},[425,17496,17478],{"class":701},[425,17498,17342],{"class":431},[425,17500,14049],{"class":701},[425,17502,3949],{"class":1155},[425,17504,17487],{"class":701},[425,17506,17342],{"class":431},[425,17508,17492],{"class":701},[425,17510,2717],{"class":1155},[425,17512,17478],{"class":701},[425,17514,17356],{"class":431},[425,17516,14049],{"class":701},[425,17518,3949],{"class":1155},[425,17520,17487],{"class":701},[425,17522,17356],{"class":431},[425,17524,17525],{"class":701},"());\n",[425,17527,17528],{"class":427,"line":10843},[425,17529,2578],{"class":701},[425,17531,17532,17534,17536],{"class":427,"line":10849},[425,17533,1162],{"class":1155},[425,17535,2973],{"class":431},[425,17537,2976],{"class":701},[425,17539,17540],{"class":427,"line":10863},[425,17541,2559],{"class":701},[425,17543,17544],{"class":427,"line":10869},[425,17545,17546],{"class":701},"    Cube c1;\n",[425,17548,17549],{"class":427,"line":10896},[425,17550,17551],{"class":1216},"    \u002F\u002F输入立方体的长宽高\n",[425,17553,17554,17556,17558,17561,17563],{"class":427,"line":10905},[425,17555,2564],{"class":701},[425,17557,2190],{"class":1155},[425,17559,17560],{"class":435},"\"请输入第一个立方体的长、宽、高：\"",[425,17562,2190],{"class":1155},[425,17564,2212],{"class":701},[425,17566,17567,17569],{"class":427,"line":10911},[425,17568,2985],{"class":1155},[425,17570,17571],{"class":701}," l,w,h,l1,w1,h1;\n",[425,17573,17574,17576,17578,17580,17582,17584,17586],{"class":427,"line":10919},[425,17575,3012],{"class":701},[425,17577,2443],{"class":1155},[425,17579,1666],{"class":701},[425,17581,2443],{"class":1155},[425,17583,1943],{"class":701},[425,17585,2443],{"class":1155},[425,17587,17124],{"class":701},[425,17589,17590,17593,17596],{"class":427,"line":10924},[425,17591,17592],{"class":701},"    c1.",[425,17594,17595],{"class":431},"setLwh",[425,17597,17598],{"class":701},"(l,w,h);\n",[425,17600,17602],{"class":427,"line":17601},66,[425,17603,17604],{"class":1216},"    \u002F\u002F面积\n",[425,17606,17608,17610,17612,17615,17617,17619,17622,17624,17626],{"class":427,"line":17607},67,[425,17609,2564],{"class":701},[425,17611,2190],{"class":1155},[425,17613,17614],{"class":435},"\"立方体的表面积为：\"",[425,17616,2190],{"class":1155},[425,17618,15827],{"class":701},[425,17620,17621],{"class":431},"mianji",[425,17623,3427],{"class":701},[425,17625,2190],{"class":1155},[425,17627,2212],{"class":701},[425,17629,17631],{"class":427,"line":17630},68,[425,17632,17633],{"class":1216},"    \u002F\u002F体积\n",[425,17635,17637,17639,17641,17644,17646,17648,17651,17653,17655],{"class":427,"line":17636},69,[425,17638,2564],{"class":701},[425,17640,2190],{"class":1155},[425,17642,17643],{"class":435},"\"立方体的体积为：\"",[425,17645,2190],{"class":1155},[425,17647,15827],{"class":701},[425,17649,17650],{"class":431},"tiji",[425,17652,3427],{"class":701},[425,17654,2190],{"class":1155},[425,17656,2212],{"class":701},[425,17658,17660,17662,17664,17667,17669],{"class":427,"line":17659},70,[425,17661,2564],{"class":701},[425,17663,2190],{"class":1155},[425,17665,17666],{"class":435},"\"请输入第二个立方体的长、宽、高：\"",[425,17668,2190],{"class":1155},[425,17670,2212],{"class":701},[425,17672,17674,17676,17678,17681,17683,17686,17688],{"class":427,"line":17673},71,[425,17675,3012],{"class":701},[425,17677,2443],{"class":1155},[425,17679,17680],{"class":701},"l1",[425,17682,2443],{"class":1155},[425,17684,17685],{"class":701},"w1",[425,17687,2443],{"class":1155},[425,17689,17690],{"class":701},"h1;\n",[425,17692,17694],{"class":427,"line":17693},72,[425,17695,17696],{"class":701},"    Cube c2;\n",[425,17698,17700,17703,17705],{"class":427,"line":17699},73,[425,17701,17702],{"class":701},"    c2.",[425,17704,17595],{"class":431},[425,17706,17707],{"class":701},"(l1,w1,h1);\n",[425,17709,17711,17713,17715,17718,17720,17723,17725,17727,17729],{"class":427,"line":17710},74,[425,17712,2564],{"class":701},[425,17714,2190],{"class":1155},[425,17716,17717],{"class":435},"\"第二个立方体的表面积为：\"",[425,17719,2190],{"class":1155},[425,17721,17722],{"class":701},"c2.",[425,17724,17621],{"class":431},[425,17726,3427],{"class":701},[425,17728,2190],{"class":1155},[425,17730,2212],{"class":701},[425,17732,17734,17736,17738,17741,17743,17745,17747,17749,17751],{"class":427,"line":17733},75,[425,17735,2564],{"class":701},[425,17737,2190],{"class":1155},[425,17739,17740],{"class":435},"\"第二个立方体的体积为：\"",[425,17742,2190],{"class":1155},[425,17744,17722],{"class":701},[425,17746,17650],{"class":431},[425,17748,3427],{"class":701},[425,17750,2190],{"class":1155},[425,17752,2212],{"class":701},[425,17754,17756],{"class":427,"line":17755},76,[425,17757,3400],{"emptyLinePlaceholder":1084},[425,17759,17761],{"class":427,"line":17760},77,[425,17762,17763],{"class":1216},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[425,17765,17767,17769,17771,17774,17776],{"class":427,"line":17766},78,[425,17768,2564],{"class":701},[425,17770,2190],{"class":1155},[425,17772,17773],{"class":435},"\"内部函数判断结果：\"",[425,17775,2190],{"class":1155},[425,17777,2212],{"class":701},[425,17779,17781,17783,17785,17788],{"class":427,"line":17780},79,[425,17782,4101],{"class":1155},[425,17784,17478],{"class":701},[425,17786,17787],{"class":431},"isEqual",[425,17789,17790],{"class":701},"(c2))\n",[425,17792,17794],{"class":427,"line":17793},80,[425,17795,3030],{"class":701},[425,17797,17799,17801,17803,17806,17808],{"class":427,"line":17798},81,[425,17800,4451],{"class":701},[425,17802,2190],{"class":1155},[425,17804,17805],{"class":435},"\"两个立方体相等\"",[425,17807,2190],{"class":1155},[425,17809,2212],{"class":701},[425,17811,17813],{"class":427,"line":17812},82,[425,17814,3187],{"class":701},[425,17816,17818],{"class":427,"line":17817},83,[425,17819,17820],{"class":1155},"    else\n",[425,17822,17824],{"class":427,"line":17823},84,[425,17825,3030],{"class":701},[425,17827,17829,17831,17833,17836,17838],{"class":427,"line":17828},85,[425,17830,4451],{"class":701},[425,17832,2190],{"class":1155},[425,17834,17835],{"class":435},"\"两个立方体不相等\"",[425,17837,2190],{"class":1155},[425,17839,2212],{"class":701},[425,17841,17843],{"class":427,"line":17842},86,[425,17844,3187],{"class":701},[425,17846,17848],{"class":427,"line":17847},87,[425,17849,3400],{"emptyLinePlaceholder":1084},[425,17851,17853,17855,17857,17860,17862],{"class":427,"line":17852},88,[425,17854,2564],{"class":701},[425,17856,2190],{"class":1155},[425,17858,17859],{"class":435},"\"全局函数判断结果：\"",[425,17861,2190],{"class":1155},[425,17863,2212],{"class":701},[425,17865,17867,17869,17871,17873],{"class":427,"line":17866},89,[425,17868,4101],{"class":1155},[425,17870,2664],{"class":701},[425,17872,17787],{"class":431},[425,17874,17875],{"class":701},"(c1, c2))\n",[425,17877,17879],{"class":427,"line":17878},90,[425,17880,3030],{"class":701},[425,17882,17884,17886,17888,17890,17892],{"class":427,"line":17883},91,[425,17885,4451],{"class":701},[425,17887,2190],{"class":1155},[425,17889,17805],{"class":435},[425,17891,2190],{"class":1155},[425,17893,2212],{"class":701},[425,17895,17897],{"class":427,"line":17896},92,[425,17898,3187],{"class":701},[425,17900,17902],{"class":427,"line":17901},93,[425,17903,17820],{"class":1155},[425,17905,17907],{"class":427,"line":17906},94,[425,17908,3030],{"class":701},[425,17910,17912,17914,17916,17918,17920],{"class":427,"line":17911},95,[425,17913,4451],{"class":701},[425,17915,2190],{"class":1155},[425,17917,17835],{"class":435},[425,17919,2190],{"class":1155},[425,17921,2212],{"class":701},[425,17923,17925],{"class":427,"line":17924},96,[425,17926,3187],{"class":701},[425,17928,17930],{"class":427,"line":17929},97,[425,17931,2578],{"class":701},[972,17933,17934],{"start":698},[450,17935,17936],{},[400,17937,17938],{},"练习案例2：点和圆的关系",[447,17940,17941],{},[450,17942,17943],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[416,17945,17947],{"className":1146,"code":17946,"language":1148,"meta":395,"style":395},"#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",[422,17948,17949,17955,17965,17972,17979,17983,17987,17992,18026,18031,18047,18061,18065,18069,18076,18083,18087,18093,18097,18101,18105,18127,18150,18155,18169,18184,18188,18192,18198,18203,18208,18212,18238,18242,18272,18300,18328,18345,18349,18362,18366,18370,18374,18387,18391,18395,18403,18407,18411,18415,18420,18424,18435,18442,18451,18461,18472,18479,18492,18503,18513,18524,18531,18545,18550,18560,18568],{"__ignoreMap":395},[425,17950,17951,17953],{"class":427,"line":428},[425,17952,2950],{"class":1155},[425,17954,2953],{"class":435},[425,17956,17957,17959,17961,17963],{"class":427,"line":698},[425,17958,2958],{"class":1155},[425,17960,2961],{"class":1155},[425,17962,2964],{"class":431},[425,17964,2307],{"class":701},[425,17966,17967,17969],{"class":427,"line":710},[425,17968,2950],{"class":1155},[425,17970,17971],{"class":435},"\u003Ccmath>\n",[425,17973,17974,17976],{"class":427,"line":721},[425,17975,15691],{"class":1155},[425,17977,17978],{"class":431}," Point\n",[425,17980,17981],{"class":427,"line":735},[425,17982,2559],{"class":701},[425,17984,17985],{"class":427,"line":743},[425,17986,15713],{"class":1155},[425,17988,17989],{"class":427,"line":751},[425,17990,17991],{"class":1216},"    \u002F\u002F赋值\n",[425,17993,17994,17996,17999,18001,18003,18006,18008,18010,18013,18016,18018,18021,18023],{"class":427,"line":759},[425,17995,15906],{"class":1155},[425,17997,17998],{"class":431}," setPoint",[425,18000,1159],{"class":701},[425,18002,15034],{"class":1155},[425,18004,18005],{"class":6216}," x",[425,18007,13434],{"class":701},[425,18009,15034],{"class":1155},[425,18011,18012],{"class":6216}," y",[425,18014,18015],{"class":701},") { m_x ",[425,18017,1204],{"class":1155},[425,18019,18020],{"class":701}," x; m_y ",[425,18022,1204],{"class":1155},[425,18024,18025],{"class":701}," y; }\n",[425,18027,18028],{"class":427,"line":770},[425,18029,18030],{"class":1216},"    \u002F\u002F获取坐标\n",[425,18032,18033,18035,18038,18041,18044],{"class":427,"line":780},[425,18034,15735],{"class":1155},[425,18036,18037],{"class":431}," getX",[425,18039,18040],{"class":701},"() { ",[425,18042,18043],{"class":1155},"return",[425,18045,18046],{"class":701}," m_x; }\n",[425,18048,18049,18051,18054,18056,18058],{"class":427,"line":790},[425,18050,15735],{"class":1155},[425,18052,18053],{"class":431}," getY",[425,18055,18040],{"class":701},[425,18057,18043],{"class":1155},[425,18059,18060],{"class":701}," m_y; }\n",[425,18062,18063],{"class":427,"line":805},[425,18064,3400],{"emptyLinePlaceholder":1084},[425,18066,18067],{"class":427,"line":818},[425,18068,16219],{"class":1155},[425,18070,18071,18073],{"class":427,"line":831},[425,18072,15735],{"class":1155},[425,18074,18075],{"class":701}," m_x;\n",[425,18077,18078,18080],{"class":427,"line":841},[425,18079,15735],{"class":1155},[425,18081,18082],{"class":701}," m_y;\n",[425,18084,18085],{"class":427,"line":852},[425,18086,4995],{"class":701},[425,18088,18089,18091],{"class":427,"line":862},[425,18090,15691],{"class":1155},[425,18092,15694],{"class":431},[425,18094,18095],{"class":427,"line":878},[425,18096,2559],{"class":701},[425,18098,18099],{"class":427,"line":914},[425,18100,15713],{"class":1155},[425,18102,18103],{"class":427,"line":943},[425,18104,17991],{"class":1216},[425,18106,18107,18109,18112,18114,18116,18119,18122,18124],{"class":427,"line":956},[425,18108,15906],{"class":1155},[425,18110,18111],{"class":431}," setRadius",[425,18113,1159],{"class":701},[425,18115,15034],{"class":1155},[425,18117,18118],{"class":6216}," r",[425,18120,18121],{"class":701},") { m_r ",[425,18123,1204],{"class":1155},[425,18125,18126],{"class":701}," r; }\n",[425,18128,18129,18131,18134,18136,18139,18142,18145,18147],{"class":427,"line":964},[425,18130,15906],{"class":1155},[425,18132,18133],{"class":431}," setCenter",[425,18135,1159],{"class":701},[425,18137,18138],{"class":431},"Point",[425,18140,18141],{"class":6216}," center",[425,18143,18144],{"class":701},") { m_center ",[425,18146,1204],{"class":1155},[425,18148,18149],{"class":701}," center; }\n",[425,18151,18152],{"class":427,"line":2733},[425,18153,18154],{"class":1216},"    \u002F\u002F获取属性\n",[425,18156,18157,18159,18162,18164,18166],{"class":427,"line":2750},[425,18158,15735],{"class":1155},[425,18160,18161],{"class":431}," getRadius",[425,18163,18040],{"class":701},[425,18165,18043],{"class":1155},[425,18167,18168],{"class":701}," m_r; }\n",[425,18170,18171,18174,18177,18179,18181],{"class":427,"line":2755},[425,18172,18173],{"class":431},"    Point",[425,18175,18176],{"class":431}," getCenter",[425,18178,18040],{"class":701},[425,18180,18043],{"class":1155},[425,18182,18183],{"class":701}," m_center; }\n",[425,18185,18186],{"class":427,"line":2760},[425,18187,3400],{"emptyLinePlaceholder":1084},[425,18189,18190],{"class":427,"line":2765},[425,18191,16219],{"class":1155},[425,18193,18194,18196],{"class":427,"line":2779},[425,18195,15735],{"class":1155},[425,18197,15725],{"class":701},[425,18199,18200],{"class":427,"line":2784},[425,18201,18202],{"class":1216},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[425,18204,18205],{"class":427,"line":3577},[425,18206,18207],{"class":701},"    Point m_center;\n",[425,18209,18210],{"class":427,"line":3591},[425,18211,4995],{"class":701},[425,18213,18214,18216,18219,18221,18224,18226,18228,18230,18232,18234,18236],{"class":427,"line":3599},[425,18215,6364],{"class":1155},[425,18217,18218],{"class":431}," isInCircle",[425,18220,1159],{"class":701},[425,18222,18223],{"class":431},"Circle",[425,18225,11583],{"class":1155},[425,18227,1437],{"class":6216},[425,18229,1527],{"class":701},[425,18231,18138],{"class":431},[425,18233,11583],{"class":1155},[425,18235,19],{"class":6216},[425,18237,1165],{"class":701},[425,18239,18240],{"class":427,"line":3604},[425,18241,2559],{"class":701},[425,18243,18244,18246,18249,18251,18253,18256,18259,18262,18264,18266,18268,18270],{"class":427,"line":3610},[425,18245,15735],{"class":1155},[425,18247,18248],{"class":701}," dx ",[425,18250,1204],{"class":1155},[425,18252,17339],{"class":701},[425,18254,18255],{"class":431},"getCenter",[425,18257,18258],{"class":701},"().",[425,18260,18261],{"class":431},"getX",[425,18263,14049],{"class":701},[425,18265,1680],{"class":1155},[425,18267,16885],{"class":701},[425,18269,18261],{"class":431},[425,18271,6636],{"class":701},[425,18273,18274,18276,18279,18281,18283,18285,18287,18290,18292,18294,18296,18298],{"class":427,"line":3616},[425,18275,15735],{"class":1155},[425,18277,18278],{"class":701}," dy ",[425,18280,1204],{"class":1155},[425,18282,17339],{"class":701},[425,18284,18255],{"class":431},[425,18286,18258],{"class":701},[425,18288,18289],{"class":431},"getY",[425,18291,14049],{"class":701},[425,18293,1680],{"class":1155},[425,18295,16885],{"class":701},[425,18297,18289],{"class":431},[425,18299,6636],{"class":701},[425,18301,18302,18304,18307,18309,18312,18315,18317,18319,18321,18323,18325],{"class":427,"line":3621},[425,18303,15735],{"class":1155},[425,18305,18306],{"class":701}," distance ",[425,18308,1204],{"class":1155},[425,18310,18311],{"class":431}," sqrt",[425,18313,18314],{"class":701},"(dx ",[425,18316,1603],{"class":1155},[425,18318,18248],{"class":701},[425,18320,1629],{"class":1155},[425,18322,18278],{"class":701},[425,18324,1603],{"class":1155},[425,18326,18327],{"class":701}," dy);\n",[425,18329,18330,18332,18335,18337,18339,18342],{"class":427,"line":8948},[425,18331,4101],{"class":1155},[425,18333,18334],{"class":701}," (distance ",[425,18336,2057],{"class":1155},[425,18338,17339],{"class":701},[425,18340,18341],{"class":431},"getRadius",[425,18343,18344],{"class":701},"())\n",[425,18346,18347],{"class":427,"line":8972},[425,18348,3030],{"class":701},[425,18350,18351,18353,18355,18358,18360],{"class":427,"line":8977},[425,18352,10668],{"class":701},[425,18354,2190],{"class":1155},[425,18356,18357],{"class":435}," \"点在圆内\"",[425,18359,2458],{"class":1155},[425,18361,9840],{"class":701},[425,18363,18364],{"class":427,"line":8983},[425,18365,3187],{"class":701},[425,18367,18368],{"class":427,"line":9010},[425,18369,17820],{"class":1155},[425,18371,18372],{"class":427,"line":9015},[425,18373,3030],{"class":701},[425,18375,18376,18378,18380,18383,18385],{"class":427,"line":9021},[425,18377,10668],{"class":701},[425,18379,2190],{"class":1155},[425,18381,18382],{"class":435}," \"点在圆外\"",[425,18384,2458],{"class":1155},[425,18386,9840],{"class":701},[425,18388,18389],{"class":427,"line":9033},[425,18390,3187],{"class":701},[425,18392,18393],{"class":427,"line":9045},[425,18394,2578],{"class":701},[425,18396,18397,18399,18401],{"class":427,"line":9057},[425,18398,1162],{"class":1155},[425,18400,2973],{"class":431},[425,18402,2976],{"class":701},[425,18404,18405],{"class":427,"line":10715},[425,18406,2559],{"class":701},[425,18408,18409],{"class":427,"line":10740},[425,18410,16050],{"class":1216},[425,18412,18413],{"class":427,"line":10763},[425,18414,15797],{"class":701},[425,18416,18417],{"class":427,"line":10787},[425,18418,18419],{"class":701},"    Point p1;\n",[425,18421,18422],{"class":427,"line":10792},[425,18423,17991],{"class":1216},[425,18425,18426,18428,18430,18433],{"class":427,"line":10797},[425,18427,2564],{"class":701},[425,18429,2190],{"class":1155},[425,18431,18432],{"class":435},"\"请输入圆的半径：\"",[425,18434,2307],{"class":701},[425,18436,18437,18439],{"class":427,"line":10802},[425,18438,15735],{"class":1155},[425,18440,18441],{"class":701}," r;\n",[425,18443,18444,18446,18448],{"class":427,"line":10811},[425,18445,3012],{"class":701},[425,18447,2443],{"class":1155},[425,18449,18450],{"class":701},"r;\n",[425,18452,18453,18455,18458],{"class":427,"line":10816},[425,18454,17592],{"class":701},[425,18456,18457],{"class":431},"setRadius",[425,18459,18460],{"class":701},"(r);\n",[425,18462,18463,18465,18467,18470],{"class":427,"line":10822},[425,18464,2564],{"class":701},[425,18466,2190],{"class":1155},[425,18468,18469],{"class":435},"\"请输入圆心坐标：\"",[425,18471,2307],{"class":701},[425,18473,18474,18476],{"class":427,"line":10843},[425,18475,15735],{"class":1155},[425,18477,18478],{"class":701}," x, y;\n",[425,18480,18481,18483,18485,18487,18489],{"class":427,"line":10849},[425,18482,3012],{"class":701},[425,18484,2443],{"class":1155},[425,18486,1968],{"class":701},[425,18488,2443],{"class":1155},[425,18490,18491],{"class":701},"y;\n",[425,18493,18494,18497,18500],{"class":427,"line":10863},[425,18495,18496],{"class":701},"    p1.",[425,18498,18499],{"class":431},"setPoint",[425,18501,18502],{"class":701},"(x, y);\n",[425,18504,18505,18507,18510],{"class":427,"line":10869},[425,18506,17592],{"class":701},[425,18508,18509],{"class":431},"setCenter",[425,18511,18512],{"class":701},"(p1);\n",[425,18514,18515,18517,18519,18522],{"class":427,"line":10896},[425,18516,2564],{"class":701},[425,18518,2190],{"class":1155},[425,18520,18521],{"class":435},"\"请输入测试点坐标：\"",[425,18523,2307],{"class":701},[425,18525,18526,18528],{"class":427,"line":10905},[425,18527,15735],{"class":1155},[425,18529,18530],{"class":701}," x1, y1;\n",[425,18532,18533,18535,18537,18540,18542],{"class":427,"line":10911},[425,18534,3012],{"class":701},[425,18536,2443],{"class":1155},[425,18538,18539],{"class":701},"x1",[425,18541,2443],{"class":1155},[425,18543,18544],{"class":701},"y1;\n",[425,18546,18547],{"class":427,"line":10919},[425,18548,18549],{"class":701},"    Point p2;\n",[425,18551,18552,18555,18557],{"class":427,"line":10924},[425,18553,18554],{"class":701},"    p2.",[425,18556,18499],{"class":431},[425,18558,18559],{"class":701},"(x1, y1);\n",[425,18561,18562,18565],{"class":427,"line":17601},[425,18563,18564],{"class":431},"    isInCircle",[425,18566,18567],{"class":701},"(c1, p2);\n",[425,18569,18570],{"class":427,"line":17607},[425,18571,2578],{"class":701},[19,18573,18574],{},"在类中可以让另一个类作为本来的成员",[19,18576,18577],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,18579,18580],{},"创建point.h",[416,18582,18584],{"className":1146,"code":18583,"language":1148,"meta":395,"style":395},"#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",[422,18585,18586,18597,18603,18613,18619,18623,18628,18632,18636,18656,18660,18668,18676,18680,18684,18690,18696],{"__ignoreMap":395},[425,18587,18588,18591,18594],{"class":427,"line":428},[425,18589,18590],{"class":1155},"#pragma",[425,18592,18593],{"class":431}," once",[425,18595,18596],{"class":1216}," \u002F\u002F防止头文件重复包含\n",[425,18598,18599,18601],{"class":427,"line":698},[425,18600,2950],{"class":1155},[425,18602,2953],{"class":435},[425,18604,18605,18607,18609,18611],{"class":427,"line":710},[425,18606,2958],{"class":1155},[425,18608,2961],{"class":1155},[425,18610,2964],{"class":431},[425,18612,2307],{"class":701},[425,18614,18615,18617],{"class":427,"line":721},[425,18616,15691],{"class":1155},[425,18618,17978],{"class":431},[425,18620,18621],{"class":427,"line":735},[425,18622,2559],{"class":701},[425,18624,18625],{"class":427,"line":743},[425,18626,18627],{"class":1216},"\u002F\u002F做好声明与变量定义就可以\n",[425,18629,18630],{"class":427,"line":751},[425,18631,15713],{"class":1155},[425,18633,18634],{"class":427,"line":759},[425,18635,17991],{"class":1216},[425,18637,18638,18640,18642,18644,18646,18648,18650,18652,18654],{"class":427,"line":770},[425,18639,15906],{"class":1155},[425,18641,17998],{"class":431},[425,18643,1159],{"class":701},[425,18645,15034],{"class":1155},[425,18647,18005],{"class":6216},[425,18649,13434],{"class":701},[425,18651,15034],{"class":1155},[425,18653,18012],{"class":6216},[425,18655,3719],{"class":701},[425,18657,18658],{"class":427,"line":780},[425,18659,18030],{"class":1216},[425,18661,18662,18664,18666],{"class":427,"line":790},[425,18663,15735],{"class":1155},[425,18665,18037],{"class":431},[425,18667,6636],{"class":701},[425,18669,18670,18672,18674],{"class":427,"line":805},[425,18671,15735],{"class":1155},[425,18673,18053],{"class":431},[425,18675,6636],{"class":701},[425,18677,18678],{"class":427,"line":818},[425,18679,3400],{"emptyLinePlaceholder":1084},[425,18681,18682],{"class":427,"line":831},[425,18683,16219],{"class":1155},[425,18685,18686,18688],{"class":427,"line":841},[425,18687,15735],{"class":1155},[425,18689,18075],{"class":701},[425,18691,18692,18694],{"class":427,"line":852},[425,18693,15735],{"class":1155},[425,18695,18082],{"class":701},[425,18697,18698],{"class":427,"line":862},[425,18699,4995],{"class":701},[19,18701,18702],{},"创建point.cpp",[416,18704,18706],{"className":1146,"code":18705,"language":1148,"meta":395,"style":395},"#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",[422,18707,18708,18715,18720,18754,18758,18774],{"__ignoreMap":395},[425,18709,18710,18712],{"class":427,"line":428},[425,18711,2950],{"class":1155},[425,18713,18714],{"class":435},"\u003Cpoint.h>\n",[425,18716,18717],{"class":427,"line":698},[425,18718,18719],{"class":1216},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[425,18721,18722,18724,18727,18730,18732,18734,18736,18738,18740,18742,18744,18746,18748,18750,18752],{"class":427,"line":710},[425,18723,15906],{"class":1155},[425,18725,18726],{"class":431}," Point",[425,18728,18729],{"class":701},"::",[425,18731,18499],{"class":431},[425,18733,1159],{"class":701},[425,18735,15034],{"class":1155},[425,18737,18005],{"class":6216},[425,18739,13434],{"class":701},[425,18741,15034],{"class":1155},[425,18743,18012],{"class":6216},[425,18745,18015],{"class":701},[425,18747,1204],{"class":1155},[425,18749,18020],{"class":701},[425,18751,1204],{"class":1155},[425,18753,18025],{"class":701},[425,18755,18756],{"class":427,"line":721},[425,18757,18030],{"class":1216},[425,18759,18760,18762,18764,18766,18768,18770,18772],{"class":427,"line":735},[425,18761,15735],{"class":1155},[425,18763,18726],{"class":431},[425,18765,18729],{"class":701},[425,18767,18261],{"class":431},[425,18769,18040],{"class":701},[425,18771,18043],{"class":1155},[425,18773,18046],{"class":701},[425,18775,18776,18778,18780,18782,18784,18786,18788],{"class":427,"line":743},[425,18777,15735],{"class":1155},[425,18779,18726],{"class":431},[425,18781,18729],{"class":701},[425,18783,18289],{"class":431},[425,18785,18040],{"class":701},[425,18787,18043],{"class":1155},[425,18789,18060],{"class":701},[19,18791,18792],{},"创建circle.h",[416,18794,18796],{"className":1146,"code":18795,"language":1148,"meta":395,"style":395},"#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",[422,18797,18798,18805,18811,18821,18827,18833,18837,18841,18845,18859,18873,18877,18885,18893,18897,18901,18907,18911,18915],{"__ignoreMap":395},[425,18799,18800,18802],{"class":427,"line":428},[425,18801,18590],{"class":1155},[425,18803,18804],{"class":431}," once\n",[425,18806,18807,18809],{"class":427,"line":698},[425,18808,2950],{"class":1155},[425,18810,2953],{"class":435},[425,18812,18813,18815,18817,18819],{"class":427,"line":710},[425,18814,2958],{"class":1155},[425,18816,2961],{"class":1155},[425,18818,2964],{"class":431},[425,18820,2307],{"class":701},[425,18822,18823,18825],{"class":427,"line":721},[425,18824,2950],{"class":1155},[425,18826,18714],{"class":435},[425,18828,18829,18831],{"class":427,"line":735},[425,18830,15691],{"class":1155},[425,18832,15694],{"class":431},[425,18834,18835],{"class":427,"line":743},[425,18836,2559],{"class":701},[425,18838,18839],{"class":427,"line":751},[425,18840,15713],{"class":1155},[425,18842,18843],{"class":427,"line":759},[425,18844,17991],{"class":1216},[425,18846,18847,18849,18851,18853,18855,18857],{"class":427,"line":770},[425,18848,15906],{"class":1155},[425,18850,18111],{"class":431},[425,18852,1159],{"class":701},[425,18854,15034],{"class":1155},[425,18856,18118],{"class":6216},[425,18858,3719],{"class":701},[425,18860,18861,18863,18865,18867,18869,18871],{"class":427,"line":780},[425,18862,15906],{"class":1155},[425,18864,18133],{"class":431},[425,18866,1159],{"class":701},[425,18868,18138],{"class":431},[425,18870,18141],{"class":6216},[425,18872,3719],{"class":701},[425,18874,18875],{"class":427,"line":790},[425,18876,18154],{"class":1216},[425,18878,18879,18881,18883],{"class":427,"line":805},[425,18880,15735],{"class":1155},[425,18882,18161],{"class":431},[425,18884,6636],{"class":701},[425,18886,18887,18889,18891],{"class":427,"line":818},[425,18888,18173],{"class":431},[425,18890,18176],{"class":431},[425,18892,6636],{"class":701},[425,18894,18895],{"class":427,"line":831},[425,18896,3400],{"emptyLinePlaceholder":1084},[425,18898,18899],{"class":427,"line":841},[425,18900,16219],{"class":1155},[425,18902,18903,18905],{"class":427,"line":852},[425,18904,15735],{"class":1155},[425,18906,15725],{"class":701},[425,18908,18909],{"class":427,"line":862},[425,18910,18202],{"class":1216},[425,18912,18913],{"class":427,"line":878},[425,18914,18207],{"class":701},[425,18916,18917],{"class":427,"line":914},[425,18918,4995],{"class":701},[19,18920,18921],{},"创建circle.cpp",[416,18923,18925],{"className":1146,"code":18924,"language":1148,"meta":395,"style":395},"#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",[422,18926,18927,18934,18957,18979,18984,19000],{"__ignoreMap":395},[425,18928,18929,18931],{"class":427,"line":428},[425,18930,2950],{"class":1155},[425,18932,18933],{"class":435},"\u003Ccircle.h>\n",[425,18935,18936,18938,18941,18943,18945,18947,18949,18951,18953,18955],{"class":427,"line":698},[425,18937,6364],{"class":1155},[425,18939,18940],{"class":431}," Circle",[425,18942,18729],{"class":701},[425,18944,18457],{"class":431},[425,18946,1159],{"class":701},[425,18948,15034],{"class":1155},[425,18950,18118],{"class":6216},[425,18952,18121],{"class":701},[425,18954,1204],{"class":1155},[425,18956,18126],{"class":701},[425,18958,18959,18961,18963,18965,18967,18969,18971,18973,18975,18977],{"class":427,"line":710},[425,18960,6364],{"class":1155},[425,18962,18940],{"class":431},[425,18964,18729],{"class":701},[425,18966,18509],{"class":431},[425,18968,1159],{"class":701},[425,18970,18138],{"class":431},[425,18972,18141],{"class":6216},[425,18974,18144],{"class":701},[425,18976,1204],{"class":1155},[425,18978,18149],{"class":701},[425,18980,18981],{"class":427,"line":721},[425,18982,18983],{"class":1216},"\u002F\u002F获取属性\n",[425,18985,18986,18988,18990,18992,18994,18996,18998],{"class":427,"line":735},[425,18987,15034],{"class":1155},[425,18989,18940],{"class":431},[425,18991,18729],{"class":701},[425,18993,18341],{"class":431},[425,18995,18040],{"class":701},[425,18997,18043],{"class":1155},[425,18999,18168],{"class":701},[425,19001,19002,19004,19006,19008,19010,19012,19014],{"class":427,"line":743},[425,19003,18138],{"class":431},[425,19005,18940],{"class":431},[425,19007,18729],{"class":701},[425,19009,18255],{"class":431},[425,19011,18040],{"class":701},[425,19013,18043],{"class":1155},[425,19015,18183],{"class":701},[19,19017,19018],{},"使用封装的类",[416,19020,19022],{"className":1146,"code":19021,"language":1148,"meta":395,"style":395},"#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",[422,19023,19024,19030,19040,19046,19052,19076,19080,19106,19132,19156,19170,19174,19186,19190,19194,19198,19210,19214,19218,19226,19230,19234,19238,19242,19246,19256,19262,19270,19278,19288,19294,19306,19314,19322,19332,19338,19350,19354,19362,19368],{"__ignoreMap":395},[425,19025,19026,19028],{"class":427,"line":428},[425,19027,2950],{"class":1155},[425,19029,2953],{"class":435},[425,19031,19032,19034,19036,19038],{"class":427,"line":698},[425,19033,2958],{"class":1155},[425,19035,2961],{"class":1155},[425,19037,2964],{"class":431},[425,19039,2307],{"class":701},[425,19041,19042,19044],{"class":427,"line":710},[425,19043,2950],{"class":1155},[425,19045,18933],{"class":435},[425,19047,19048,19050],{"class":427,"line":721},[425,19049,2950],{"class":1155},[425,19051,18714],{"class":435},[425,19053,19054,19056,19058,19060,19062,19064,19066,19068,19070,19072,19074],{"class":427,"line":735},[425,19055,6364],{"class":1155},[425,19057,18218],{"class":431},[425,19059,1159],{"class":701},[425,19061,18223],{"class":431},[425,19063,11583],{"class":1155},[425,19065,1437],{"class":6216},[425,19067,1527],{"class":701},[425,19069,18138],{"class":431},[425,19071,11583],{"class":1155},[425,19073,19],{"class":6216},[425,19075,1165],{"class":701},[425,19077,19078],{"class":427,"line":743},[425,19079,2559],{"class":701},[425,19081,19082,19084,19086,19088,19090,19092,19094,19096,19098,19100,19102,19104],{"class":427,"line":751},[425,19083,15735],{"class":1155},[425,19085,18248],{"class":701},[425,19087,1204],{"class":1155},[425,19089,17339],{"class":701},[425,19091,18255],{"class":431},[425,19093,18258],{"class":701},[425,19095,18261],{"class":431},[425,19097,14049],{"class":701},[425,19099,1680],{"class":1155},[425,19101,16885],{"class":701},[425,19103,18261],{"class":431},[425,19105,6636],{"class":701},[425,19107,19108,19110,19112,19114,19116,19118,19120,19122,19124,19126,19128,19130],{"class":427,"line":759},[425,19109,15735],{"class":1155},[425,19111,18278],{"class":701},[425,19113,1204],{"class":1155},[425,19115,17339],{"class":701},[425,19117,18255],{"class":431},[425,19119,18258],{"class":701},[425,19121,18289],{"class":431},[425,19123,14049],{"class":701},[425,19125,1680],{"class":1155},[425,19127,16885],{"class":701},[425,19129,18289],{"class":431},[425,19131,6636],{"class":701},[425,19133,19134,19136,19138,19140,19142,19144,19146,19148,19150,19152,19154],{"class":427,"line":770},[425,19135,15735],{"class":1155},[425,19137,18306],{"class":701},[425,19139,1204],{"class":1155},[425,19141,18311],{"class":431},[425,19143,18314],{"class":701},[425,19145,1603],{"class":1155},[425,19147,18248],{"class":701},[425,19149,1629],{"class":1155},[425,19151,18278],{"class":701},[425,19153,1603],{"class":1155},[425,19155,18327],{"class":701},[425,19157,19158,19160,19162,19164,19166,19168],{"class":427,"line":780},[425,19159,4101],{"class":1155},[425,19161,18334],{"class":701},[425,19163,2057],{"class":1155},[425,19165,17339],{"class":701},[425,19167,18341],{"class":431},[425,19169,18344],{"class":701},[425,19171,19172],{"class":427,"line":790},[425,19173,3030],{"class":701},[425,19175,19176,19178,19180,19182,19184],{"class":427,"line":805},[425,19177,10668],{"class":701},[425,19179,2190],{"class":1155},[425,19181,18357],{"class":435},[425,19183,2458],{"class":1155},[425,19185,9840],{"class":701},[425,19187,19188],{"class":427,"line":818},[425,19189,3187],{"class":701},[425,19191,19192],{"class":427,"line":831},[425,19193,17820],{"class":1155},[425,19195,19196],{"class":427,"line":841},[425,19197,3030],{"class":701},[425,19199,19200,19202,19204,19206,19208],{"class":427,"line":852},[425,19201,10668],{"class":701},[425,19203,2190],{"class":1155},[425,19205,18382],{"class":435},[425,19207,2458],{"class":1155},[425,19209,9840],{"class":701},[425,19211,19212],{"class":427,"line":862},[425,19213,3187],{"class":701},[425,19215,19216],{"class":427,"line":878},[425,19217,2578],{"class":701},[425,19219,19220,19222,19224],{"class":427,"line":914},[425,19221,1162],{"class":1155},[425,19223,2973],{"class":431},[425,19225,2976],{"class":701},[425,19227,19228],{"class":427,"line":943},[425,19229,2559],{"class":701},[425,19231,19232],{"class":427,"line":956},[425,19233,16050],{"class":1216},[425,19235,19236],{"class":427,"line":964},[425,19237,15797],{"class":701},[425,19239,19240],{"class":427,"line":2733},[425,19241,18419],{"class":701},[425,19243,19244],{"class":427,"line":2750},[425,19245,17991],{"class":1216},[425,19247,19248,19250,19252,19254],{"class":427,"line":2755},[425,19249,2564],{"class":701},[425,19251,2190],{"class":1155},[425,19253,18432],{"class":435},[425,19255,2307],{"class":701},[425,19257,19258,19260],{"class":427,"line":2760},[425,19259,15735],{"class":1155},[425,19261,18441],{"class":701},[425,19263,19264,19266,19268],{"class":427,"line":2765},[425,19265,3012],{"class":701},[425,19267,2443],{"class":1155},[425,19269,18450],{"class":701},[425,19271,19272,19274,19276],{"class":427,"line":2779},[425,19273,17592],{"class":701},[425,19275,18457],{"class":431},[425,19277,18460],{"class":701},[425,19279,19280,19282,19284,19286],{"class":427,"line":2784},[425,19281,2564],{"class":701},[425,19283,2190],{"class":1155},[425,19285,18469],{"class":435},[425,19287,2307],{"class":701},[425,19289,19290,19292],{"class":427,"line":3577},[425,19291,15735],{"class":1155},[425,19293,18478],{"class":701},[425,19295,19296,19298,19300,19302,19304],{"class":427,"line":3591},[425,19297,3012],{"class":701},[425,19299,2443],{"class":1155},[425,19301,1968],{"class":701},[425,19303,2443],{"class":1155},[425,19305,18491],{"class":701},[425,19307,19308,19310,19312],{"class":427,"line":3599},[425,19309,18496],{"class":701},[425,19311,18499],{"class":431},[425,19313,18502],{"class":701},[425,19315,19316,19318,19320],{"class":427,"line":3604},[425,19317,17592],{"class":701},[425,19319,18509],{"class":431},[425,19321,18512],{"class":701},[425,19323,19324,19326,19328,19330],{"class":427,"line":3610},[425,19325,2564],{"class":701},[425,19327,2190],{"class":1155},[425,19329,18521],{"class":435},[425,19331,2307],{"class":701},[425,19333,19334,19336],{"class":427,"line":3616},[425,19335,15735],{"class":1155},[425,19337,18530],{"class":701},[425,19339,19340,19342,19344,19346,19348],{"class":427,"line":3621},[425,19341,3012],{"class":701},[425,19343,2443],{"class":1155},[425,19345,18539],{"class":701},[425,19347,2443],{"class":1155},[425,19349,18544],{"class":701},[425,19351,19352],{"class":427,"line":8948},[425,19353,18549],{"class":701},[425,19355,19356,19358,19360],{"class":427,"line":8972},[425,19357,18554],{"class":701},[425,19359,18499],{"class":431},[425,19361,18559],{"class":701},[425,19363,19364,19366],{"class":427,"line":8977},[425,19365,18564],{"class":431},[425,19367,18567],{"class":701},[425,19369,19370],{"class":427,"line":8983},[425,19371,2578],{"class":701},[1099,19373,19375],{"id":19374},"_82对象的初始化清理","8.2对象的初始化清理",[447,19377,19378,19381],{},[450,19379,19380],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[450,19382,19383],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[14,19385,19387],{"id":19386},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,19389,19390,19391,19394],{},"对象的",[400,19392,19393],{},"初始化和清理","也是两个非常重要的安全问题",[19,19396,19397],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,19399,19400],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,19402,19403,19404,19407,19408,19411],{},"c++利用了",[400,19405,19406],{},"构造函数","和",[400,19409,19410],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,19413,19414,19415],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[400,19416,19417],{},"我们不提供构造和析构，编译器会提供",[19,19419,19420],{},[400,19421,19422],{},"编译器提供的构造函数和析构函数是空实现。",[447,19424,19425,19428],{},[450,19426,19427],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[450,19429,19430,19431,19434],{},"析构函数：主要作用在于对象",[400,19432,19433],{},"销毁前","系统自动调用，执行一些清理工作。",[19,19436,19437,19440],{},[400,19438,19439],{},"构造函数语法：",[422,19441,19442],{},"类名(){}",[972,19444,19445,19448,19451,19454,19457],{},[450,19446,19447],{},"构造函数，没有返回值也不写void",[450,19449,19450],{},"函数名称与类名相同",[450,19452,19453],{},"构造函数可以有参数，因此可以发生重载",[450,19455,19456],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[450,19458,19459,19460,895],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[422,19461,19462],{},"Person(){}",[19,19464,19465,978,19468],{},[400,19466,19467],{},"析构函数语法：",[422,19469,19470],{},"~类名(){}",[972,19472,19473,19476,19479,19485],{},[450,19474,19475],{},"析构函数，没有返回值也不写void",[450,19477,19478],{},"函数名称与类名相同,在名称前加上符号  ~",[450,19480,19481,19482],{},"析构函数不可以有参数，因此",[400,19483,19484],{},"不可以发生重载",[450,19486,19487],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[416,19489,19491],{"className":1146,"code":19490,"language":1148,"meta":395,"style":395},"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",[422,19492,19493,19499,19503,19507,19512,19519,19523,19536,19540,19545,19552,19556,19569,19573,19577,19581,19585,19593,19597,19605,19609,19613,19621,19625,19630,19634,19641,19645,19658,19662,19670],{"__ignoreMap":395},[425,19494,19495,19497],{"class":427,"line":428},[425,19496,15691],{"class":1155},[425,19498,16168],{"class":431},[425,19500,19501],{"class":427,"line":698},[425,19502,2559],{"class":701},[425,19504,19505],{"class":427,"line":710},[425,19506,15713],{"class":1155},[425,19508,19509],{"class":427,"line":721},[425,19510,19511],{"class":1216},"    \u002F\u002F构造函数\n",[425,19513,19514,19517],{"class":427,"line":735},[425,19515,19516],{"class":431},"    Person",[425,19518,2976],{"class":701},[425,19520,19521],{"class":427,"line":743},[425,19522,3030],{"class":701},[425,19524,19525,19527,19529,19532,19534],{"class":427,"line":751},[425,19526,10668],{"class":701},[425,19528,2190],{"class":1155},[425,19530,19531],{"class":435}," \"Person的构造函数调用\"",[425,19533,2458],{"class":1155},[425,19535,9840],{"class":701},[425,19537,19538],{"class":427,"line":759},[425,19539,3187],{"class":701},[425,19541,19542],{"class":427,"line":770},[425,19543,19544],{"class":1216},"    \u002F\u002F析构函数\n",[425,19546,19547,19550],{"class":427,"line":780},[425,19548,19549],{"class":431},"    ~Person",[425,19551,2976],{"class":701},[425,19553,19554],{"class":427,"line":790},[425,19555,3030],{"class":701},[425,19557,19558,19560,19562,19565,19567],{"class":427,"line":805},[425,19559,10668],{"class":701},[425,19561,2190],{"class":1155},[425,19563,19564],{"class":435}," \"Person的析构函数调用\"",[425,19566,2458],{"class":1155},[425,19568,9840],{"class":701},[425,19570,19571],{"class":427,"line":818},[425,19572,3187],{"class":701},[425,19574,19575],{"class":427,"line":831},[425,19576,3400],{"emptyLinePlaceholder":1084},[425,19578,19579],{"class":427,"line":841},[425,19580,4995],{"class":701},[425,19582,19583],{"class":427,"line":852},[425,19584,3400],{"emptyLinePlaceholder":1084},[425,19586,19587,19589,19591],{"class":427,"line":862},[425,19588,6364],{"class":1155},[425,19590,6588],{"class":431},[425,19592,2976],{"class":701},[425,19594,19595],{"class":427,"line":878},[425,19596,2559],{"class":701},[425,19598,19599,19602],{"class":427,"line":914},[425,19600,19601],{"class":701},"    Person p;",[425,19603,19604],{"class":1216},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[425,19606,19607],{"class":427,"line":943},[425,19608,2578],{"class":701},[425,19610,19611],{"class":427,"line":956},[425,19612,3400],{"emptyLinePlaceholder":1084},[425,19614,19615,19617,19619],{"class":427,"line":964},[425,19616,1162],{"class":1155},[425,19618,2973],{"class":431},[425,19620,11852],{"class":701},[425,19622,19623],{"class":427,"line":2733},[425,19624,14209],{"class":701},[425,19626,19627],{"class":427,"line":2750},[425,19628,19629],{"class":1216},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[425,19631,19632],{"class":427,"line":2755},[425,19633,3400],{"emptyLinePlaceholder":1084},[425,19635,19636,19638],{"class":427,"line":2760},[425,19637,19601],{"class":701},[425,19639,19640],{"class":1216},"\u002F\u002F只有构造函数\n",[425,19642,19643],{"class":427,"line":2765},[425,19644,3400],{"emptyLinePlaceholder":1084},[425,19646,19647,19649,19651,19653,19655],{"class":427,"line":2779},[425,19648,3303],{"class":431},[425,19650,1159],{"class":701},[425,19652,3308],{"class":435},[425,19654,6966],{"class":701},[425,19656,19657],{"class":1216},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[425,19659,19660],{"class":427,"line":2784},[425,19661,3400],{"emptyLinePlaceholder":1084},[425,19663,19664,19666,19668],{"class":427,"line":3577},[425,19665,5090],{"class":1155},[425,19667,5093],{"class":691},[425,19669,2307],{"class":701},[425,19671,19672],{"class":427,"line":3591},[425,19673,2578],{"class":701},[19,19675,19676],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[14,19678,19680],{"id":19679},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,19682,19683],{},"两种分类方式：",[19,19685,19686],{},"​\t按参数分为： 有参构造和无参构造",[19,19688,19689],{},"​\t按类型分为： 普通构造和拷贝构造",[19,19691,19692],{},"三种调用方式：",[19,19694,19695],{},"​\t括号法",[19,19697,19698],{},"​\t显示法",[19,19700,19701],{},"​\t隐式转换法",[416,19703,19705],{"className":1146,"code":19704,"language":1148,"meta":395,"style":395},"#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",[422,19706,19707,19713,19723,19728,19733,19738,19743,19747,19755,19759,19763,19767,19773,19777,19790,19794,19806,19810,19819,19832,19836,19840,19846,19850,19863,19867,19872,19888,19892,19897,19906,19919,19923,19929,19933,19938,19946,19950,19955,19959,19967,19971,19976,19981,19986,19991,19996,20000,20005,20010,20015,20020,20024,20029,20034,20050,20062,20067,20071,20076,20081,20086,20090,20095,20109,20122,20126,20134,20138,20144,20150,20158],{"__ignoreMap":395},[425,19708,19709,19711],{"class":427,"line":428},[425,19710,2950],{"class":1155},[425,19712,2953],{"class":435},[425,19714,19715,19717,19719,19721],{"class":427,"line":698},[425,19716,2958],{"class":1155},[425,19718,2961],{"class":1155},[425,19720,2964],{"class":431},[425,19722,2307],{"class":701},[425,19724,19725],{"class":427,"line":710},[425,19726,19727],{"class":1216},"\u002F\u002F1.构造函数的分类及调用\n",[425,19729,19730],{"class":427,"line":721},[425,19731,19732],{"class":1216},"\u002F\u002F分类\n",[425,19734,19735],{"class":427,"line":735},[425,19736,19737],{"class":1216},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[425,19739,19740],{"class":427,"line":743},[425,19741,19742],{"class":1216},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[425,19744,19745],{"class":427,"line":751},[425,19746,3400],{"emptyLinePlaceholder":1084},[425,19748,19749,19751,19753],{"class":427,"line":759},[425,19750,15691],{"class":1155},[425,19752,16566],{"class":431},[425,19754,3674],{"class":701},[425,19756,19757],{"class":427,"line":770},[425,19758,2559],{"class":701},[425,19760,19761],{"class":427,"line":780},[425,19762,15713],{"class":1155},[425,19764,19765],{"class":427,"line":790},[425,19766,19511],{"class":1216},[425,19768,19769,19771],{"class":427,"line":805},[425,19770,19516],{"class":431},[425,19772,2976],{"class":701},[425,19774,19775],{"class":427,"line":818},[425,19776,3030],{"class":701},[425,19778,19779,19781,19783,19786,19788],{"class":427,"line":831},[425,19780,4451],{"class":701},[425,19782,2190],{"class":1155},[425,19784,19785],{"class":435},"\"Person构造函数无参构造\"",[425,19787,2190],{"class":1155},[425,19789,2212],{"class":701},[425,19791,19792],{"class":427,"line":841},[425,19793,3187],{"class":701},[425,19795,19796,19798,19800,19802,19804],{"class":427,"line":852},[425,19797,19516],{"class":431},[425,19799,1159],{"class":701},[425,19801,1162],{"class":1155},[425,19803,2412],{"class":6216},[425,19805,1165],{"class":701},[425,19807,19808],{"class":427,"line":862},[425,19809,3030],{"class":701},[425,19811,19812,19815,19817],{"class":427,"line":878},[425,19813,19814],{"class":701},"        age",[425,19816,1204],{"class":1155},[425,19818,7197],{"class":701},[425,19820,19821,19823,19825,19828,19830],{"class":427,"line":914},[425,19822,4451],{"class":701},[425,19824,2190],{"class":1155},[425,19826,19827],{"class":435},"\"Person构造函数有参构造\"",[425,19829,2190],{"class":1155},[425,19831,2212],{"class":701},[425,19833,19834],{"class":427,"line":943},[425,19835,3187],{"class":701},[425,19837,19838],{"class":427,"line":956},[425,19839,19544],{"class":1216},[425,19841,19842,19844],{"class":427,"line":964},[425,19843,19549],{"class":431},[425,19845,2976],{"class":701},[425,19847,19848],{"class":427,"line":2733},[425,19849,3030],{"class":701},[425,19851,19852,19854,19856,19859,19861],{"class":427,"line":2750},[425,19853,4451],{"class":701},[425,19855,2190],{"class":1155},[425,19857,19858],{"class":435},"\"Person析构函数被调用\"",[425,19860,2190],{"class":1155},[425,19862,2212],{"class":701},[425,19864,19865],{"class":427,"line":2755},[425,19866,3187],{"class":701},[425,19868,19869],{"class":427,"line":2760},[425,19870,19871],{"class":1216},"    \u002F\u002F拷贝构造函数\n",[425,19873,19874,19876,19878,19880,19882,19884,19886],{"class":427,"line":2765},[425,19875,19516],{"class":431},[425,19877,1159],{"class":701},[425,19879,7792],{"class":1155},[425,19881,16566],{"class":431},[425,19883,11583],{"class":1155},[425,19885,19],{"class":6216},[425,19887,1165],{"class":701},[425,19889,19890],{"class":427,"line":2779},[425,19891,3030],{"class":701},[425,19893,19894],{"class":427,"line":2784},[425,19895,19896],{"class":1216},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[425,19898,19899,19901,19903],{"class":427,"line":3577},[425,19900,19814],{"class":701},[425,19902,1204],{"class":1155},[425,19904,19905],{"class":701},"p.age;\n",[425,19907,19908,19910,19912,19915,19917],{"class":427,"line":3591},[425,19909,4451],{"class":701},[425,19911,2190],{"class":1155},[425,19913,19914],{"class":435},"\"Person拷贝构造函数被调用\"",[425,19916,2190],{"class":1155},[425,19918,2212],{"class":701},[425,19920,19921],{"class":427,"line":3599},[425,19922,3187],{"class":701},[425,19924,19925,19927],{"class":427,"line":3604},[425,19926,2985],{"class":1155},[425,19928,8797],{"class":701},[425,19930,19931],{"class":427,"line":3610},[425,19932,4995],{"class":701},[425,19934,19935],{"class":427,"line":3616},[425,19936,19937],{"class":1216},"\u002F\u002F调用\n",[425,19939,19940,19942,19944],{"class":427,"line":3621},[425,19941,6364],{"class":1155},[425,19943,6588],{"class":431},[425,19945,2976],{"class":701},[425,19947,19948],{"class":427,"line":8948},[425,19949,2559],{"class":701},[425,19951,19952],{"class":427,"line":8972},[425,19953,19954],{"class":1216},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[425,19956,19957],{"class":427,"line":8977},[425,19958,2578],{"class":701},[425,19960,19961,19963,19965],{"class":427,"line":8983},[425,19962,6364],{"class":1155},[425,19964,6657],{"class":431},[425,19966,2976],{"class":701},[425,19968,19969],{"class":427,"line":9010},[425,19970,2559],{"class":701},[425,19972,19973],{"class":427,"line":9015},[425,19974,19975],{"class":1216},"    \u002F\u002F1.括号法\n",[425,19977,19978],{"class":427,"line":9021},[425,19979,19980],{"class":1216},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[425,19982,19983],{"class":427,"line":9033},[425,19984,19985],{"class":1216},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[425,19987,19988],{"class":427,"line":9045},[425,19989,19990],{"class":1216},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[425,19992,19993],{"class":427,"line":9057},[425,19994,19995],{"class":1216},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[425,19997,19998],{"class":427,"line":10715},[425,19999,3400],{"emptyLinePlaceholder":1084},[425,20001,20002],{"class":427,"line":10740},[425,20003,20004],{"class":1216},"    \u002F\u002F注意事项\n",[425,20006,20007],{"class":427,"line":10763},[425,20008,20009],{"class":1216},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[425,20011,20012],{"class":427,"line":10787},[425,20013,20014],{"class":1216},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[425,20016,20017],{"class":427,"line":10792},[425,20018,20019],{"class":1216},"    \u002F\u002F Person p4();\n",[425,20021,20022],{"class":427,"line":10797},[425,20023,3400],{"emptyLinePlaceholder":1084},[425,20025,20026],{"class":427,"line":10802},[425,20027,20028],{"class":1216},"    \u002F\u002F2.显示法\n",[425,20030,20031],{"class":427,"line":10811},[425,20032,20033],{"class":701},"    Person p1;\n",[425,20035,20036,20039,20041,20044,20046,20048],{"class":427,"line":10816},[425,20037,20038],{"class":701},"    Person p2",[425,20040,1204],{"class":1155},[425,20042,20043],{"class":431},"Person",[425,20045,1159],{"class":701},[425,20047,1594],{"class":691},[425,20049,3719],{"class":701},[425,20051,20052,20055,20057,20059],{"class":427,"line":10822},[425,20053,20054],{"class":701},"    Person p3",[425,20056,1204],{"class":1155},[425,20058,20043],{"class":431},[425,20060,20061],{"class":701},"(p2);\n",[425,20063,20064],{"class":427,"line":10843},[425,20065,20066],{"class":1216},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[425,20068,20069],{"class":427,"line":10849},[425,20070,3400],{"emptyLinePlaceholder":1084},[425,20072,20073],{"class":427,"line":10863},[425,20074,20075],{"class":1216},"    \u002F\u002F 注意事项2\n",[425,20077,20078],{"class":427,"line":10869},[425,20079,20080],{"class":1216},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[425,20082,20083],{"class":427,"line":10896},[425,20084,20085],{"class":1216},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[425,20087,20088],{"class":427,"line":10905},[425,20089,3400],{"emptyLinePlaceholder":1084},[425,20091,20092],{"class":427,"line":10911},[425,20093,20094],{"class":1216},"    \u002F\u002F3.隐士转换法\n",[425,20096,20097,20100,20102,20104,20106],{"class":427,"line":10919},[425,20098,20099],{"class":701},"    Person p4",[425,20101,1204],{"class":1155},[425,20103,1594],{"class":691},[425,20105,1213],{"class":701},[425,20107,20108],{"class":1216},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[425,20110,20111,20114,20116,20119],{"class":427,"line":10924},[425,20112,20113],{"class":701},"    Person p5",[425,20115,1204],{"class":1155},[425,20117,20118],{"class":701},"p4;",[425,20120,20121],{"class":1216}," \u002F\u002F 这里会调用拷贝构造函数\n",[425,20123,20124],{"class":427,"line":17601},[425,20125,2578],{"class":701},[425,20127,20128,20130,20132],{"class":427,"line":17607},[425,20129,1162],{"class":1155},[425,20131,2973],{"class":431},[425,20133,2976],{"class":701},[425,20135,20136],{"class":427,"line":17630},[425,20137,2559],{"class":701},[425,20139,20140,20142],{"class":427,"line":17636},[425,20141,6633],{"class":431},[425,20143,6636],{"class":701},[425,20145,20146,20148],{"class":427,"line":17659},[425,20147,6702],{"class":431},[425,20149,6636],{"class":701},[425,20151,20152,20154,20156],{"class":427,"line":17673},[425,20153,5090],{"class":1155},[425,20155,5093],{"class":691},[425,20157,2307],{"class":701},[425,20159,20160],{"class":427,"line":17693},[425,20161,2578],{"class":701},[19,20163,20164,20167],{},[400,20165,20166],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[14,20169,20171],{"id":20170},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,20173,20174],{},"C++中拷贝构造函数调用时机通常有三种情况",[447,20176,20177,20180,20183],{},[450,20178,20179],{},"使用一个已经创建完毕的对象来初始化一个新对象",[450,20181,20182],{},"值传递的方式给函数参数传值",[450,20184,20185],{},"以值方式返回局部对象",[416,20187,20189],{"className":1146,"code":20188,"language":1148,"meta":395,"style":395},"#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",[422,20190,20191,20197,20207,20211,20216,20220,20225,20230,20235,20241,20245,20249,20255,20259,20272,20276,20281,20293,20297,20305,20318,20322,20326,20342,20346,20355,20368,20372,20378,20382,20394,20398,20404,20408,20412,20420,20424,20437,20445,20463,20467,20472,20477,20492,20496,20509,20513,20521,20525,20529,20537,20541,20546,20555,20559,20563,20588,20598,20602,20610,20614,20625,20650,20654,20658,20662,20670,20674,20679,20684,20691,20696,20701,20706,20711,20715,20720,20724,20729,20733,20738,20743,20747,20751,20756,20761,20769],{"__ignoreMap":395},[425,20192,20193,20195],{"class":427,"line":428},[425,20194,2950],{"class":1155},[425,20196,2953],{"class":435},[425,20198,20199,20201,20203,20205],{"class":427,"line":698},[425,20200,2958],{"class":1155},[425,20202,2961],{"class":1155},[425,20204,2964],{"class":431},[425,20206,2307],{"class":701},[425,20208,20209],{"class":427,"line":710},[425,20210,3400],{"emptyLinePlaceholder":1084},[425,20212,20213],{"class":427,"line":721},[425,20214,20215],{"class":1216},"\u002F\u002F拷贝构造函数调用时机\n",[425,20217,20218],{"class":427,"line":735},[425,20219,3400],{"emptyLinePlaceholder":1084},[425,20221,20222],{"class":427,"line":743},[425,20223,20224],{"class":1216},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[425,20226,20227],{"class":427,"line":751},[425,20228,20229],{"class":1216},"\u002F\u002F2.值传递的方式给函数参数传值\n",[425,20231,20232],{"class":427,"line":759},[425,20233,20234],{"class":1216},"\u002F\u002F3.以值方式返回局部对象\n",[425,20236,20237,20239],{"class":427,"line":770},[425,20238,15691],{"class":1155},[425,20240,16168],{"class":431},[425,20242,20243],{"class":427,"line":780},[425,20244,2559],{"class":701},[425,20246,20247],{"class":427,"line":790},[425,20248,15713],{"class":1155},[425,20250,20251,20253],{"class":427,"line":805},[425,20252,19516],{"class":431},[425,20254,2976],{"class":701},[425,20256,20257],{"class":427,"line":818},[425,20258,3030],{"class":701},[425,20260,20261,20263,20265,20268,20270],{"class":427,"line":831},[425,20262,10668],{"class":701},[425,20264,2190],{"class":1155},[425,20266,20267],{"class":435}," \"Person的默认构造函数调用\"",[425,20269,2458],{"class":1155},[425,20271,9840],{"class":701},[425,20273,20274],{"class":427,"line":841},[425,20275,3187],{"class":701},[425,20277,20278],{"class":427,"line":852},[425,20279,20280],{"class":1216},"    \u002F\u002F有参构造\n",[425,20282,20283,20285,20287,20289,20291],{"class":427,"line":862},[425,20284,19516],{"class":431},[425,20286,1159],{"class":701},[425,20288,1162],{"class":1155},[425,20290,16686],{"class":6216},[425,20292,1165],{"class":701},[425,20294,20295],{"class":427,"line":878},[425,20296,3030],{"class":701},[425,20298,20299,20301,20303],{"class":427,"line":914},[425,20300,16740],{"class":701},[425,20302,1204],{"class":1155},[425,20304,8797],{"class":701},[425,20306,20307,20309,20311,20314,20316],{"class":427,"line":943},[425,20308,10668],{"class":701},[425,20310,2190],{"class":1155},[425,20312,20313],{"class":435}," \"Person的有参构造函数调用\"",[425,20315,2458],{"class":1155},[425,20317,9840],{"class":701},[425,20319,20320],{"class":427,"line":956},[425,20321,3187],{"class":701},[425,20323,20324],{"class":427,"line":964},[425,20325,19871],{"class":1216},[425,20327,20328,20330,20332,20334,20336,20338,20340],{"class":427,"line":2733},[425,20329,19516],{"class":431},[425,20331,1159],{"class":701},[425,20333,7792],{"class":1155},[425,20335,16566],{"class":431},[425,20337,11583],{"class":1155},[425,20339,19],{"class":6216},[425,20341,1165],{"class":701},[425,20343,20344],{"class":427,"line":2750},[425,20345,3030],{"class":701},[425,20347,20348,20350,20352],{"class":427,"line":2755},[425,20349,16740],{"class":701},[425,20351,1204],{"class":1155},[425,20353,20354],{"class":701}," p.m_Age;\n",[425,20356,20357,20359,20361,20364,20366],{"class":427,"line":2760},[425,20358,10668],{"class":701},[425,20360,2190],{"class":1155},[425,20362,20363],{"class":435}," \"Person的拷贝构造函数调用\"",[425,20365,2458],{"class":1155},[425,20367,9840],{"class":701},[425,20369,20370],{"class":427,"line":2765},[425,20371,3187],{"class":701},[425,20373,20374,20376],{"class":427,"line":2779},[425,20375,19549],{"class":431},[425,20377,2976],{"class":701},[425,20379,20380],{"class":427,"line":2784},[425,20381,3030],{"class":701},[425,20383,20384,20386,20388,20390,20392],{"class":427,"line":3577},[425,20385,10668],{"class":701},[425,20387,2190],{"class":1155},[425,20389,19564],{"class":435},[425,20391,2458],{"class":1155},[425,20393,9840],{"class":701},[425,20395,20396],{"class":427,"line":3591},[425,20397,3187],{"class":701},[425,20399,20400,20402],{"class":427,"line":3599},[425,20401,2985],{"class":1155},[425,20403,16663],{"class":701},[425,20405,20406],{"class":427,"line":3604},[425,20407,4995],{"class":701},[425,20409,20410],{"class":427,"line":3610},[425,20411,20224],{"class":1216},[425,20413,20414,20416,20418],{"class":427,"line":3616},[425,20415,6364],{"class":1155},[425,20417,6588],{"class":431},[425,20419,2976],{"class":701},[425,20421,20422],{"class":427,"line":3621},[425,20423,2559],{"class":701},[425,20425,20426,20429,20431,20433,20435],{"class":427,"line":8948},[425,20427,20428],{"class":701},"    Person ",[425,20430,8130],{"class":431},[425,20432,1159],{"class":701},[425,20434,1848],{"class":691},[425,20436,3719],{"class":701},[425,20438,20439,20441,20443],{"class":427,"line":8972},[425,20440,20428],{"class":701},[425,20442,8033],{"class":431},[425,20444,18512],{"class":701},[425,20446,20447,20449,20451,20454,20456,20459,20461],{"class":427,"line":8977},[425,20448,2564],{"class":701},[425,20450,2190],{"class":1155},[425,20452,20453],{"class":435},"\"P2的年龄为：\"",[425,20455,2190],{"class":1155},[425,20457,20458],{"class":701},"p2.m_Age",[425,20460,2190],{"class":1155},[425,20462,2212],{"class":701},[425,20464,20465],{"class":427,"line":8983},[425,20466,2578],{"class":701},[425,20468,20469],{"class":427,"line":9010},[425,20470,20471],{"class":1216},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[425,20473,20474],{"class":427,"line":9015},[425,20475,20476],{"class":1216},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[425,20478,20479,20481,20484,20486,20488,20490],{"class":427,"line":9021},[425,20480,6364],{"class":1155},[425,20482,20483],{"class":431}," doWork",[425,20485,1159],{"class":701},[425,20487,20043],{"class":431},[425,20489,7825],{"class":6216},[425,20491,1165],{"class":701},[425,20493,20494],{"class":427,"line":9033},[425,20495,2559],{"class":701},[425,20497,20498,20500,20502,20505,20507],{"class":427,"line":9045},[425,20499,7529],{"class":701},[425,20501,2190],{"class":1155},[425,20503,20504],{"class":435}," \"doWork函数调用\"",[425,20506,2458],{"class":1155},[425,20508,9840],{"class":701},[425,20510,20511],{"class":427,"line":9057},[425,20512,2578],{"class":701},[425,20514,20515,20517,20519],{"class":427,"line":10715},[425,20516,6364],{"class":1155},[425,20518,6657],{"class":431},[425,20520,2976],{"class":701},[425,20522,20523],{"class":427,"line":10740},[425,20524,2559],{"class":701},[425,20526,20527],{"class":427,"line":10763},[425,20528,16310],{"class":701},[425,20530,20531,20534],{"class":427,"line":10787},[425,20532,20533],{"class":431},"    doWork",[425,20535,20536],{"class":701},"(p);\n",[425,20538,20539],{"class":427,"line":10792},[425,20540,2578],{"class":701},[425,20542,20543],{"class":427,"line":10797},[425,20544,20545],{"class":1216},"\u002F\u002F 3.以值方式返回局部对象\n",[425,20547,20548,20550,20553],{"class":427,"line":10802},[425,20549,20043],{"class":431},[425,20551,20552],{"class":431}," doWork2",[425,20554,2976],{"class":701},[425,20556,20557],{"class":427,"line":10811},[425,20558,2559],{"class":701},[425,20560,20561],{"class":427,"line":10816},[425,20562,20033],{"class":701},[425,20564,20565,20567,20569,20571,20573,20575,20577,20579,20581,20583,20585],{"class":427,"line":10822},[425,20566,2564],{"class":701},[425,20568,2190],{"class":1155},[425,20570,1159],{"class":701},[425,20572,1162],{"class":1155},[425,20574,7518],{"class":1155},[425,20576,895],{"class":701},[425,20578,1502],{"class":1155},[425,20580,8130],{"class":701},[425,20582,2190],{"class":1155},[425,20584,2255],{"class":701},[425,20586,20587],{"class":1216},"\u002F\u002F打印p1的地址\n",[425,20589,20590,20592,20595],{"class":427,"line":10843},[425,20591,5090],{"class":1155},[425,20593,20594],{"class":701}," p1;",[425,20596,20597],{"class":1216},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[425,20599,20600],{"class":427,"line":10849},[425,20601,2578],{"class":701},[425,20603,20604,20606,20608],{"class":427,"line":10863},[425,20605,6364],{"class":1155},[425,20607,6729],{"class":431},[425,20609,2976],{"class":701},[425,20611,20612],{"class":427,"line":10869},[425,20613,2559],{"class":701},[425,20615,20616,20619,20621,20623],{"class":427,"line":10896},[425,20617,20618],{"class":701},"    Person p ",[425,20620,1204],{"class":1155},[425,20622,20552],{"class":431},[425,20624,6636],{"class":701},[425,20626,20627,20629,20631,20633,20635,20637,20639,20641,20643,20645,20647],{"class":427,"line":10905},[425,20628,2564],{"class":701},[425,20630,2190],{"class":1155},[425,20632,1159],{"class":701},[425,20634,1162],{"class":1155},[425,20636,7518],{"class":1155},[425,20638,895],{"class":701},[425,20640,1502],{"class":1155},[425,20642,19],{"class":701},[425,20644,2190],{"class":1155},[425,20646,2255],{"class":701},[425,20648,20649],{"class":1216},"\u002F\u002F打印p的地址\n",[425,20651,20652],{"class":427,"line":10911},[425,20653,2578],{"class":701},[425,20655,20656],{"class":427,"line":10919},[425,20657,3400],{"emptyLinePlaceholder":1084},[425,20659,20660],{"class":427,"line":10924},[425,20661,3400],{"emptyLinePlaceholder":1084},[425,20663,20664,20666,20668],{"class":427,"line":17601},[425,20665,1162],{"class":1155},[425,20667,2973],{"class":431},[425,20669,2976],{"class":701},[425,20671,20672],{"class":427,"line":17607},[425,20673,2559],{"class":701},[425,20675,20676],{"class":427,"line":17630},[425,20677,20678],{"class":1216},"    \u002F\u002F test01();\n",[425,20680,20681],{"class":427,"line":17636},[425,20682,20683],{"class":1216},"    \u002F\u002F test02();\n",[425,20685,20686,20689],{"class":427,"line":17659},[425,20687,20688],{"class":431},"    test03",[425,20690,6636],{"class":701},[425,20692,20693],{"class":427,"line":17673},[425,20694,20695],{"class":1216},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[425,20697,20698],{"class":427,"line":17693},[425,20699,20700],{"class":1216},"\u002F\u002F 输出结果如下：\n",[425,20702,20703],{"class":427,"line":17699},[425,20704,20705],{"class":1216},"\u002F\u002F Person的默认构造函数调用\n",[425,20707,20708],{"class":427,"line":17710},[425,20709,20710],{"class":1216},"\u002F\u002F 0x7fffffffceec\n",[425,20712,20713],{"class":427,"line":17733},[425,20714,20710],{"class":1216},[425,20716,20717],{"class":427,"line":17755},[425,20718,20719],{"class":1216},"\u002F\u002F Person的析构函数调用\n",[425,20721,20722],{"class":427,"line":17760},[425,20723,3400],{"emptyLinePlaceholder":1084},[425,20725,20726],{"class":427,"line":17766},[425,20727,20728],{"class":1216},"\u002F\u002F 之前的输出结果如下：\n",[425,20730,20731],{"class":427,"line":17780},[425,20732,20705],{"class":1216},[425,20734,20735],{"class":427,"line":17793},[425,20736,20737],{"class":1216},"\u002F\u002F 地址\n",[425,20739,20740],{"class":427,"line":17798},[425,20741,20742],{"class":1216},"\u002F\u002F Person的拷贝构造函数调用\n",[425,20744,20745],{"class":427,"line":17812},[425,20746,20719],{"class":1216},[425,20748,20749],{"class":427,"line":17817},[425,20750,20737],{"class":1216},[425,20752,20753],{"class":427,"line":17823},[425,20754,20755],{"class":1216},"\u002F\u002F (这两次输出的地址也是不同的) \n",[425,20757,20758],{"class":427,"line":17828},[425,20759,20760],{"class":1216},"\u002F\u002F Person的析构函数调用     \n",[425,20762,20763,20765,20767],{"class":427,"line":17842},[425,20764,5090],{"class":1155},[425,20766,5093],{"class":691},[425,20768,2307],{"class":701},[425,20770,20771],{"class":427,"line":17847},[425,20772,2578],{"class":701},[19,20774,20775],{},"简化版理解",[416,20777,20779],{"className":1146,"code":20778,"language":1148,"meta":395,"style":395},"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",[422,20780,20781,20789,20793,20799,20812,20823,20827,20839,20852,20860,20864,20880,20893,20902,20906,20911,20917,20930,20934,20938,20945,20949,20953,20958,20966,20970,20986,20999,21012,21016,21021,21029,21033,21037,21042,21047,21063,21071,21078,21084,21088,21092,21097,21105,21109,21113,21136,21143,21147,21151,21159,21163,21173,21195,21199,21203,21207,21215,21219,21224,21229,21235,21239,21249,21253,21261],{"__ignoreMap":395},[425,20782,20783,20785,20787],{"class":427,"line":428},[425,20784,15691],{"class":1155},[425,20786,16566],{"class":431},[425,20788,16569],{"class":701},[425,20790,20791],{"class":427,"line":698},[425,20792,15713],{"class":1155},[425,20794,20795,20797],{"class":427,"line":710},[425,20796,19516],{"class":431},[425,20798,11852],{"class":701},[425,20800,20801,20803,20805,20808,20810],{"class":427,"line":721},[425,20802,10668],{"class":701},[425,20804,2190],{"class":1155},[425,20806,20807],{"class":435}," \"无参构造函数!\"",[425,20809,2458],{"class":1155},[425,20811,9840],{"class":701},[425,20813,20814,20817,20819,20821],{"class":427,"line":735},[425,20815,20816],{"class":701},"        mAge ",[425,20818,1204],{"class":1155},[425,20820,5093],{"class":691},[425,20822,2307],{"class":701},[425,20824,20825],{"class":427,"line":743},[425,20826,3187],{"class":701},[425,20828,20829,20831,20833,20835,20837],{"class":427,"line":751},[425,20830,19516],{"class":431},[425,20832,1159],{"class":701},[425,20834,1162],{"class":1155},[425,20836,16686],{"class":6216},[425,20838,13441],{"class":701},[425,20840,20841,20843,20845,20848,20850],{"class":427,"line":759},[425,20842,10668],{"class":701},[425,20844,2190],{"class":1155},[425,20846,20847],{"class":435}," \"有参构造函数!\"",[425,20849,2458],{"class":1155},[425,20851,9840],{"class":701},[425,20853,20854,20856,20858],{"class":427,"line":770},[425,20855,20816],{"class":701},[425,20857,1204],{"class":1155},[425,20859,8797],{"class":701},[425,20861,20862],{"class":427,"line":780},[425,20863,3187],{"class":701},[425,20865,20866,20868,20870,20872,20874,20876,20878],{"class":427,"line":790},[425,20867,19516],{"class":431},[425,20869,1159],{"class":701},[425,20871,7792],{"class":1155},[425,20873,16566],{"class":431},[425,20875,1502],{"class":1155},[425,20877,7825],{"class":6216},[425,20879,13441],{"class":701},[425,20881,20882,20884,20886,20889,20891],{"class":427,"line":805},[425,20883,10668],{"class":701},[425,20885,2190],{"class":1155},[425,20887,20888],{"class":435}," \"拷贝构造函数!\"",[425,20890,2458],{"class":1155},[425,20892,9840],{"class":701},[425,20894,20895,20897,20899],{"class":427,"line":818},[425,20896,20816],{"class":701},[425,20898,1204],{"class":1155},[425,20900,20901],{"class":701}," p.mAge;\n",[425,20903,20904],{"class":427,"line":831},[425,20905,3187],{"class":701},[425,20907,20908],{"class":427,"line":841},[425,20909,20910],{"class":1216},"    \u002F\u002F析构函数在释放内存之前调用\n",[425,20912,20913,20915],{"class":427,"line":852},[425,20914,19549],{"class":431},[425,20916,11852],{"class":701},[425,20918,20919,20921,20923,20926,20928],{"class":427,"line":862},[425,20920,10668],{"class":701},[425,20922,2190],{"class":1155},[425,20924,20925],{"class":435}," \"析构函数!\"",[425,20927,2458],{"class":1155},[425,20929,9840],{"class":701},[425,20931,20932],{"class":427,"line":878},[425,20933,3187],{"class":701},[425,20935,20936],{"class":427,"line":914},[425,20937,15713],{"class":1155},[425,20939,20940,20942],{"class":427,"line":943},[425,20941,2985],{"class":1155},[425,20943,20944],{"class":701}," mAge;\n",[425,20946,20947],{"class":427,"line":956},[425,20948,4995],{"class":701},[425,20950,20951],{"class":427,"line":964},[425,20952,3400],{"emptyLinePlaceholder":1084},[425,20954,20955],{"class":427,"line":2733},[425,20956,20957],{"class":1216},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[425,20959,20960,20962,20964],{"class":427,"line":2750},[425,20961,6364],{"class":1155},[425,20963,6588],{"class":431},[425,20965,11852],{"class":701},[425,20967,20968],{"class":427,"line":2755},[425,20969,3400],{"emptyLinePlaceholder":1084},[425,20971,20972,20974,20977,20979,20981,20983],{"class":427,"line":2760},[425,20973,20428],{"class":701},[425,20975,20976],{"class":431},"man",[425,20978,1159],{"class":701},[425,20980,1460],{"class":691},[425,20982,6966],{"class":701},[425,20984,20985],{"class":1216}," \u002F\u002Fp对象已经创建完毕\n",[425,20987,20988,20990,20993,20996],{"class":427,"line":2765},[425,20989,20428],{"class":701},[425,20991,20992],{"class":431},"newman",[425,20994,20995],{"class":701},"(man);",[425,20997,20998],{"class":1216}," \u002F\u002F调用拷贝构造函数\n",[425,21000,21001,21004,21006,21009],{"class":427,"line":2779},[425,21002,21003],{"class":701},"    Person newman2 ",[425,21005,1204],{"class":1155},[425,21007,21008],{"class":701}," man;",[425,21010,21011],{"class":1216}," \u002F\u002F拷贝构造\n",[425,21013,21014],{"class":427,"line":2784},[425,21015,3400],{"emptyLinePlaceholder":1084},[425,21017,21018],{"class":427,"line":3577},[425,21019,21020],{"class":1216},"    \u002F\u002FPerson newman3;\n",[425,21022,21023,21026],{"class":427,"line":3591},[425,21024,21025],{"class":1216},"    \u002F\u002Fnewman3 = man;",[425,21027,21028],{"class":1216}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[425,21030,21031],{"class":427,"line":3599},[425,21032,2578],{"class":701},[425,21034,21035],{"class":427,"line":3604},[425,21036,3400],{"emptyLinePlaceholder":1084},[425,21038,21039],{"class":427,"line":3610},[425,21040,21041],{"class":1216},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[425,21043,21044],{"class":427,"line":3616},[425,21045,21046],{"class":1216},"\u002F\u002F相当于Person p1 = p;\n",[425,21048,21049,21051,21053,21055,21057,21060],{"class":427,"line":3621},[425,21050,6364],{"class":1155},[425,21052,20483],{"class":431},[425,21054,1159],{"class":701},[425,21056,20043],{"class":431},[425,21058,21059],{"class":6216}," p1",[425,21061,21062],{"class":701},") {}\n",[425,21064,21065,21067,21069],{"class":427,"line":8948},[425,21066,6364],{"class":1155},[425,21068,6657],{"class":431},[425,21070,11852],{"class":701},[425,21072,21073,21075],{"class":427,"line":8972},[425,21074,19601],{"class":701},[425,21076,21077],{"class":1216}," \u002F\u002F无参构造函数\n",[425,21079,21080,21082],{"class":427,"line":8977},[425,21081,20533],{"class":431},[425,21083,20536],{"class":701},[425,21085,21086],{"class":427,"line":8983},[425,21087,2578],{"class":701},[425,21089,21090],{"class":427,"line":9010},[425,21091,3400],{"emptyLinePlaceholder":1084},[425,21093,21094],{"class":427,"line":9015},[425,21095,21096],{"class":1216},"\u002F\u002F3. 以值方式返回局部对象\n",[425,21098,21099,21101,21103],{"class":427,"line":9021},[425,21100,20043],{"class":431},[425,21102,20552],{"class":431},[425,21104,2976],{"class":701},[425,21106,21107],{"class":427,"line":9033},[425,21108,2559],{"class":701},[425,21110,21111],{"class":427,"line":9045},[425,21112,20033],{"class":701},[425,21114,21115,21117,21119,21121,21123,21125,21127,21129,21132,21134],{"class":427,"line":9057},[425,21116,7529],{"class":701},[425,21118,2190],{"class":1155},[425,21120,2664],{"class":701},[425,21122,1162],{"class":1155},[425,21124,7518],{"class":1155},[425,21126,895],{"class":701},[425,21128,1502],{"class":1155},[425,21130,21131],{"class":701},"p1 ",[425,21133,2190],{"class":1155},[425,21135,9840],{"class":701},[425,21137,21138,21140],{"class":427,"line":10715},[425,21139,5090],{"class":1155},[425,21141,21142],{"class":701}," p1;\n",[425,21144,21145],{"class":427,"line":10740},[425,21146,2578],{"class":701},[425,21148,21149],{"class":427,"line":10763},[425,21150,3400],{"emptyLinePlaceholder":1084},[425,21152,21153,21155,21157],{"class":427,"line":10787},[425,21154,6364],{"class":1155},[425,21156,6729],{"class":431},[425,21158,2976],{"class":701},[425,21160,21161],{"class":427,"line":10792},[425,21162,2559],{"class":701},[425,21164,21165,21167,21169,21171],{"class":427,"line":10797},[425,21166,20618],{"class":701},[425,21168,1204],{"class":1155},[425,21170,20552],{"class":431},[425,21172,6636],{"class":701},[425,21174,21175,21177,21179,21181,21183,21185,21187,21189,21191,21193],{"class":427,"line":10802},[425,21176,7529],{"class":701},[425,21178,2190],{"class":1155},[425,21180,2664],{"class":701},[425,21182,1162],{"class":1155},[425,21184,7518],{"class":1155},[425,21186,895],{"class":701},[425,21188,1502],{"class":1155},[425,21190,12447],{"class":701},[425,21192,2190],{"class":1155},[425,21194,9840],{"class":701},[425,21196,21197],{"class":427,"line":10811},[425,21198,2578],{"class":701},[425,21200,21201],{"class":427,"line":10816},[425,21202,3400],{"emptyLinePlaceholder":1084},[425,21204,21205],{"class":427,"line":10822},[425,21206,3400],{"emptyLinePlaceholder":1084},[425,21208,21209,21211,21213],{"class":427,"line":10843},[425,21210,1162],{"class":1155},[425,21212,2973],{"class":431},[425,21214,11852],{"class":701},[425,21216,21217],{"class":427,"line":10849},[425,21218,3400],{"emptyLinePlaceholder":1084},[425,21220,21221],{"class":427,"line":10863},[425,21222,21223],{"class":1216},"    \u002F\u002Ftest01();\n",[425,21225,21226],{"class":427,"line":10869},[425,21227,21228],{"class":1216},"    \u002F\u002Ftest02();\n",[425,21230,21231,21233],{"class":427,"line":10896},[425,21232,20688],{"class":431},[425,21234,6636],{"class":701},[425,21236,21237],{"class":427,"line":10905},[425,21238,3400],{"emptyLinePlaceholder":1084},[425,21240,21241,21243,21245,21247],{"class":427,"line":10911},[425,21242,3303],{"class":431},[425,21244,1159],{"class":701},[425,21246,3308],{"class":435},[425,21248,3719],{"class":701},[425,21250,21251],{"class":427,"line":10919},[425,21252,3400],{"emptyLinePlaceholder":1084},[425,21254,21255,21257,21259],{"class":427,"line":10924},[425,21256,5090],{"class":1155},[425,21258,5093],{"class":691},[425,21260,2307],{"class":701},[425,21262,21263],{"class":427,"line":17601},[425,21264,2578],{"class":701},[14,21266,21268],{"id":21267},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,21270,21271],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,21273,21274],{},"1．默认构造函数(无参，函数体为空)",[19,21276,21277],{},"2．默认析构函数(无参，函数体为空)",[19,21279,21280],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,21282,21283],{},"构造函数调用规则如下：",[447,21285,21286,21289],{},[450,21287,21288],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[450,21290,21291],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[416,21293,21295],{"className":1146,"code":21294,"language":1148,"meta":395,"style":395},"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",[422,21296,21297,21305,21309,21314,21320,21332,21336,21341,21353,21362,21374,21378,21382,21398,21407,21419,21423,21427,21433,21445,21449,21453,21459,21463,21467,21475,21479,21491,21496,21504,21508,21526,21530,21534,21542,21546,21551,21559,21574,21587,21591,21596,21603,21619,21632,21636,21640,21648,21652,21658,21662,21672,21676,21684],{"__ignoreMap":395},[425,21298,21299,21301,21303],{"class":427,"line":428},[425,21300,15691],{"class":1155},[425,21302,16566],{"class":431},[425,21304,16569],{"class":701},[425,21306,21307],{"class":427,"line":698},[425,21308,15713],{"class":1155},[425,21310,21311],{"class":427,"line":710},[425,21312,21313],{"class":1216},"    \u002F\u002F无参（默认）构造函数\n",[425,21315,21316,21318],{"class":427,"line":721},[425,21317,19516],{"class":431},[425,21319,11852],{"class":701},[425,21321,21322,21324,21326,21328,21330],{"class":427,"line":735},[425,21323,10668],{"class":701},[425,21325,2190],{"class":1155},[425,21327,20807],{"class":435},[425,21329,2458],{"class":1155},[425,21331,9840],{"class":701},[425,21333,21334],{"class":427,"line":743},[425,21335,3187],{"class":701},[425,21337,21338],{"class":427,"line":751},[425,21339,21340],{"class":1216},"    \u002F\u002F有参构造函数\n",[425,21342,21343,21345,21347,21349,21351],{"class":427,"line":759},[425,21344,19516],{"class":431},[425,21346,1159],{"class":701},[425,21348,1162],{"class":1155},[425,21350,2412],{"class":6216},[425,21352,13441],{"class":701},[425,21354,21355,21358,21360],{"class":427,"line":770},[425,21356,21357],{"class":701},"        age ",[425,21359,1204],{"class":1155},[425,21361,2446],{"class":701},[425,21363,21364,21366,21368,21370,21372],{"class":427,"line":780},[425,21365,10668],{"class":701},[425,21367,2190],{"class":1155},[425,21369,20847],{"class":435},[425,21371,2458],{"class":1155},[425,21373,9840],{"class":701},[425,21375,21376],{"class":427,"line":790},[425,21377,3187],{"class":701},[425,21379,21380],{"class":427,"line":805},[425,21381,19871],{"class":1216},[425,21383,21384,21386,21388,21390,21392,21394,21396],{"class":427,"line":818},[425,21385,19516],{"class":431},[425,21387,1159],{"class":701},[425,21389,7792],{"class":1155},[425,21391,16566],{"class":431},[425,21393,1502],{"class":1155},[425,21395,7825],{"class":6216},[425,21397,13441],{"class":701},[425,21399,21400,21402,21404],{"class":427,"line":831},[425,21401,21357],{"class":701},[425,21403,1204],{"class":1155},[425,21405,21406],{"class":701}," p.age;\n",[425,21408,21409,21411,21413,21415,21417],{"class":427,"line":841},[425,21410,10668],{"class":701},[425,21412,2190],{"class":1155},[425,21414,20888],{"class":435},[425,21416,2458],{"class":1155},[425,21418,9840],{"class":701},[425,21420,21421],{"class":427,"line":852},[425,21422,3187],{"class":701},[425,21424,21425],{"class":427,"line":862},[425,21426,19544],{"class":1216},[425,21428,21429,21431],{"class":427,"line":878},[425,21430,19549],{"class":431},[425,21432,11852],{"class":701},[425,21434,21435,21437,21439,21441,21443],{"class":427,"line":914},[425,21436,10668],{"class":701},[425,21438,2190],{"class":1155},[425,21440,20925],{"class":435},[425,21442,2458],{"class":1155},[425,21444,9840],{"class":701},[425,21446,21447],{"class":427,"line":943},[425,21448,3187],{"class":701},[425,21450,21451],{"class":427,"line":956},[425,21452,15713],{"class":1155},[425,21454,21455,21457],{"class":427,"line":964},[425,21456,2985],{"class":1155},[425,21458,8797],{"class":701},[425,21460,21461],{"class":427,"line":2733},[425,21462,4995],{"class":701},[425,21464,21465],{"class":427,"line":2750},[425,21466,3400],{"emptyLinePlaceholder":1084},[425,21468,21469,21471,21473],{"class":427,"line":2755},[425,21470,6364],{"class":1155},[425,21472,6588],{"class":431},[425,21474,2976],{"class":701},[425,21476,21477],{"class":427,"line":2760},[425,21478,2559],{"class":701},[425,21480,21481,21483,21485,21487,21489],{"class":427,"line":2765},[425,21482,20428],{"class":701},[425,21484,8130],{"class":431},[425,21486,1159],{"class":701},[425,21488,1798],{"class":691},[425,21490,3719],{"class":701},[425,21492,21493],{"class":427,"line":2779},[425,21494,21495],{"class":1216},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[425,21497,21498,21500,21502],{"class":427,"line":2784},[425,21499,20428],{"class":701},[425,21501,8033],{"class":431},[425,21503,18512],{"class":701},[425,21505,21506],{"class":427,"line":3577},[425,21507,3400],{"emptyLinePlaceholder":1084},[425,21509,21510,21512,21514,21517,21519,21522,21524],{"class":427,"line":3591},[425,21511,7529],{"class":701},[425,21513,2190],{"class":1155},[425,21515,21516],{"class":435}," \"p2的年龄为： \"",[425,21518,2458],{"class":1155},[425,21520,21521],{"class":701}," p2.age ",[425,21523,2190],{"class":1155},[425,21525,9840],{"class":701},[425,21527,21528],{"class":427,"line":3599},[425,21529,2578],{"class":701},[425,21531,21532],{"class":427,"line":3604},[425,21533,3400],{"emptyLinePlaceholder":1084},[425,21535,21536,21538,21540],{"class":427,"line":3610},[425,21537,6364],{"class":1155},[425,21539,6657],{"class":431},[425,21541,2976],{"class":701},[425,21543,21544],{"class":427,"line":3616},[425,21545,2559],{"class":701},[425,21547,21548],{"class":427,"line":3621},[425,21549,21550],{"class":1216},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[425,21552,21553,21556],{"class":427,"line":8948},[425,21554,21555],{"class":701},"    Person p1;",[425,21557,21558],{"class":1216}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[425,21560,21561,21563,21565,21567,21569,21571],{"class":427,"line":8972},[425,21562,20428],{"class":701},[425,21564,8033],{"class":431},[425,21566,1159],{"class":701},[425,21568,1594],{"class":691},[425,21570,6966],{"class":701},[425,21572,21573],{"class":1216}," \u002F\u002F用户提供的有参\n",[425,21575,21576,21578,21581,21584],{"class":427,"line":8977},[425,21577,20428],{"class":701},[425,21579,21580],{"class":431},"p3",[425,21582,21583],{"class":701},"(p2);",[425,21585,21586],{"class":1216}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[425,21588,21589],{"class":427,"line":8983},[425,21590,3400],{"emptyLinePlaceholder":1084},[425,21592,21593],{"class":427,"line":9010},[425,21594,21595],{"class":1216},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[425,21597,21598,21601],{"class":427,"line":9015},[425,21599,21600],{"class":701},"    Person p4;",[425,21602,21558],{"class":1216},[425,21604,21605,21607,21610,21612,21614,21616],{"class":427,"line":9021},[425,21606,20428],{"class":701},[425,21608,21609],{"class":431},"p5",[425,21611,1159],{"class":701},[425,21613,1594],{"class":691},[425,21615,6966],{"class":701},[425,21617,21618],{"class":1216}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[425,21620,21621,21623,21626,21629],{"class":427,"line":9033},[425,21622,20428],{"class":701},[425,21624,21625],{"class":431},"p6",[425,21627,21628],{"class":701},"(p5);",[425,21630,21631],{"class":1216}," \u002F\u002F用户自己提供拷贝构造\n",[425,21633,21634],{"class":427,"line":9045},[425,21635,2578],{"class":701},[425,21637,21638],{"class":427,"line":9057},[425,21639,3400],{"emptyLinePlaceholder":1084},[425,21641,21642,21644,21646],{"class":427,"line":10715},[425,21643,1162],{"class":1155},[425,21645,2973],{"class":431},[425,21647,11852],{"class":701},[425,21649,21650],{"class":427,"line":10740},[425,21651,3400],{"emptyLinePlaceholder":1084},[425,21653,21654,21656],{"class":427,"line":10763},[425,21655,6633],{"class":431},[425,21657,6636],{"class":701},[425,21659,21660],{"class":427,"line":10787},[425,21661,3400],{"emptyLinePlaceholder":1084},[425,21663,21664,21666,21668,21670],{"class":427,"line":10792},[425,21665,3303],{"class":431},[425,21667,1159],{"class":701},[425,21669,3308],{"class":435},[425,21671,3719],{"class":701},[425,21673,21674],{"class":427,"line":10797},[425,21675,3400],{"emptyLinePlaceholder":1084},[425,21677,21678,21680,21682],{"class":427,"line":10802},[425,21679,5090],{"class":1155},[425,21681,5093],{"class":691},[425,21683,2307],{"class":701},[425,21685,21686],{"class":427,"line":10811},[425,21687,2578],{"class":701},[14,21689,21691],{"id":21690},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,21693,21694],{},"浅拷贝：简单的赋值拷贝操作",[19,21696,21697],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[416,21699,21701],{"className":1146,"code":21700,"language":1148,"meta":395,"style":395},"#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",[422,21702,21703,21709,21719,21725,21729,21733,21738,21744,21748,21761,21765,21769,21776,21780,21790,21805,21818,21822,21827,21832,21848,21852,21865,21870,21875,21880,21889,21894,21909,21913,21917,21921,21927,21931,21936,21951,21955,21966,21980,21984,21993,21997,22003,22015,22019,22027,22031,22048,22079,22087,22115,22119,22123,22131,22135,22141],{"__ignoreMap":395},[425,21704,21705,21707],{"class":427,"line":428},[425,21706,2950],{"class":1155},[425,21708,2953],{"class":435},[425,21710,21711,21713,21715,21717],{"class":427,"line":698},[425,21712,2958],{"class":1155},[425,21714,2961],{"class":1155},[425,21716,2964],{"class":431},[425,21718,2307],{"class":701},[425,21720,21721,21723],{"class":427,"line":710},[425,21722,15691],{"class":1155},[425,21724,16168],{"class":431},[425,21726,21727],{"class":427,"line":721},[425,21728,2559],{"class":701},[425,21730,21731],{"class":427,"line":735},[425,21732,15713],{"class":1155},[425,21734,21735],{"class":427,"line":743},[425,21736,21737],{"class":1216},"    \u002F\u002F默认构造函数\n",[425,21739,21740,21742],{"class":427,"line":751},[425,21741,19516],{"class":431},[425,21743,2976],{"class":701},[425,21745,21746],{"class":427,"line":759},[425,21747,3030],{"class":701},[425,21749,21750,21752,21754,21757,21759],{"class":427,"line":770},[425,21751,4451],{"class":701},[425,21753,2190],{"class":1155},[425,21755,21756],{"class":435},"\"默认构造函数\"",[425,21758,2190],{"class":1155},[425,21760,2212],{"class":701},[425,21762,21763],{"class":427,"line":780},[425,21764,3187],{"class":701},[425,21766,21767],{"class":427,"line":790},[425,21768,21340],{"class":1216},[425,21770,21771,21773],{"class":427,"line":805},[425,21772,19549],{"class":431},[425,21774,21775],{"class":701},"(int age,int height)\n",[425,21777,21778],{"class":427,"line":818},[425,21779,3030],{"class":701},[425,21781,21782,21785,21787],{"class":427,"line":831},[425,21783,21784],{"class":701},"        m_Age",[425,21786,1204],{"class":1155},[425,21788,21789],{"class":701},"age;\n",[425,21791,21792,21795,21797,21799,21802],{"class":427,"line":841},[425,21793,21794],{"class":701},"        m_Height",[425,21796,12716],{"class":1155},[425,21798,3382],{"class":1155},[425,21800,21801],{"class":701},"(height);",[425,21803,21804],{"class":1216},"\u002F\u002F放到堆区\n",[425,21806,21807,21809,21811,21814,21816],{"class":427,"line":852},[425,21808,4451],{"class":701},[425,21810,2190],{"class":1155},[425,21812,21813],{"class":435},"\"有参构造函数\"",[425,21815,2190],{"class":1155},[425,21817,2212],{"class":701},[425,21819,21820],{"class":427,"line":862},[425,21821,3187],{"class":701},[425,21823,21824],{"class":427,"line":878},[425,21825,21826],{"class":1216},"    \u002F\u002F深拷贝解决上述问题\n",[425,21828,21829],{"class":427,"line":914},[425,21830,21831],{"class":1216},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[425,21833,21834,21836,21838,21840,21842,21844,21846],{"class":427,"line":943},[425,21835,19516],{"class":431},[425,21837,1159],{"class":701},[425,21839,7792],{"class":1155},[425,21841,16566],{"class":431},[425,21843,11583],{"class":1155},[425,21845,19],{"class":6216},[425,21847,1165],{"class":701},[425,21849,21850],{"class":427,"line":956},[425,21851,3030],{"class":701},[425,21853,21854,21856,21858,21861,21863],{"class":427,"line":964},[425,21855,4451],{"class":701},[425,21857,2190],{"class":1155},[425,21859,21860],{"class":435},"\"拷贝构造函数\"",[425,21862,2190],{"class":1155},[425,21864,2212],{"class":701},[425,21866,21867],{"class":427,"line":2733},[425,21868,21869],{"class":1216},"        \u002F\u002F编译器默认的写如下注释部分\n",[425,21871,21872],{"class":427,"line":2750},[425,21873,21874],{"class":1216},"        \u002F\u002Fm_Age=p.m_Age;\n",[425,21876,21877],{"class":427,"line":2755},[425,21878,21879],{"class":1216},"        \u002F\u002Fm_Height=p.m_Height;\n",[425,21881,21882,21884,21886],{"class":427,"line":2760},[425,21883,21784],{"class":701},[425,21885,1204],{"class":1155},[425,21887,21888],{"class":701},"p.m_Age;\n",[425,21890,21891],{"class":427,"line":2765},[425,21892,21893],{"class":1216},"        \u002F\u002F深拷贝操作\n",[425,21895,21896,21898,21900,21902,21904,21906],{"class":427,"line":2779},[425,21897,21794],{"class":701},[425,21899,12716],{"class":1155},[425,21901,3382],{"class":1155},[425,21903,1159],{"class":701},[425,21905,1603],{"class":1155},[425,21907,21908],{"class":701},"p.m_Height);\n",[425,21910,21911],{"class":427,"line":2784},[425,21912,3187],{"class":701},[425,21914,21915],{"class":427,"line":3577},[425,21916,3400],{"emptyLinePlaceholder":1084},[425,21918,21919],{"class":427,"line":3591},[425,21920,19544],{"class":1216},[425,21922,21923,21925],{"class":427,"line":3599},[425,21924,19549],{"class":431},[425,21926,2976],{"class":701},[425,21928,21929],{"class":427,"line":3604},[425,21930,3030],{"class":701},[425,21932,21933],{"class":427,"line":3610},[425,21934,21935],{"class":1216},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[425,21937,21938,21940,21943,21946,21949],{"class":427,"line":3616},[425,21939,3497],{"class":1155},[425,21941,21942],{"class":701},"(m_Height ",[425,21944,21945],{"class":1155},"!=",[425,21947,21948],{"class":691}," NULL",[425,21950,1165],{"class":701},[425,21952,21953],{"class":427,"line":3621},[425,21954,3510],{"class":701},[425,21956,21957,21960,21963],{"class":427,"line":8948},[425,21958,21959],{"class":1155},"            delete",[425,21961,21962],{"class":701}," m_Height;",[425,21964,21965],{"class":1216}," \u002F\u002F释放堆区内存\n",[425,21967,21968,21971,21973,21975,21977],{"class":427,"line":8972},[425,21969,21970],{"class":701},"            m_Height",[425,21972,1204],{"class":1155},[425,21974,3392],{"class":691},[425,21976,1213],{"class":701},[425,21978,21979],{"class":1216}," \u002F\u002F防止野指针\n",[425,21981,21982],{"class":427,"line":8977},[425,21983,3529],{"class":701},[425,21985,21986,21988,21990],{"class":427,"line":8983},[425,21987,4451],{"class":701},[425,21989,2190],{"class":1155},[425,21991,21992],{"class":435},"\"Person的析构函数调用\"\n",[425,21994,21995],{"class":427,"line":9010},[425,21996,3187],{"class":701},[425,21998,21999,22001],{"class":427,"line":9015},[425,22000,2985],{"class":1155},[425,22002,16663],{"class":701},[425,22004,22005,22007,22009,22012],{"class":427,"line":9021},[425,22006,2985],{"class":1155},[425,22008,7518],{"class":1155},[425,22010,22011],{"class":701},"m_Height;",[425,22013,22014],{"class":1216}," \u002F\u002F定义一个指针，指向身高\n",[425,22016,22017],{"class":427,"line":9033},[425,22018,4995],{"class":701},[425,22020,22021,22023,22025],{"class":427,"line":9045},[425,22022,6364],{"class":1155},[425,22024,6588],{"class":431},[425,22026,2976],{"class":701},[425,22028,22029],{"class":427,"line":9057},[425,22030,2559],{"class":701},[425,22032,22033,22035,22037,22039,22041,22043,22046],{"class":427,"line":10715},[425,22034,20428],{"class":701},[425,22036,8130],{"class":431},[425,22038,1159],{"class":701},[425,22040,1798],{"class":691},[425,22042,1527],{"class":701},[425,22044,22045],{"class":691},"160",[425,22047,3719],{"class":701},[425,22049,22050,22052,22054,22057,22059,22062,22064,22067,22069,22072,22074,22076],{"class":427,"line":10740},[425,22051,2564],{"class":701},[425,22053,2190],{"class":1155},[425,22055,22056],{"class":435},"\"p1的年龄为:\"",[425,22058,2190],{"class":1155},[425,22060,22061],{"class":701},"p1.m_Age",[425,22063,2190],{"class":1155},[425,22065,22066],{"class":435},"\"身高为：\"",[425,22068,7419],{"class":1155},[425,22070,22071],{"class":701},"p1.m_Height",[425,22073,2190],{"class":1155},[425,22075,2255],{"class":701},[425,22077,22078],{"class":1216},"  \u002F\u002F18\n",[425,22080,22081,22083,22085],{"class":427,"line":10763},[425,22082,20428],{"class":701},[425,22084,8033],{"class":431},[425,22086,18512],{"class":701},[425,22088,22089,22091,22093,22096,22098,22100,22102,22104,22106,22109,22111,22113],{"class":427,"line":10787},[425,22090,2564],{"class":701},[425,22092,2190],{"class":1155},[425,22094,22095],{"class":435},"\"p2的年龄为：\"",[425,22097,2190],{"class":1155},[425,22099,20458],{"class":701},[425,22101,2190],{"class":1155},[425,22103,22066],{"class":435},[425,22105,7419],{"class":1155},[425,22107,22108],{"class":701},"p2.m_Height",[425,22110,2190],{"class":1155},[425,22112,2255],{"class":701},[425,22114,22078],{"class":1216},[425,22116,22117],{"class":427,"line":10792},[425,22118,14209],{"class":701},[425,22120,22121],{"class":427,"line":10797},[425,22122,2578],{"class":701},[425,22124,22125,22127,22129],{"class":427,"line":10802},[425,22126,1162],{"class":1155},[425,22128,2973],{"class":431},[425,22130,2976],{"class":701},[425,22132,22133],{"class":427,"line":10811},[425,22134,2559],{"class":701},[425,22136,22137,22139],{"class":427,"line":10816},[425,22138,6633],{"class":431},[425,22140,6636],{"class":701},[425,22142,22143],{"class":427,"line":10822},[425,22144,2578],{"class":701},[19,22146,22147],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,22149,22150],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,22152,22153],{},[393,22154],{"alt":395,"src":22155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,22157,22158],{},"浅拷贝问题要使用深拷贝来解决",[19,22160,22161],{},[393,22162],{"alt":395,"src":22163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,22165,22166],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[14,22168,22170],{"id":22169},"_826初始化列表","8.2.6初始化列表",[19,22172,22173],{},"作用：初始化属性",[19,22175,6181],{},[416,22177,22180],{"className":22178,"code":22179,"language":6187},[6185],"构造函数():属性1(值1),属性2(值2).....{}\n",[422,22181,22179],{"__ignoreMap":395},[19,22183,22184],{},"例子",[416,22186,22188],{"className":1146,"code":22187,"language":1148,"meta":395,"style":395},"#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",[422,22189,22190,22196,22206,22212,22216,22221,22225,22230,22235,22240,22245,22250,22255,22259,22264,22269,22312,22321,22339,22357,22375,22379,22383,22390,22397,22404,22408,22412,22420,22424,22428,22448,22457,22461,22465,22475,22479,22487],{"__ignoreMap":395},[425,22191,22192,22194],{"class":427,"line":428},[425,22193,2950],{"class":1155},[425,22195,2953],{"class":435},[425,22197,22198,22200,22202,22204],{"class":427,"line":698},[425,22199,2958],{"class":1155},[425,22201,2961],{"class":1155},[425,22203,2964],{"class":431},[425,22205,2307],{"class":701},[425,22207,22208,22210],{"class":427,"line":710},[425,22209,15691],{"class":1155},[425,22211,16168],{"class":431},[425,22213,22214],{"class":427,"line":721},[425,22215,2559],{"class":701},[425,22217,22218],{"class":427,"line":735},[425,22219,22220],{"class":1155},"    public:\n",[425,22222,22223],{"class":427,"line":743},[425,22224,3400],{"emptyLinePlaceholder":1084},[425,22226,22227],{"class":427,"line":751},[425,22228,22229],{"class":1216},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[425,22231,22232],{"class":427,"line":759},[425,22233,22234],{"class":1216},"    \u002F\u002FPerson(int a, int b, int c) {\n",[425,22236,22237],{"class":427,"line":770},[425,22238,22239],{"class":1216},"    \u002F\u002F  m_A = a;\n",[425,22241,22242],{"class":427,"line":780},[425,22243,22244],{"class":1216},"    \u002F\u002F  m_B = b;\n",[425,22246,22247],{"class":427,"line":790},[425,22248,22249],{"class":1216},"    \u002F\u002F  m_C = c;\n",[425,22251,22252],{"class":427,"line":805},[425,22253,22254],{"class":1216},"    \u002F\u002F}\n",[425,22256,22257],{"class":427,"line":818},[425,22258,3400],{"emptyLinePlaceholder":1084},[425,22260,22261],{"class":427,"line":831},[425,22262,22263],{"class":1216},"    \u002F\u002F初始化列表方式初始化\n",[425,22265,22266],{"class":427,"line":841},[425,22267,22268],{"class":1216},"    \u002F\u002F使用有参构造函数\n",[425,22270,22271,22273,22275,22277,22279,22281,22283,22285,22287,22289,22291,22294,22297,22300,22303,22306,22309],{"class":427,"line":852},[425,22272,19516],{"class":431},[425,22274,1159],{"class":701},[425,22276,1162],{"class":1155},[425,22278,2412],{"class":6216},[425,22280,13434],{"class":701},[425,22282,1162],{"class":1155},[425,22284,3833],{"class":6216},[425,22286,13434],{"class":701},[425,22288,1162],{"class":1155},[425,22290,3849],{"class":6216},[425,22292,22293],{"class":701},") :",[425,22295,22296],{"class":431},"m_A",[425,22298,22299],{"class":701},"(a), ",[425,22301,22302],{"class":431},"m_B",[425,22304,22305],{"class":701},"(b), ",[425,22307,22308],{"class":431},"m_C",[425,22310,22311],{"class":701},"(c) {}\n",[425,22313,22314,22316,22319],{"class":427,"line":862},[425,22315,15906],{"class":1155},[425,22317,22318],{"class":431}," PrintPerson",[425,22320,11852],{"class":701},[425,22322,22323,22325,22327,22330,22332,22335,22337],{"class":427,"line":878},[425,22324,10668],{"class":701},[425,22326,2190],{"class":1155},[425,22328,22329],{"class":435}," \"mA:\"",[425,22331,2458],{"class":1155},[425,22333,22334],{"class":701}," m_A ",[425,22336,2190],{"class":1155},[425,22338,9840],{"class":701},[425,22340,22341,22343,22345,22348,22350,22353,22355],{"class":427,"line":914},[425,22342,10668],{"class":701},[425,22344,2190],{"class":1155},[425,22346,22347],{"class":435}," \"mB:\"",[425,22349,2458],{"class":1155},[425,22351,22352],{"class":701}," m_B ",[425,22354,2190],{"class":1155},[425,22356,9840],{"class":701},[425,22358,22359,22361,22363,22366,22368,22371,22373],{"class":427,"line":943},[425,22360,10668],{"class":701},[425,22362,2190],{"class":1155},[425,22364,22365],{"class":435}," \"mC:\"",[425,22367,2458],{"class":1155},[425,22369,22370],{"class":701}," m_C ",[425,22372,2190],{"class":1155},[425,22374,9840],{"class":701},[425,22376,22377],{"class":427,"line":956},[425,22378,3187],{"class":701},[425,22380,22381],{"class":427,"line":964},[425,22382,16219],{"class":1155},[425,22384,22385,22387],{"class":427,"line":2733},[425,22386,2985],{"class":1155},[425,22388,22389],{"class":701}," m_A;\n",[425,22391,22392,22394],{"class":427,"line":2750},[425,22393,2985],{"class":1155},[425,22395,22396],{"class":701}," m_B;\n",[425,22398,22399,22401],{"class":427,"line":2755},[425,22400,2985],{"class":1155},[425,22402,22403],{"class":701}," m_C;\n",[425,22405,22406],{"class":427,"line":2760},[425,22407,4995],{"class":701},[425,22409,22410],{"class":427,"line":2765},[425,22411,3400],{"emptyLinePlaceholder":1084},[425,22413,22414,22416,22418],{"class":427,"line":2779},[425,22415,1162],{"class":1155},[425,22417,2973],{"class":431},[425,22419,6978],{"class":701},[425,22421,22422],{"class":427,"line":2784},[425,22423,2559],{"class":701},[425,22425,22426],{"class":427,"line":3577},[425,22427,3400],{"emptyLinePlaceholder":1084},[425,22429,22430,22432,22434,22436,22438,22440,22442,22444,22446],{"class":427,"line":3591},[425,22431,20428],{"class":701},[425,22433,19],{"class":431},[425,22435,1159],{"class":701},[425,22437,1367],{"class":691},[425,22439,13434],{"class":701},[425,22441,1235],{"class":691},[425,22443,13434],{"class":701},[425,22445,1229],{"class":691},[425,22447,3719],{"class":701},[425,22449,22450,22452,22455],{"class":427,"line":3599},[425,22451,16863],{"class":701},[425,22453,22454],{"class":431},"PrintPerson",[425,22456,6636],{"class":701},[425,22458,22459],{"class":427,"line":3604},[425,22460,3400],{"emptyLinePlaceholder":1084},[425,22462,22463],{"class":427,"line":3610},[425,22464,3400],{"emptyLinePlaceholder":1084},[425,22466,22467,22469,22471,22473],{"class":427,"line":3616},[425,22468,3303],{"class":431},[425,22470,1159],{"class":701},[425,22472,3308],{"class":435},[425,22474,3719],{"class":701},[425,22476,22477],{"class":427,"line":3621},[425,22478,3400],{"emptyLinePlaceholder":1084},[425,22480,22481,22483,22485],{"class":427,"line":8948},[425,22482,5090],{"class":1155},[425,22484,5093],{"class":691},[425,22486,2307],{"class":701},[425,22488,22489],{"class":427,"line":8972},[425,22490,2578],{"class":701},[19,22492,22493,22494,22497,22498],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[400,22495,22496],{},"参数名就是定义的对象属性","，",[400,22499,22500],{},"属性后面的值为有参构造函数的形参",[416,22502,22504],{"className":1146,"code":22503,"language":1148,"meta":395,"style":395},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[422,22505,22506],{"__ignoreMap":395},[425,22507,22508,22510,22512,22514,22517,22519,22522,22524,22527,22529,22532,22534,22537,22539],{"class":427,"line":428},[425,22509,20043],{"class":431},[425,22511,1159],{"class":701},[425,22513,1162],{"class":1155},[425,22515,22516],{"class":701}," a.",[425,22518,1162],{"class":1155},[425,22520,22521],{"class":701}," b,",[425,22523,1162],{"class":1155},[425,22525,22526],{"class":701}," b):",[425,22528,22296],{"class":431},[425,22530,22531],{"class":701},"(a),",[425,22533,22302],{"class":431},[425,22535,22536],{"class":701},"(c),",[425,22538,22308],{"class":431},[425,22540,22541],{"class":701},"(b) {}\n",[14,22543,22545],{"id":22544},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,22547,22548],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,22550,15630],{},[416,22552,22554],{"className":1146,"code":22553,"language":1148,"meta":395,"style":395},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[422,22555,22556,22561,22566,22570,22575,22579],{"__ignoreMap":395},[425,22557,22558],{"class":427,"line":428},[425,22559,22560],{"class":701},"A{};\n",[425,22562,22563],{"class":427,"line":698},[425,22564,22565],{"class":701},"B\n",[425,22567,22568],{"class":427,"line":710},[425,22569,2559],{"class":701},[425,22571,22572],{"class":427,"line":721},[425,22573,22574],{"class":701},"    A a;\n",[425,22576,22577],{"class":427,"line":735},[425,22578,2578],{"class":701},[425,22580,22581],{"class":427,"line":743},[425,22582,22583],{"class":1216},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,22585,22586],{},"案例",[416,22588,22590],{"className":1146,"code":22589,"language":1148,"meta":395,"style":395},"\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",[422,22591,22592,22597,22604,22608,22613,22618,22632,22636,22646,22657,22661,22668,22672,22685,22689,22694,22699,22703,22709,22713,22717,22721,22752,22756,22767,22771,22777,22781,22794,22798,22802,22806,22811,22816,22820,22828,22832,22849,22868,22872,22880,22884,22890],{"__ignoreMap":395},[425,22593,22594],{"class":427,"line":428},[425,22595,22596],{"class":1216},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[425,22598,22599,22601],{"class":427,"line":698},[425,22600,15691],{"class":1155},[425,22602,22603],{"class":431}," Phone\n",[425,22605,22606],{"class":427,"line":710},[425,22607,2559],{"class":701},[425,22609,22610],{"class":427,"line":721},[425,22611,22612],{"class":701},"public：\n",[425,22614,22615],{"class":427,"line":735},[425,22616,22617],{"class":1216},"    \u002F\u002F 赋值(构造函数)\n",[425,22619,22620,22623,22625,22627,22630],{"class":427,"line":743},[425,22621,22622],{"class":431},"    Phone",[425,22624,1159],{"class":701},[425,22626,15914],{"class":431},[425,22628,22629],{"class":6216}," pName",[425,22631,1165],{"class":701},[425,22633,22634],{"class":427,"line":751},[425,22635,3030],{"class":701},[425,22637,22638,22641,22643],{"class":427,"line":759},[425,22639,22640],{"class":701},"        m_pName",[425,22642,1204],{"class":1155},[425,22644,22645],{"class":701},"pName;\n",[425,22647,22648,22650,22652,22655],{"class":427,"line":770},[425,22649,4451],{"class":701},[425,22651,2190],{"class":1155},[425,22653,22654],{"class":435},"\"Phone的构造函数调用\"",[425,22656,2307],{"class":701},[425,22658,22659],{"class":427,"line":780},[425,22660,3187],{"class":701},[425,22662,22663,22666],{"class":427,"line":790},[425,22664,22665],{"class":431},"    ~Phone",[425,22667,2976],{"class":701},[425,22669,22670],{"class":427,"line":805},[425,22671,3030],{"class":701},[425,22673,22674,22676,22678,22681,22683],{"class":427,"line":818},[425,22675,4451],{"class":701},[425,22677,2190],{"class":1155},[425,22679,22680],{"class":435},"\"Phone析构函数调用\"",[425,22682,2190],{"class":1155},[425,22684,2212],{"class":701},[425,22686,22687],{"class":427,"line":831},[425,22688,3187],{"class":701},[425,22690,22691],{"class":427,"line":841},[425,22692,22693],{"class":1216},"    \u002F\u002F\n",[425,22695,22696],{"class":427,"line":852},[425,22697,22698],{"class":701},"    string m_PName;\n",[425,22700,22701],{"class":427,"line":862},[425,22702,4995],{"class":701},[425,22704,22705,22707],{"class":427,"line":878},[425,22706,15691],{"class":1155},[425,22708,16168],{"class":431},[425,22710,22711],{"class":427,"line":914},[425,22712,2559],{"class":701},[425,22714,22715],{"class":427,"line":943},[425,22716,15713],{"class":1155},[425,22718,22719],{"class":427,"line":956},[425,22720,17991],{"class":1216},[425,22722,22723,22725,22727,22729,22731,22733,22735,22738,22741,22743,22746,22749],{"class":427,"line":964},[425,22724,19516],{"class":431},[425,22726,1159],{"class":701},[425,22728,15914],{"class":431},[425,22730,15917],{"class":6216},[425,22732,1527],{"class":701},[425,22734,15914],{"class":431},[425,22736,22737],{"class":6216}," pname",[425,22739,22740],{"class":701},"):",[425,22742,16007],{"class":431},[425,22744,22745],{"class":701},"(name),m_phone.",[425,22747,22748],{"class":431},"m_PName",[425,22750,22751],{"class":701},"(pname) \n",[425,22753,22754],{"class":427,"line":2733},[425,22755,3030],{"class":701},[425,22757,22758,22760,22762,22765],{"class":427,"line":2750},[425,22759,4451],{"class":701},[425,22761,2190],{"class":1155},[425,22763,22764],{"class":435},"\"Person的构造函数调用\"",[425,22766,2307],{"class":701},[425,22768,22769],{"class":427,"line":2755},[425,22770,3187],{"class":701},[425,22772,22773,22775],{"class":427,"line":2760},[425,22774,19549],{"class":431},[425,22776,2976],{"class":701},[425,22778,22779],{"class":427,"line":2765},[425,22780,3030],{"class":701},[425,22782,22783,22785,22787,22790,22792],{"class":427,"line":2779},[425,22784,4451],{"class":701},[425,22786,2190],{"class":1155},[425,22788,22789],{"class":435},"\"Person析构函数调用\"",[425,22791,2190],{"class":1155},[425,22793,2212],{"class":701},[425,22795,22796],{"class":427,"line":2784},[425,22797,3187],{"class":701},[425,22799,22800],{"class":427,"line":3577},[425,22801,8780],{"class":1216},[425,22803,22804],{"class":427,"line":3591},[425,22805,15889],{"class":701},[425,22807,22808],{"class":427,"line":3599},[425,22809,22810],{"class":1216},"    \u002F\u002F手机\n",[425,22812,22813],{"class":427,"line":3604},[425,22814,22815],{"class":701},"    Phone m_Phone;\n",[425,22817,22818],{"class":427,"line":3610},[425,22819,4995],{"class":701},[425,22821,22822,22824,22826],{"class":427,"line":3616},[425,22823,6364],{"class":1155},[425,22825,6588],{"class":431},[425,22827,2976],{"class":701},[425,22829,22830],{"class":427,"line":3621},[425,22831,2559],{"class":701},[425,22833,22834,22836,22838,22840,22842,22844,22847],{"class":427,"line":8948},[425,22835,20428],{"class":701},[425,22837,19],{"class":431},[425,22839,1159],{"class":701},[425,22841,8916],{"class":435},[425,22843,1527],{"class":701},[425,22845,22846],{"class":435},"\"安卓\"",[425,22848,3719],{"class":701},[425,22850,22851,22853,22855,22858,22860,22863,22865],{"class":427,"line":8972},[425,22852,2564],{"class":701},[425,22854,2190],{"class":1155},[425,22856,22857],{"class":701},"p.Name",[425,22859,2190],{"class":1155},[425,22861,22862],{"class":435},"\"拿着：\"",[425,22864,2190],{"class":1155},[425,22866,22867],{"class":701},"p.m_phone.m_PName;\n",[425,22869,22870],{"class":427,"line":8977},[425,22871,2578],{"class":701},[425,22873,22874,22876,22878],{"class":427,"line":8983},[425,22875,1162],{"class":1155},[425,22877,2973],{"class":431},[425,22879,2976],{"class":701},[425,22881,22882],{"class":427,"line":9010},[425,22883,2559],{"class":701},[425,22885,22886,22888],{"class":427,"line":9015},[425,22887,6633],{"class":431},[425,22889,6636],{"class":701},[425,22891,22892],{"class":427,"line":9021},[425,22893,2578],{"class":701},[19,22895,970],{},[416,22897,22899],{"className":1146,"code":22898,"language":1148,"meta":395,"style":395},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[422,22900,22901,22906],{"__ignoreMap":395},[425,22902,22903],{"class":427,"line":428},[425,22904,22905],{"class":1216},"    \u002F\u002F不需要写这个：\n",[425,22907,22908],{"class":427,"line":698},[425,22909,22910],{"class":1216},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,22912,22913],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[416,22915,22917],{"className":1146,"code":22916,"language":1148,"meta":395,"style":395},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[422,22918,22919],{"__ignoreMap":395},[425,22920,22921,22923,22926,22928,22931,22934],{"class":427,"line":428},[425,22922,20043],{"class":431},[425,22924,22925],{"class":701},"(string name.string pname):",[425,22927,16007],{"class":431},[425,22929,22930],{"class":701},"(name),",[425,22932,22933],{"class":431},"m_phone",[425,22935,22936],{"class":701},"(pname) {}\n",[19,22938,22939,22940,1204,22943],{},"采用的是隐式转换法，实际为如下：\n",[422,22941,22942],{},"m_phone(pname)",[422,22944,22945],{},"Phone m_phone=pname",[19,22947,22948,22951],{},[400,22949,22950],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,22953,22954],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[14,22956,22958],{"id":22957},"_828静态对象","8.2.8静态对象",[19,22960,22961],{},"静态对象在成员对象前static，称为静态对象",[19,22963,22964],{},"静态对象分为两类：",[972,22966,22967],{},[450,22968,22969],{},"静态成员变量",[447,22971,22972,22975,22978],{},[450,22973,22974],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[450,22976,22977],{},"②在编译阶段分配内存",[450,22979,22980],{},"③类内声明，类外初始化",[972,22982,22983],{"start":698},[450,22984,22985],{},"静态成员函数",[447,22987,22988,22991],{},[450,22989,22990],{},"①所有对象共享同一个函数",[450,22992,22993],{},"②静态成员函数只能访问静态成员变量",[22995,22996,22998],"h4",{"id":22997},"_8281静态成员变量","8.2.8.1静态成员变量",[416,23000,23002],{"className":1146,"code":23001,"language":1148,"meta":395,"style":395},"#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",[422,23003,23004,23010,23020,23026,23030,23034,23039,23044,23049,23057,23061,23065,23069,23077,23081,23085,23090,23103,23107,23115,23119,23125],{"__ignoreMap":395},[425,23005,23006,23008],{"class":427,"line":428},[425,23007,2950],{"class":1155},[425,23009,2953],{"class":435},[425,23011,23012,23014,23016,23018],{"class":427,"line":698},[425,23013,2958],{"class":1155},[425,23015,2961],{"class":1155},[425,23017,2964],{"class":431},[425,23019,2307],{"class":701},[425,23021,23022,23024],{"class":427,"line":710},[425,23023,15691],{"class":1155},[425,23025,16168],{"class":431},[425,23027,23028],{"class":427,"line":721},[425,23029,2559],{"class":701},[425,23031,23032],{"class":427,"line":735},[425,23033,15713],{"class":1155},[425,23035,23036],{"class":427,"line":743},[425,23037,23038],{"class":1216},"    \u002F\u002F非静态成员变量\n",[425,23040,23041],{"class":427,"line":751},[425,23042,23043],{"class":1216},"    \u002F\u002F int m_A;\n",[425,23045,23046],{"class":427,"line":759},[425,23047,23048],{"class":1216},"    \u002F\u002F定义静态成员变量\n",[425,23050,23051,23053,23055],{"class":427,"line":770},[425,23052,12019],{"class":1155},[425,23054,3382],{"class":1155},[425,23056,22389],{"class":701},[425,23058,23059],{"class":427,"line":780},[425,23060,3400],{"emptyLinePlaceholder":1084},[425,23062,23063],{"class":427,"line":790},[425,23064,3400],{"emptyLinePlaceholder":1084},[425,23066,23067],{"class":427,"line":805},[425,23068,4995],{"class":701},[425,23070,23071,23073,23075],{"class":427,"line":818},[425,23072,6364],{"class":1155},[425,23074,6588],{"class":431},[425,23076,2976],{"class":701},[425,23078,23079],{"class":427,"line":831},[425,23080,2559],{"class":701},[425,23082,23083],{"class":427,"line":841},[425,23084,16310],{"class":701},[425,23086,23087],{"class":427,"line":852},[425,23088,23089],{"class":1216},"    \u002F\u002F输出类成员变量这块内存\n",[425,23091,23092,23094,23096,23099,23101],{"class":427,"line":862},[425,23093,2564],{"class":701},[425,23095,2190],{"class":1155},[425,23097,23098],{"class":701},"p.m_A",[425,23100,2190],{"class":1155},[425,23102,2212],{"class":701},[425,23104,23105],{"class":427,"line":878},[425,23106,2578],{"class":701},[425,23108,23109,23111,23113],{"class":427,"line":914},[425,23110,1162],{"class":1155},[425,23112,2973],{"class":431},[425,23114,2976],{"class":701},[425,23116,23117],{"class":427,"line":943},[425,23118,2559],{"class":701},[425,23120,23121,23123],{"class":427,"line":956},[425,23122,6633],{"class":431},[425,23124,2976],{"class":701},[425,23126,23127],{"class":427,"line":964},[425,23128,2578],{"class":701},[19,23130,23131],{},"此时输出是报错的：无法解析外部命令",[19,23133,23134],{},"解决这一问题：必须用到类内声明，类外初始化操作",[416,23136,23138],{"className":1146,"code":23137,"language":1148,"meta":395,"style":395},"#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",[422,23139,23140,23146,23156,23162,23166,23170,23175,23183,23187,23192,23207,23215,23219,23223,23228,23233,23245,23250,23261,23266,23271,23284,23288,23296,23300,23306],{"__ignoreMap":395},[425,23141,23142,23144],{"class":427,"line":428},[425,23143,2950],{"class":1155},[425,23145,2953],{"class":435},[425,23147,23148,23150,23152,23154],{"class":427,"line":698},[425,23149,2958],{"class":1155},[425,23151,2961],{"class":1155},[425,23153,2964],{"class":431},[425,23155,2307],{"class":701},[425,23157,23158,23160],{"class":427,"line":710},[425,23159,15691],{"class":1155},[425,23161,16168],{"class":431},[425,23163,23164],{"class":427,"line":721},[425,23165,2559],{"class":701},[425,23167,23168],{"class":427,"line":735},[425,23169,15713],{"class":1155},[425,23171,23172],{"class":427,"line":743},[425,23173,23174],{"class":1216},"    \u002F\u002F类内声明\n",[425,23176,23177,23179,23181],{"class":427,"line":751},[425,23178,12019],{"class":1155},[425,23180,3382],{"class":1155},[425,23182,22389],{"class":701},[425,23184,23185],{"class":427,"line":759},[425,23186,4995],{"class":701},[425,23188,23189],{"class":427,"line":770},[425,23190,23191],{"class":1216},"\u002F\u002F类外初始化\n",[425,23193,23194,23196,23198,23201,23203,23205],{"class":427,"line":780},[425,23195,1162],{"class":1155},[425,23197,16566],{"class":431},[425,23199,23200],{"class":701},"::m_A",[425,23202,1204],{"class":1155},[425,23204,1594],{"class":691},[425,23206,2307],{"class":701},[425,23208,23209,23211,23213],{"class":427,"line":790},[425,23210,6364],{"class":1155},[425,23212,6588],{"class":431},[425,23214,2976],{"class":701},[425,23216,23217],{"class":427,"line":805},[425,23218,2559],{"class":701},[425,23220,23221],{"class":427,"line":818},[425,23222,16310],{"class":701},[425,23224,23225],{"class":427,"line":831},[425,23226,23227],{"class":1216},"    \u002F\u002F访问变量的原内存空间\n",[425,23229,23230],{"class":427,"line":841},[425,23231,23232],{"class":1216},"    \u002F\u002F100\n",[425,23234,23235,23237,23239,23241,23243],{"class":427,"line":852},[425,23236,2564],{"class":701},[425,23238,2190],{"class":1155},[425,23240,23098],{"class":701},[425,23242,2190],{"class":1155},[425,23244,2212],{"class":701},[425,23246,23247],{"class":427,"line":862},[425,23248,23249],{"class":701},"    Person p2;\n",[425,23251,23252,23255,23257,23259],{"class":427,"line":878},[425,23253,23254],{"class":701},"    p2.m_A",[425,23256,1204],{"class":1155},[425,23258,2724],{"class":691},[425,23260,2307],{"class":701},[425,23262,23263],{"class":427,"line":914},[425,23264,23265],{"class":1216},"    \u002F\u002F继续访问这片空间\n",[425,23267,23268],{"class":427,"line":943},[425,23269,23270],{"class":1216},"    \u002F\u002F200\n",[425,23272,23273,23275,23277,23280,23282],{"class":427,"line":956},[425,23274,2564],{"class":701},[425,23276,2190],{"class":1155},[425,23278,23279],{"class":701},"p2.m_A",[425,23281,2190],{"class":1155},[425,23283,2212],{"class":701},[425,23285,23286],{"class":427,"line":964},[425,23287,2578],{"class":701},[425,23289,23290,23292,23294],{"class":427,"line":2733},[425,23291,1162],{"class":1155},[425,23293,2973],{"class":431},[425,23295,2976],{"class":701},[425,23297,23298],{"class":427,"line":2750},[425,23299,2559],{"class":701},[425,23301,23302,23304],{"class":427,"line":2755},[425,23303,6633],{"class":431},[425,23305,6636],{"class":701},[425,23307,23308],{"class":427,"line":2760},[425,23309,2578],{"class":701},[19,23311,23312],{},[400,23313,23314],{},"静态变量的访问",[416,23316,23318],{"className":1146,"code":23317,"language":1148,"meta":395,"style":395},"#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",[422,23319,23320,23326,23336,23342,23346,23350,23354,23362,23366,23371,23379,23383,23387,23401,23416,23424,23428,23433,23438,23443,23448,23460,23465,23470,23484,23501,23505,23513,23517,23523],{"__ignoreMap":395},[425,23321,23322,23324],{"class":427,"line":428},[425,23323,2950],{"class":1155},[425,23325,2953],{"class":435},[425,23327,23328,23330,23332,23334],{"class":427,"line":698},[425,23329,2958],{"class":1155},[425,23331,2961],{"class":1155},[425,23333,2964],{"class":431},[425,23335,2307],{"class":701},[425,23337,23338,23340],{"class":427,"line":710},[425,23339,15691],{"class":1155},[425,23341,16168],{"class":431},[425,23343,23344],{"class":427,"line":721},[425,23345,2559],{"class":701},[425,23347,23348],{"class":427,"line":735},[425,23349,15713],{"class":1155},[425,23351,23352],{"class":427,"line":743},[425,23353,23174],{"class":1216},[425,23355,23356,23358,23360],{"class":427,"line":751},[425,23357,12019],{"class":1155},[425,23359,3382],{"class":1155},[425,23361,22389],{"class":701},[425,23363,23364],{"class":427,"line":759},[425,23365,16219],{"class":1155},[425,23367,23368],{"class":427,"line":770},[425,23369,23370],{"class":1216},"    \u002F\u002F静态成员变量也是有访问权限的\n",[425,23372,23373,23375,23377],{"class":427,"line":780},[425,23374,12019],{"class":1155},[425,23376,3382],{"class":1155},[425,23378,22396],{"class":701},[425,23380,23381],{"class":427,"line":790},[425,23382,4995],{"class":701},[425,23384,23385],{"class":427,"line":805},[425,23386,23191],{"class":1216},[425,23388,23389,23391,23393,23395,23397,23399],{"class":427,"line":818},[425,23390,1162],{"class":1155},[425,23392,16566],{"class":431},[425,23394,23200],{"class":701},[425,23396,1204],{"class":1155},[425,23398,1594],{"class":691},[425,23400,2307],{"class":701},[425,23402,23403,23405,23407,23410,23412,23414],{"class":427,"line":831},[425,23404,1162],{"class":1155},[425,23406,16566],{"class":431},[425,23408,23409],{"class":701},"::m_B",[425,23411,1204],{"class":1155},[425,23413,1848],{"class":691},[425,23415,2307],{"class":701},[425,23417,23418,23420,23422],{"class":427,"line":841},[425,23419,6364],{"class":1155},[425,23421,6657],{"class":431},[425,23423,2976],{"class":701},[425,23425,23426],{"class":427,"line":852},[425,23427,2559],{"class":701},[425,23429,23430],{"class":427,"line":862},[425,23431,23432],{"class":1216},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[425,23434,23435],{"class":427,"line":878},[425,23436,23437],{"class":1216},"    \u002F\u002F静态成员变量有两种访问方式：\n",[425,23439,23440],{"class":427,"line":914},[425,23441,23442],{"class":1216},"    \u002F\u002F1.通过对象进行访问\n",[425,23444,23445],{"class":427,"line":943},[425,23446,23447],{"class":701},"    Person p;  \n",[425,23449,23450,23452,23454,23456,23458],{"class":427,"line":956},[425,23451,2564],{"class":701},[425,23453,2190],{"class":1155},[425,23455,23098],{"class":701},[425,23457,2190],{"class":1155},[425,23459,2212],{"class":701},[425,23461,23462],{"class":427,"line":964},[425,23463,23464],{"class":1216},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[425,23466,23467],{"class":427,"line":2733},[425,23468,23469],{"class":1216},"    \u002F\u002F2.通过类名进行访问\n",[425,23471,23472,23474,23476,23478,23480,23482],{"class":427,"line":2750},[425,23473,2564],{"class":701},[425,23475,2190],{"class":1155},[425,23477,20043],{"class":431},[425,23479,23200],{"class":701},[425,23481,2190],{"class":1155},[425,23483,2212],{"class":701},[425,23485,23486,23488,23490,23492,23494,23496,23498],{"class":427,"line":2755},[425,23487,2564],{"class":701},[425,23489,2190],{"class":1155},[425,23491,20043],{"class":431},[425,23493,23409],{"class":701},[425,23495,2190],{"class":1155},[425,23497,2255],{"class":701},[425,23499,23500],{"class":1216}," \u002F\u002F没有访问权限，报错\n",[425,23502,23503],{"class":427,"line":2760},[425,23504,2578],{"class":701},[425,23506,23507,23509,23511],{"class":427,"line":2765},[425,23508,1162],{"class":1155},[425,23510,2973],{"class":431},[425,23512,2976],{"class":701},[425,23514,23515],{"class":427,"line":2779},[425,23516,2559],{"class":701},[425,23518,23519,23521],{"class":427,"line":2784},[425,23520,6702],{"class":431},[425,23522,6636],{"class":701},[425,23524,23525],{"class":427,"line":3577},[425,23526,2578],{"class":701},[22995,23528,23530],{"id":23529},"_8282静态成员函数","8.2.8.2静态成员函数",[19,23532,23533],{},"1.静态成员函数定义与访问",[416,23535,23537],{"className":1146,"code":23536,"language":1148,"meta":395,"style":395},"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",[422,23538,23539,23545,23549,23553,23558,23569,23573,23587,23591,23595,23603,23607,23612,23617,23621,23629,23634,23644],{"__ignoreMap":395},[425,23540,23541,23543],{"class":427,"line":428},[425,23542,15691],{"class":1155},[425,23544,16168],{"class":431},[425,23546,23547],{"class":427,"line":698},[425,23548,2559],{"class":701},[425,23550,23551],{"class":427,"line":710},[425,23552,15713],{"class":1155},[425,23554,23555],{"class":427,"line":721},[425,23556,23557],{"class":1216},"    \u002F\u002F在公共权限下定义静态成员函数\n",[425,23559,23560,23562,23565,23567],{"class":427,"line":735},[425,23561,12019],{"class":1155},[425,23563,23564],{"class":1155}," void",[425,23566,12384],{"class":431},[425,23568,2976],{"class":701},[425,23570,23571],{"class":427,"line":743},[425,23572,3030],{"class":701},[425,23574,23575,23578,23580,23583,23585],{"class":427,"line":751},[425,23576,23577],{"class":701},"        coout",[425,23579,2190],{"class":1155},[425,23581,23582],{"class":435},"\"静态成员函数的调用\"",[425,23584,2190],{"class":1155},[425,23586,2212],{"class":701},[425,23588,23589],{"class":427,"line":759},[425,23590,3187],{"class":701},[425,23592,23593],{"class":427,"line":770},[425,23594,4995],{"class":701},[425,23596,23597,23599,23601],{"class":427,"line":780},[425,23598,6364],{"class":1155},[425,23600,6588],{"class":431},[425,23602,2976],{"class":701},[425,23604,23605],{"class":427,"line":790},[425,23606,2559],{"class":701},[425,23608,23609],{"class":427,"line":805},[425,23610,23611],{"class":1216},"    \u002F\u002F静态成员函数的调用方式:\n",[425,23613,23614],{"class":427,"line":818},[425,23615,23616],{"class":1216},"    \u002F\u002F1.通过对象访问\n",[425,23618,23619],{"class":427,"line":831},[425,23620,16310],{"class":701},[425,23622,23623,23625,23627],{"class":427,"line":841},[425,23624,16863],{"class":701},[425,23626,12550],{"class":431},[425,23628,6636],{"class":701},[425,23630,23631],{"class":427,"line":852},[425,23632,23633],{"class":1216},"    \u002F\u002F2.通过类名访问\n",[425,23635,23636,23638,23640,23642],{"class":427,"line":862},[425,23637,19516],{"class":431},[425,23639,18729],{"class":701},[425,23641,12550],{"class":431},[425,23643,6636],{"class":701},[425,23645,23646],{"class":427,"line":878},[425,23647,2578],{"class":701},[972,23649,23650],{"start":698},[450,23651,23652],{},"静态成员函数只能访问静态成员变量",[416,23654,23656],{"className":1146,"code":23655,"language":1148,"meta":395,"style":395},"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",[422,23657,23658,23664,23668,23672,23676,23686,23690,23704,23709,23721,23725,23736,23746,23750,23754,23758,23768,23772,23785,23789,23793,23797,23801,23815,23823,23827,23831,23835,23839,23847,23851,23861,23866,23870,23878,23882,23888],{"__ignoreMap":395},[425,23659,23660,23662],{"class":427,"line":428},[425,23661,15691],{"class":1155},[425,23663,16168],{"class":431},[425,23665,23666],{"class":427,"line":698},[425,23667,2559],{"class":701},[425,23669,23670],{"class":427,"line":710},[425,23671,15713],{"class":1155},[425,23673,23674],{"class":427,"line":721},[425,23675,23557],{"class":1216},[425,23677,23678,23680,23682,23684],{"class":427,"line":735},[425,23679,12019],{"class":1155},[425,23681,23564],{"class":1155},[425,23683,12384],{"class":431},[425,23685,2976],{"class":701},[425,23687,23688],{"class":427,"line":743},[425,23689,3030],{"class":701},[425,23691,23692,23695,23697,23699,23701],{"class":427,"line":751},[425,23693,23694],{"class":701},"        m_A",[425,23696,1204],{"class":1155},[425,23698,1460],{"class":691},[425,23700,1213],{"class":701},[425,23702,23703],{"class":1216}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[425,23705,23706],{"class":427,"line":759},[425,23707,23708],{"class":1216},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[425,23710,23711,23713,23715,23717,23719],{"class":427,"line":770},[425,23712,23577],{"class":701},[425,23714,2190],{"class":1155},[425,23716,23582],{"class":435},[425,23718,2190],{"class":1155},[425,23720,2212],{"class":701},[425,23722,23723],{"class":427,"line":780},[425,23724,3187],{"class":701},[425,23726,23727,23729,23731,23733],{"class":427,"line":790},[425,23728,12019],{"class":1155},[425,23730,3382],{"class":1155},[425,23732,16445],{"class":701},[425,23734,23735],{"class":1216}," \u002F\u002F静态成员变量\n",[425,23737,23738,23740,23743],{"class":427,"line":805},[425,23739,2985],{"class":1155},[425,23741,23742],{"class":701}," m_B;",[425,23744,23745],{"class":1216}," \u002F\u002F非静态成员变量\n",[425,23747,23748],{"class":427,"line":818},[425,23749,3400],{"emptyLinePlaceholder":1084},[425,23751,23752],{"class":427,"line":831},[425,23753,16219],{"class":1155},[425,23755,23756],{"class":427,"line":841},[425,23757,23370],{"class":1216},[425,23759,23760,23762,23764,23766],{"class":427,"line":852},[425,23761,12019],{"class":1155},[425,23763,23564],{"class":1155},[425,23765,14617],{"class":431},[425,23767,2976],{"class":701},[425,23769,23770],{"class":427,"line":862},[425,23771,3030],{"class":701},[425,23773,23774,23776,23778,23781,23783],{"class":427,"line":878},[425,23775,4451],{"class":701},[425,23777,2190],{"class":1155},[425,23779,23780],{"class":435},"\"这是私有权限下的静态函数调用\"",[425,23782,2190],{"class":1155},[425,23784,2212],{"class":701},[425,23786,23787],{"class":427,"line":914},[425,23788,3187],{"class":701},[425,23790,23791],{"class":427,"line":943},[425,23792,3400],{"emptyLinePlaceholder":1084},[425,23794,23795],{"class":427,"line":956},[425,23796,3400],{"emptyLinePlaceholder":1084},[425,23798,23799],{"class":427,"line":964},[425,23800,4995],{"class":701},[425,23802,23803,23805,23807,23809,23811,23813],{"class":427,"line":2733},[425,23804,1162],{"class":1155},[425,23806,16566],{"class":431},[425,23808,23200],{"class":701},[425,23810,1204],{"class":1155},[425,23812,1341],{"class":691},[425,23814,2307],{"class":701},[425,23816,23817,23819,23821],{"class":427,"line":2750},[425,23818,6364],{"class":1155},[425,23820,6588],{"class":431},[425,23822,2976],{"class":701},[425,23824,23825],{"class":427,"line":2755},[425,23826,2559],{"class":701},[425,23828,23829],{"class":427,"line":2760},[425,23830,23611],{"class":1216},[425,23832,23833],{"class":427,"line":2765},[425,23834,23616],{"class":1216},[425,23836,23837],{"class":427,"line":2779},[425,23838,16310],{"class":701},[425,23840,23841,23843,23845],{"class":427,"line":2784},[425,23842,16863],{"class":701},[425,23844,12550],{"class":431},[425,23846,6636],{"class":701},[425,23848,23849],{"class":427,"line":3577},[425,23850,23633],{"class":1216},[425,23852,23853,23855,23857,23859],{"class":427,"line":3591},[425,23854,19516],{"class":431},[425,23856,18729],{"class":701},[425,23858,12550],{"class":431},[425,23860,6636],{"class":701},[425,23862,23863],{"class":427,"line":3599},[425,23864,23865],{"class":1216},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[425,23867,23868],{"class":427,"line":3604},[425,23869,2578],{"class":701},[425,23871,23872,23874,23876],{"class":427,"line":3610},[425,23873,1162],{"class":1155},[425,23875,2973],{"class":431},[425,23877,2976],{"class":701},[425,23879,23880],{"class":427,"line":3616},[425,23881,2559],{"class":701},[425,23883,23884,23886],{"class":427,"line":3621},[425,23885,6633],{"class":431},[425,23887,6636],{"class":701},[425,23889,23890],{"class":427,"line":8948},[425,23891,2578],{"class":701},[14,23893,23895],{"id":23894},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22995,23897,23899],{"id":23898},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,23901,23902],{},"在c++中，类内的成员变量和成员函数分开存储",[19,23904,23905],{},"只有非静态成员变量才属于类的对象上",[23907,23908,23910],"h5",{"id":23909},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[416,23912,23914],{"className":1146,"code":23913,"language":1148,"meta":395,"style":395},"#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",[422,23915,23916,23923,23933,23939,23943,23947,23951,23959,23963,23967,23990,23994,24002,24006,24012],{"__ignoreMap":395},[425,23917,23918,23920],{"class":427,"line":428},[425,23919,2950],{"class":1155},[425,23921,23922],{"class":435},"\u003Ciostraem>\n",[425,23924,23925,23927,23929,23931],{"class":427,"line":698},[425,23926,2958],{"class":1155},[425,23928,2961],{"class":1155},[425,23930,2964],{"class":431},[425,23932,2307],{"class":701},[425,23934,23935,23937],{"class":427,"line":710},[425,23936,15691],{"class":1155},[425,23938,16168],{"class":431},[425,23940,23941],{"class":427,"line":721},[425,23942,2559],{"class":701},[425,23944,23945],{"class":427,"line":735},[425,23946,3400],{"emptyLinePlaceholder":1084},[425,23948,23949],{"class":427,"line":743},[425,23950,4995],{"class":701},[425,23952,23953,23955,23957],{"class":427,"line":751},[425,23954,6364],{"class":1155},[425,23956,6588],{"class":431},[425,23958,2976],{"class":701},[425,23960,23961],{"class":427,"line":759},[425,23962,2559],{"class":701},[425,23964,23965],{"class":427,"line":770},[425,23966,16310],{"class":701},[425,23968,23969,23971,23973,23976,23978,23981,23983,23985,23987],{"class":427,"line":780},[425,23970,2564],{"class":701},[425,23972,2190],{"class":1155},[425,23974,23975],{"class":435},"\"size of p=\"",[425,23977,2190],{"class":1155},[425,23979,23980],{"class":431},"sizeoif",[425,23982,7539],{"class":701},[425,23984,2190],{"class":1155},[425,23986,2255],{"class":701},[425,23988,23989],{"class":1216}," \u002F\u002F查看这个空类的占用的内存空间\n",[425,23991,23992],{"class":427,"line":790},[425,23993,2578],{"class":701},[425,23995,23996,23998,24000],{"class":427,"line":805},[425,23997,1162],{"class":1155},[425,23999,2973],{"class":431},[425,24001,2976],{"class":701},[425,24003,24004],{"class":427,"line":818},[425,24005,2559],{"class":701},[425,24007,24008,24010],{"class":427,"line":831},[425,24009,6633],{"class":431},[425,24011,6636],{"class":701},[425,24013,24014],{"class":427,"line":841},[425,24015,2578],{"class":701},[19,24017,24018],{},"输出结果为：size of p=1",[19,24020,24021],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,24023,24024],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23907,24026,24028],{"id":24027},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[416,24030,24032],{"className":1146,"code":24031,"language":1148,"meta":395,"style":395},"#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",[422,24033,24034,24040,24050,24058,24062,24071,24075,24083,24087,24091,24110,24114,24118,24126,24130,24136],{"__ignoreMap":395},[425,24035,24036,24038],{"class":427,"line":428},[425,24037,2950],{"class":1155},[425,24039,2953],{"class":435},[425,24041,24042,24044,24046,24048],{"class":427,"line":698},[425,24043,2958],{"class":1155},[425,24045,2961],{"class":1155},[425,24047,2964],{"class":431},[425,24049,2307],{"class":701},[425,24051,24052,24054,24056],{"class":427,"line":710},[425,24053,15691],{"class":1155},[425,24055,16566],{"class":431},[425,24057,3674],{"class":701},[425,24059,24060],{"class":427,"line":721},[425,24061,2559],{"class":701},[425,24063,24064,24066,24068],{"class":427,"line":735},[425,24065,2985],{"class":1155},[425,24067,16445],{"class":701},[425,24069,24070],{"class":1216},"\u002F\u002F非静态成员变量\n",[425,24072,24073],{"class":427,"line":743},[425,24074,4995],{"class":701},[425,24076,24077,24079,24081],{"class":427,"line":751},[425,24078,6364],{"class":1155},[425,24080,6588],{"class":431},[425,24082,2976],{"class":701},[425,24084,24085],{"class":427,"line":759},[425,24086,2559],{"class":701},[425,24088,24089],{"class":427,"line":770},[425,24090,16310],{"class":701},[425,24092,24093,24095,24097,24099,24101,24103,24105,24107],{"class":427,"line":780},[425,24094,2564],{"class":701},[425,24096,2190],{"class":1155},[425,24098,23975],{"class":435},[425,24100,2386],{"class":1155},[425,24102,7539],{"class":701},[425,24104,2190],{"class":1155},[425,24106,2255],{"class":701},[425,24108,24109],{"class":1216}," \u002F\u002F查看不是空对象时占用多少内存\n",[425,24111,24112],{"class":427,"line":790},[425,24113,3400],{"emptyLinePlaceholder":1084},[425,24115,24116],{"class":427,"line":805},[425,24117,2578],{"class":701},[425,24119,24120,24122,24124],{"class":427,"line":818},[425,24121,1162],{"class":1155},[425,24123,2973],{"class":431},[425,24125,2976],{"class":701},[425,24127,24128],{"class":427,"line":831},[425,24129,2559],{"class":701},[425,24131,24132,24134],{"class":427,"line":841},[425,24133,6633],{"class":431},[425,24135,6636],{"class":701},[425,24137,24138],{"class":427,"line":852},[425,24139,2578],{"class":701},[19,24141,24142],{},"输出结果：size of p=4",[19,24144,24145],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[972,24147,24148],{},[450,24149,24150],{},"如果加上非静态成员变量，Person类修改如下",[416,24152,24154],{"className":1146,"code":24153,"language":1148,"meta":395,"style":395},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[422,24155,24156,24162,24166,24172,24180,24184,24189],{"__ignoreMap":395},[425,24157,24158,24160],{"class":427,"line":428},[425,24159,15691],{"class":1155},[425,24161,16168],{"class":431},[425,24163,24164],{"class":427,"line":698},[425,24165,2559],{"class":701},[425,24167,24168,24170],{"class":427,"line":710},[425,24169,2985],{"class":1155},[425,24171,22389],{"class":701},[425,24173,24174,24176,24178],{"class":427,"line":721},[425,24175,12019],{"class":1155},[425,24177,3382],{"class":1155},[425,24179,22396],{"class":701},[425,24181,24182],{"class":427,"line":735},[425,24183,4995],{"class":701},[425,24185,24186],{"class":427,"line":743},[425,24187,24188],{"class":1216},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[425,24190,24191,24193,24195,24197,24199,24201],{"class":427,"line":751},[425,24192,1162],{"class":1155},[425,24194,16566],{"class":431},[425,24196,23409],{"class":701},[425,24198,1204],{"class":1155},[425,24200,1341],{"class":691},[425,24202,2307],{"class":701},[19,24204,24205],{},"输出结果：4",[19,24207,24208],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[972,24210,24211],{"start":698},[450,24212,24213],{},"加上非静态成员函数",[416,24215,24217],{"className":1146,"code":24216,"language":1148,"meta":395,"style":395},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[422,24218,24219,24226,24230,24236,24244,24248,24252,24256],{"__ignoreMap":395},[425,24220,24221,24223],{"class":427,"line":428},[425,24222,15691],{"class":1155},[425,24224,24225],{"class":431},"  Person\n",[425,24227,24228],{"class":427,"line":698},[425,24229,2559],{"class":701},[425,24231,24232,24234],{"class":427,"line":710},[425,24233,2985],{"class":1155},[425,24235,22389],{"class":701},[425,24237,24238,24240,24242],{"class":427,"line":721},[425,24239,15906],{"class":1155},[425,24241,12384],{"class":431},[425,24243,2976],{"class":701},[425,24245,24246],{"class":427,"line":735},[425,24247,3030],{"class":701},[425,24249,24250],{"class":427,"line":743},[425,24251,3400],{"emptyLinePlaceholder":1084},[425,24253,24254],{"class":427,"line":751},[425,24255,3187],{"class":701},[425,24257,24258],{"class":427,"line":759},[425,24259,4995],{"class":701},[19,24261,24262],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[972,24264,24265],{"start":710},[450,24266,24267],{},"加上静态成员函数",[416,24269,24271],{"className":1146,"code":24270,"language":1148,"meta":395,"style":395},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[422,24272,24273,24279,24283,24289,24297,24301,24305,24309,24320,24324,24328,24332],{"__ignoreMap":395},[425,24274,24275,24277],{"class":427,"line":428},[425,24276,15691],{"class":1155},[425,24278,24225],{"class":431},[425,24280,24281],{"class":427,"line":698},[425,24282,2559],{"class":701},[425,24284,24285,24287],{"class":427,"line":710},[425,24286,2985],{"class":1155},[425,24288,22389],{"class":701},[425,24290,24291,24293,24295],{"class":427,"line":721},[425,24292,15906],{"class":1155},[425,24294,12384],{"class":431},[425,24296,2976],{"class":701},[425,24298,24299],{"class":427,"line":735},[425,24300,3030],{"class":701},[425,24302,24303],{"class":427,"line":743},[425,24304,3400],{"emptyLinePlaceholder":1084},[425,24306,24307],{"class":427,"line":751},[425,24308,3187],{"class":701},[425,24310,24311,24313,24315,24318],{"class":427,"line":759},[425,24312,12019],{"class":1155},[425,24314,23564],{"class":1155},[425,24316,24317],{"class":431}," func1",[425,24319,2976],{"class":701},[425,24321,24322],{"class":427,"line":770},[425,24323,3030],{"class":701},[425,24325,24326],{"class":427,"line":780},[425,24327,3400],{"emptyLinePlaceholder":1084},[425,24329,24330],{"class":427,"line":790},[425,24331,3187],{"class":701},[425,24333,24334],{"class":427,"line":805},[425,24335,4995],{"class":701},[19,24337,24205],{},[19,24339,24340],{},"解释：静态成员函数也不属于类上",[1074,24342,8674],{},{"title":395,"searchDepth":698,"depth":698,"links":24344},[24345,24351],{"id":15642,"depth":698,"text":15643,"children":24346},[24347,24348,24349,24350],{"id":15646,"depth":710,"text":15647},{"id":16371,"depth":710,"text":16372},{"id":16543,"depth":710,"text":16544},{"id":17002,"depth":710,"text":17003},{"id":19374,"depth":698,"text":19375,"children":24352},[24353,24354,24355,24356,24357,24358,24359,24360,24361],{"id":19386,"depth":710,"text":19387},{"id":19679,"depth":710,"text":19680},{"id":20170,"depth":710,"text":20171},{"id":21267,"depth":710,"text":21268},{"id":21690,"depth":710,"text":21691},{"id":22169,"depth":710,"text":22170},{"id":22544,"depth":710,"text":22545},{"id":22957,"depth":710,"text":22958},{"id":23894,"depth":710,"text":23895},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":15607,"description":24362},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":24369,"title":1148,"body":24370,"description":24374,"extension":1082,"meta":24375,"navigation":1084,"path":24377,"seo":24378,"stem":24379,"__hash__":24380},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":24371,"toc":24372},[],{"title":395,"searchDepth":698,"depth":698,"links":24373},[],null,{"category":24376},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":1148,"description":24374},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":24382,"title":24383,"body":24384,"description":395,"extension":1082,"meta":24970,"navigation":1084,"path":24971,"seo":24972,"stem":24973,"__hash__":24974},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":24385,"toc":24952},[24386,24389,24393,24396,24399,24402,24420,24425,24428,24431,24434,24437,24442,24445,24450,24453,24456,24460,24463,24466,24472,24475,24493,24497,24501,24504,24509,24512,24516,24519,24532,24535,24539,24542,24545,24548,24572,24575,24584,24595,24610,24642,24646,24653,24661,24665,24668,24671,24676,24680,24683,24686,24691,24694,24698,24701,24704,24709,24712,24716,24721,24725,24791,24795,24798,24801,24804,24807,24810,24816,24835,24838,24852,24860,24864,24867,24870,24875,24878,24883,24888,24891,24894,24899,24904,24907,24912,24917,24920,24925,24930,24933,24936,24941,24944,24949],[10,24387,24383],{"id":24388},"_1强化学习基本认识",[1099,24390,24392],{"id":24391},"_11什么是强化学习","1.1.什么是强化学习",[19,24394,24395],{},"强化学习有两部分组成：智能体和环境；",[19,24397,24398],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,24400,24401],{},"强化学习与监督学习的区别:",[972,24403,24404,24407,24410,24413],{},[450,24405,24406],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[450,24408,24409],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[450,24411,24412],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[450,24414,24415,24416,24419],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[400,24417,24418],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,24421,24422],{},[393,24423],{"alt":395,"src":24424},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,24426,24427],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,24429,24430],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,24432,24433],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,24435,24436],{},"获取奖励",[19,24438,24439],{},[393,24440],{"alt":395,"src":24441},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,24443,24444],{},"强化学习可以分成标准强化学习和深度强化学习",[19,24446,24447],{},[393,24448],{"alt":395,"src":24449},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,24451,24452],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,24454,24455],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[1099,24457,24459],{"id":24458},"_12强化学习应用场景","1.2.强化学习应用场景",[19,24461,24462],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,24464,24465],{},"具身智能中的应用",[19,24467,24468,24471],{},[400,24469,24470],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,24473,24474],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,24476,24477,24478,24481,24482,24485,24486,24489,24490],{},"机器人是",[400,24479,24480],{},"躯体","，深度学习是",[400,24483,24484],{},"神经元****网络","，VLA是",[400,24487,24488],{},"通用的行为逻辑","，而强化学习是",[400,24491,24492],{},"教练",[1099,24494,24496],{"id":24495},"_13序列决策","1.3.序列决策",[14,24498,24500],{"id":24499},"_131智能体与环境","1.3.1.智能体与环境",[19,24502,24503],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,24505,24506],{},[393,24507],{"alt":395,"src":24508},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,24510,24511],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[14,24513,24515],{"id":24514},"_132奖励","1.3.2.奖励",[19,24517,24518],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,24520,24521,24522,24531],{},"取某个策略的表现如何。强化学习的目的就是",[400,24523,24524,24525,24530],{},"最大化",[400,24526,24527],{},[400,24528,24529],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,24533,24534],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[14,24536,24538],{"id":24537},"_133序列决策","1.3.3.序列决策",[19,24540,24541],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,24543,24544],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,24546,24547],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,24549,24550,24553,24554,24556,24557,24559,24560,24562,24563,978,24566,978,24569],{},[993,24551,24552],{},"Ht"," = ",[993,24555,1744],{},"1*, a",[993,24558,1367],{},", r",[993,24561,1367],{},", . . . ,* ",[993,24564,24565],{},"ot",[993,24567,24568],{},", at ,",[993,24570,24571],{},"rt",[19,24573,24574],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,24576,24577,24553,24580,2664,24582,895],{},[993,24578,24579],{},"st",[993,24581,1210],{},[993,24583,24552],{},[19,24585,24586,24587,24590,24591,24594],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[400,24588,24589],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[400,24592,24593],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,24596,24597,24598,24601,24602,24605,24606,24609],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[400,24599,24600],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[400,24603,24604],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[993,24607,24608],{},"S, A, T, R, Ω, O, γ",")。",[19,24611,24612,24613,24615,24616,24618,24619,1159,24621,24624,24625,24627,24628,1159,24631,24634,24635,24637,24638,24641],{},"其中 ",[993,24614,1837],{}," 表示状态空间，为隐变量，",[993,24617,1382],{}," 为动作空间，",[993,24620,1862],{},[993,24622,24623],{},"s ′ |s, a",") 为状态转移概率，",[993,24626,1812],{}," 为奖励函数，",[993,24629,24630],{},"Ω",[993,24632,24633],{},"o|s, a",") 为观测概率，",[993,24636,1738],{}," 为观测空间，",[993,24639,24640],{},"γ"," 为折扣因子。",[1099,24643,24645],{"id":24644},"_14动作空间","1.4.动作空间",[19,24647,24648,24649,24652],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[400,24650,24651],{},"动作空间"," ，动作空间分为:",[972,24654,24655,24658],{},[450,24656,24657],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[450,24659,24660],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[1099,24662,24664],{"id":24663},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,24666,24667],{},"由策略、价值函数、模型三部分组成",[19,24669,24670],{},"这三者组成马尔可夫决策过程",[19,24672,24673],{},[393,24674],{"alt":395,"src":24675},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[14,24677,24679],{"id":24678},"_151策略","1.5.1.策略",[19,24681,24682],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,24684,24685],{},"策略可分为两种：",[19,24687,24688],{},[393,24689],{"alt":395,"src":24690},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,24692,24693],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[14,24695,24697],{"id":24696},"_152价值函数","1.5.2.价值函数",[19,24699,24700],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,24702,24703],{},"价值函数中有一个折扣因子，类似于存款利息",[19,24705,24706],{},[393,24707],{"alt":395,"src":24708},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,24710,24711],{},"进入某个状态采取的最优动作可以通过Q函数得到",[14,24713,24715],{"id":24714},"_153模型","1.5.3.模型",[19,24717,24718],{},[393,24719],{"alt":395,"src":24720},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[1099,24722,24724],{"id":24723},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[35,24726,24727,24737],{},[38,24728,24729],{},[41,24730,24731,24734],{},[44,24732,24733],{"align":46},"类型",[44,24735,24736],{"align":46},"特点",[55,24738,24739,24749,24759,24769,24781],{},[41,24740,24741,24746],{},[60,24742,24743],{"align":46},[400,24744,24745],{},"基于价值的智能体",[60,24747,24748],{"align":46},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[41,24750,24751,24756],{},[60,24752,24753],{"align":46},[400,24754,24755],{},"基于策略的智能体",[60,24757,24758],{"align":46},"直接学习策略，没有学习价值函数",[41,24760,24761,24766],{},[60,24762,24763],{"align":46},[400,24764,24765],{},"演员-评论员智能体",[60,24767,24768],{"align":46},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[41,24770,24771,24776],{},[60,24772,24773],{"align":46},[400,24774,24775],{},"有模型强化学习智能体",[60,24777,24778],{"align":46},[393,24779],{"alt":395,"src":24780},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[41,24782,24783,24788],{},[60,24784,24785],{"align":46},[400,24786,24787],{},"免模型强化学习智能体",[60,24789,24790],{"align":46},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[1099,24792,24794],{"id":24793},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,24796,24797],{},"学习和规划是序列决策的两个基本问题",[19,24799,24800],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,24802,24803],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,24805,24806],{},"强化学习用到的库：Gym",[19,24808,24809],{},"Gym可以检验强化学习算法的优劣",[19,24811,24812,24815],{},[400,24813,24814],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[416,24817,24819],{"className":418,"code":24818,"language":420,"meta":395,"style":395},"pip install gym==0.25.2\n",[422,24820,24821],{"__ignoreMap":395},[425,24822,24823,24826,24829,24832],{"class":427,"line":428},[425,24824,24825],{"class":431},"pip",[425,24827,24828],{"class":435}," install",[425,24830,24831],{"class":435}," gym==",[425,24833,24834],{"class":691},"0.25.2\n",[19,24836,24837],{},"显示图形界面需要",[416,24839,24841],{"className":418,"code":24840,"language":420,"meta":395,"style":395},"pip install pygame\n",[422,24842,24843],{"__ignoreMap":395},[425,24844,24845,24847,24849],{"class":427,"line":428},[425,24846,24825],{"class":431},[425,24848,24828],{"class":435},[425,24850,24851],{"class":435}," pygame\n",[19,24853,24854,24855],{},"有关Gym库的相关文档介绍：",[22,24856,24859],{"href":24857,"rel":24858},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[26],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[1099,24861,24863],{"id":24862},"_18一些补充基础概念","1.8.一些补充基础概念",[19,24865,24866],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,24868,24869],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,24871,24872],{},[393,24873],{"alt":395,"src":24874},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,24876,24877],{},"折扣率需要自己来设定",[19,24879,24880],{},[393,24881],{"alt":395,"src":24882},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[972,24884,24885],{},[450,24886,24887],{},"状态转移函数：",[19,24889,24890],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,24892,24893],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,24895,24896],{},[393,24897],{"alt":395,"src":24898},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[972,24900,24901],{"start":698},[450,24902,24903],{},"动作价值函数：",[19,24905,24906],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,24908,24909],{},[393,24910],{"alt":395,"src":24911},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[972,24913,24914],{"start":710},[450,24915,24916],{},"最优动作价值函数：",[19,24918,24919],{},"这个函数是对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,24921,24922],{},[393,24923],{"alt":395,"src":24924},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[972,24926,24927],{"start":721},[450,24928,24929],{},"状态价值函数:",[19,24931,24932],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,24934,24935],{},"它衡量的是“一个具体动作”的长期价值",[19,24937,24938],{},[393,24939],{"alt":395,"src":24940},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,24942,24943],{},"几个价值函数之间的比较：",[19,24945,24946],{},[393,24947],{"alt":395,"src":24948},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[1074,24950,24951],{},"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":395,"searchDepth":698,"depth":698,"links":24953},[24954,24955,24956,24961,24962,24967,24968,24969],{"id":24391,"depth":698,"text":24392},{"id":24458,"depth":698,"text":24459},{"id":24495,"depth":698,"text":24496,"children":24957},[24958,24959,24960],{"id":24499,"depth":710,"text":24500},{"id":24514,"depth":710,"text":24515},{"id":24537,"depth":710,"text":24538},{"id":24644,"depth":698,"text":24645},{"id":24663,"depth":698,"text":24664,"children":24963},[24964,24965,24966],{"id":24678,"depth":710,"text":24679},{"id":24696,"depth":710,"text":24697},{"id":24714,"depth":710,"text":24715},{"id":24723,"depth":698,"text":24724},{"id":24793,"depth":698,"text":24794},{"id":24862,"depth":698,"text":24863},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":24383,"description":395},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24976,"title":24977,"body":24978,"description":24985,"extension":1082,"meta":24996,"navigation":1084,"path":24997,"seo":24998,"stem":24999,"__hash__":25000},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24979,"toc":24994},[24980,24983,24986,24991],[10,24981,24977],{"id":24982},"_2马尔可夫决策过程",[19,24984,24985],{},"这是强化学习的基本框架",[19,24987,24988],{},[393,24989],{"alt":395,"src":24990},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,24992,24993],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":395,"searchDepth":698,"depth":698,"links":24995},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24977,"description":24985},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":25002,"title":25003,"body":25004,"description":395,"extension":1082,"meta":25120,"navigation":1084,"path":25121,"seo":25122,"stem":25123,"__hash__":25124},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":25005,"toc":25115},[25006,25009,25013,25016,25021,25026,25029,25034,25037,25042,25045,25049,25054,25057,25062,25067,25072,25075,25079,25084,25087,25092,25097,25102,25107,25110],[10,25007,25003],{"id":25008},"_3动作价值函数",[1099,25010,25012],{"id":25011},"_31dqn","3.1.DQN",[19,25014,25015],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,25017,25018],{},[393,25019],{"alt":395,"src":25020},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,25022,25023],{},[393,25024],{"alt":395,"src":25025},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,25027,25028],{},"DQN算法的描述：",[19,25030,25031],{},[393,25032],{"alt":395,"src":25033},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,25035,25036],{},"这里的Dense指的是全连接层",[19,25038,25039],{},[393,25040],{"alt":395,"src":25041},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,25043,25044],{},"当前观测的状态为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算法",[1099,25046,25048],{"id":25047},"_32dqn的举例","3.2.DQN的举例",[19,25050,25051],{},[393,25052],{"alt":395,"src":25053},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,25055,25056],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,25058,25059],{},[393,25060],{"alt":395,"src":25061},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,25063,25064],{},[393,25065],{"alt":395,"src":25066},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,25068,25069],{},[393,25070],{"alt":395,"src":25071},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,25073,25074],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[1099,25076,25078],{"id":25077},"_33td算法","3.3.TD算法",[19,25080,25081],{},[393,25082],{"alt":395,"src":25083},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,25085,25086],{},"强化学习TD算法公式的粗略解释：",[19,25088,25089],{},[393,25090],{"alt":395,"src":25091},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,25093,25094],{},[393,25095],{"alt":395,"src":25096},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,25098,25099],{},[393,25100],{"alt":395,"src":25101},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,25103,25104],{},[393,25105],{"alt":395,"src":25106},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,25108,25109],{},"TD算法总结：",[19,25111,25112],{},[393,25113],{"alt":395,"src":25114},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":395,"searchDepth":698,"depth":698,"links":25116},[25117,25118,25119],{"id":25011,"depth":698,"text":25012},{"id":25047,"depth":698,"text":25048},{"id":25077,"depth":698,"text":25078},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":25003,"description":395},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":25126,"title":25127,"body":25128,"description":395,"extension":1082,"meta":25361,"navigation":1084,"path":25362,"seo":25363,"stem":25364,"__hash__":25365},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":25129,"toc":25357},[25130,25133,25137,25140,25143,25148,25153,25156,25161,25166,25169,25174,25177,25182,25185,25190,25193,25198,25201,25206,25211,25214,25219,25222,25225,25230,25233,25238,25243,25247,25250,25253,25258,25263,25266,25271,25276,25279,25284,25287,25290,25295,25298,25303,25306,25311,25316,25319,25324,25329,25332,25337,25340,25345,25348],[10,25131,25127],{"id":25132},"_4策略学习",[1099,25134,25136],{"id":25135},"_41概念描述","4.1.概念描述",[19,25138,25139],{},"用神经网络（策略网络）近似策略函数",[19,25141,25142],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,25144,25145],{},[393,25146],{"alt":395,"src":25147},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,25149,25150],{},[393,25151],{"alt":395,"src":25152},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,25154,25155],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,25157,25158],{},[393,25159],{"alt":395,"src":25160},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,25162,25163],{},[393,25164],{"alt":395,"src":25165},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,25167,25168],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,25170,25171],{},[393,25172],{"alt":395,"src":25173},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,25175,25176],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,25178,25179],{},[393,25180],{"alt":395,"src":25181},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,25183,25184],{},"改进theta要用到策略梯度算法",[19,25186,25187],{},[393,25188],{"alt":395,"src":25189},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,25191,25192],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,25194,25195],{},[393,25196],{"alt":395,"src":25197},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,25199,25200],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,25202,25203],{},[393,25204],{"alt":395,"src":25205},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,25207,25208],{},[393,25209],{"alt":395,"src":25210},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,25212,25213],{},"梯度公式总结：",[19,25215,25216],{},[393,25217],{"alt":395,"src":25218},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,25220,25221],{},"两个公式的分别应用场景：",[19,25223,25224],{},"对于离散的动作：",[19,25226,25227],{},[393,25228],{"alt":395,"src":25229},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,25231,25232],{},"对于连续的动作：",[19,25234,25235],{},[393,25236],{"alt":395,"src":25237},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,25239,25240],{},[393,25241],{"alt":395,"src":25242},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[1099,25244,25246],{"id":25245},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,25248,25249],{},"使用蒙特卡洛来近似计算策略梯度",[19,25251,25252],{},"蒙特卡洛法的解释如下：",[19,25254,25255],{},[393,25256],{"alt":395,"src":25257},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,25259,25260],{},[393,25261],{"alt":395,"src":25262},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,25264,25265],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[972,25267,25268],{},[450,25269,25270],{},"方法一：reinforce算法",[19,25272,25273],{},[393,25274],{"alt":395,"src":25275},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,25277,25278],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[972,25280,25281],{"start":698},[450,25282,25283],{},"方法二：actor-critic算法",[19,25285,25286],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,25288,25289],{},"两个网络的构建：",[19,25291,25292],{},[393,25293],{"alt":395,"src":25294},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,25296,25297],{},"actor网路：",[19,25299,25300],{},[393,25301],{"alt":395,"src":25302},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,25304,25305],{},"critic网络",[19,25307,25308],{},[393,25309],{"alt":395,"src":25310},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[972,25312,25313],{"start":710},[450,25314,25315],{},"网络的训练",[19,25317,25318],{},"网络描述",[19,25320,25321],{},[393,25322],{"alt":395,"src":25323},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,25325,25326],{},[393,25327],{"alt":395,"src":25328},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,25330,25331],{},"TD算法更新梯度：",[19,25333,25334],{},[393,25335],{"alt":395,"src":25336},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,25338,25339],{},"策略网络更新梯度：",[19,25341,25342],{},[393,25343],{"alt":395,"src":25344},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,25346,25347],{},"训练整个流程的具体描述：",[19,25349,25350,25353,25354],{},[393,25351],{"alt":395,"src":25352},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[393,25355],{"alt":395,"src":25356},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":395,"searchDepth":698,"depth":698,"links":25358},[25359,25360],{"id":25135,"depth":698,"text":25136},{"id":25245,"depth":698,"text":25246},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":25127,"description":395},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":25367,"title":25368,"body":25369,"description":25376,"extension":1082,"meta":25426,"navigation":1084,"path":25427,"seo":25428,"stem":25429,"__hash__":25430},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":25370,"toc":25422},[25371,25374,25377,25381,25384,25389,25393,25396,25401,25404,25409,25414,25417],[10,25372,25368],{"id":25373},"_5alphago算法",[19,25375,25376],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[1099,25378,25380],{"id":25379},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,25382,25383],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,25385,25386],{},[393,25387],{"alt":395,"src":25388},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[1099,25390,25392],{"id":25391},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,25394,25395],{},"采用强化学习的方式训练策略网络",[19,25397,25398],{},[393,25399],{"alt":395,"src":25400},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,25402,25403],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,25405,25406],{},[393,25407],{"alt":395,"src":25408},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,25410,25411],{},[393,25412],{"alt":395,"src":25413},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,25415,25416],{},"强化学习训练策略网络的总结：",[19,25418,25419],{},[393,25420],{"alt":395,"src":25421},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":395,"searchDepth":698,"depth":698,"links":25423},[25424,25425],{"id":25379,"depth":698,"text":25380},{"id":25391,"depth":698,"text":25392},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":25368,"description":25376},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":25432,"title":25433,"body":25434,"description":25441,"extension":1082,"meta":25444,"navigation":1084,"path":25445,"seo":25446,"stem":25447,"__hash__":25448},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":25435,"toc":25442},[25436,25439],[10,25437,25433],{"id":25438},"_6价值网络",[19,25440,25441],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":395,"searchDepth":698,"depth":698,"links":25443},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":25433,"description":25441},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":25450,"title":25451,"body":25452,"description":25456,"extension":1082,"meta":25457,"navigation":1084,"path":25458,"seo":25459,"stem":25460,"__hash__":25461},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":25453,"toc":25454},[],{"title":395,"searchDepth":698,"depth":698,"links":25455},[],"记录自己的强化学习笔记。",{"category":24376},"\u002Fwiki\u002F2025-12-04",{"title":25451,"description":25456},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":25463,"title":25464,"body":25465,"description":24374,"extension":1082,"meta":25504,"navigation":1084,"path":25505,"seo":25506,"stem":25507,"__hash__":25508},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":25466,"toc":25502},[25467,25470,25473,25479,25482,25488,25491,25496,25499],[10,25468,25464],{"id":25469},"_1-项目概览与官方资源",[19,25471,25472],{},"官方文档：",[19,25474,25475],{},[22,25476,25477],{"href":25477,"rel":25478},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[26],[19,25480,25481],{},"官方代码仓库：",[19,25483,25484],{},[22,25485,25486],{"href":25486,"rel":25487},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[26],[19,25489,25490],{},"复现大体流程：",[19,25492,25493],{},[393,25494],{"alt":395,"src":25495},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,25497,25498],{},"本教程的目标是打通这条链路：",[19,25500,25501],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":395,"searchDepth":698,"depth":698,"links":25503},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":25464,"description":24374},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":25510,"title":25511,"body":25512,"description":24374,"extension":1082,"meta":25627,"navigation":1084,"path":25628,"seo":25629,"stem":25630,"__hash__":25631},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":25513,"toc":25622},[25514,25517,25521,25524,25531,25535,25538,25547,25557,25561,25590,25593,25619],[10,25515,25511],{"id":25516},"_2-环境准备与设备连接",[1099,25518,25520],{"id":25519},"_21-系统与环境","2.1 系统与环境",[19,25522,25523],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,25525,25526,25527,25530],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[422,25528,25529],{},"lerobot"," 依赖。",[1099,25532,25534],{"id":25533},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,25536,25537],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[416,25539,25541],{"className":418,"code":25540,"language":420,"meta":395,"style":395},"lerobot-find-out\n",[422,25542,25543],{"__ignoreMap":395},[425,25544,25545],{"class":427,"line":428},[425,25546,25540],{"class":431},[19,25548,25549,25550,1362,25553,25556],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[422,25551,25552],{},"\u002Fdev\u002FttyACM0",[422,25554,25555],{},"\u002Fdev\u002FttyACM1","）。",[1099,25558,25560],{"id":25559},"_23-串口授权","2.3 串口授权",[416,25562,25564],{"className":418,"code":25563,"language":420,"meta":395,"style":395},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[422,25565,25566,25579],{"__ignoreMap":395},[425,25567,25568,25570,25573,25576],{"class":427,"line":428},[425,25569,652],{"class":431},[425,25571,25572],{"class":435}," chmod",[425,25574,25575],{"class":691}," 666",[425,25577,25578],{"class":435}," \u002Fdev\u002FttyACM0\n",[425,25580,25581,25583,25585,25587],{"class":427,"line":698},[425,25582,652],{"class":431},[425,25584,25572],{"class":435},[425,25586,25575],{"class":691},[425,25588,25589],{"class":435}," \u002Fdev\u002FttyACM1\n",[19,25591,25592],{},"说明：",[447,25594,25595,25600,25606,25616],{},[450,25596,25597,25599],{},[422,25598,652],{},"：以 root 权限执行命令。",[450,25601,25602,25605],{},[422,25603,25604],{},"chmod","：修改设备节点权限。",[450,25607,25608,25611,25612,25615],{},[422,25609,25610],{},"666","：",[422,25613,25614],{},"rw-rw-rw-","，所有用户可读写。",[450,25617,25618],{},"串口号必须替换为你机器上的真实端口。",[1074,25620,25621],{},"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":395,"searchDepth":698,"depth":698,"links":25623},[25624,25625,25626],{"id":25519,"depth":698,"text":25520},{"id":25533,"depth":698,"text":25534},{"id":25559,"depth":698,"text":25560},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":25511,"description":24374},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25633,"title":25634,"body":25635,"description":24374,"extension":1082,"meta":25795,"navigation":1084,"path":25796,"seo":25797,"stem":25798,"__hash__":25799},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25636,"toc":25791},[25637,25641,25645,25651,25654,25710,25713,25717,25720,25788],[10,25638,25640],{"id":25639},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[1099,25642,25644],{"id":25643},"_31-配置电机-id","3.1 配置电机 ID",[19,25646,25647,25648,25650],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[422,25649,1367],{},"，需要改成机械臂链路里不冲突的编号。",[19,25652,25653],{},"方式一：用 LeRobot 命令逐步写入。",[416,25655,25657],{"className":418,"code":25656,"language":420,"meta":395,"style":395},"# 主臂舵机配置 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",[422,25658,25659,25664,25671,25678,25683,25687,25692,25698,25705],{"__ignoreMap":395},[425,25660,25661],{"class":427,"line":428},[425,25662,25663],{"class":1216},"# 主臂舵机配置 ID\n",[425,25665,25666,25669],{"class":427,"line":698},[425,25667,25668],{"class":431},"lerobot-setup-motors",[425,25670,695],{"class":691},[425,25672,25673,25676],{"class":427,"line":710},[425,25674,25675],{"class":691},"  --teleop.type=so101_leader",[425,25677,695],{"class":691},[425,25679,25680],{"class":427,"line":721},[425,25681,25682],{"class":691},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[425,25684,25685],{"class":427,"line":735},[425,25686,3400],{"emptyLinePlaceholder":1084},[425,25688,25689],{"class":427,"line":743},[425,25690,25691],{"class":1216},"# 从臂舵机配置 ID\n",[425,25693,25694,25696],{"class":427,"line":751},[425,25695,25668],{"class":431},[425,25697,695],{"class":691},[425,25699,25700,25703],{"class":427,"line":759},[425,25701,25702],{"class":691},"  --robot.type=so101_follower",[425,25704,695],{"class":691},[425,25706,25707],{"class":427,"line":770},[425,25708,25709],{"class":691},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,25711,25712],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[1099,25714,25716],{"id":25715},"_32-机械臂校准","3.2 机械臂校准",[19,25718,25719],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[416,25721,25723],{"className":418,"code":25722,"language":420,"meta":395,"style":395},"# 主臂校准\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",[422,25724,25725,25730,25737,25743,25750,25755,25759,25764,25770,25776,25783],{"__ignoreMap":395},[425,25726,25727],{"class":427,"line":428},[425,25728,25729],{"class":1216},"# 主臂校准\n",[425,25731,25732,25735],{"class":427,"line":698},[425,25733,25734],{"class":431},"lerobot-calibrate",[425,25736,695],{"class":691},[425,25738,25739,25741],{"class":427,"line":710},[425,25740,25675],{"class":691},[425,25742,695],{"class":691},[425,25744,25745,25748],{"class":427,"line":721},[425,25746,25747],{"class":691},"  --teleop.port=\u002Fdev\u002FttyACM0",[425,25749,695],{"class":691},[425,25751,25752],{"class":427,"line":735},[425,25753,25754],{"class":691},"  --teleop.id=my_awesome_leader_arm\n",[425,25756,25757],{"class":427,"line":743},[425,25758,3400],{"emptyLinePlaceholder":1084},[425,25760,25761],{"class":427,"line":751},[425,25762,25763],{"class":1216},"# 从臂校准\n",[425,25765,25766,25768],{"class":427,"line":759},[425,25767,25734],{"class":431},[425,25769,695],{"class":691},[425,25771,25772,25774],{"class":427,"line":770},[425,25773,25702],{"class":691},[425,25775,695],{"class":691},[425,25777,25778,25781],{"class":427,"line":780},[425,25779,25780],{"class":691},"  --robot.port=\u002Fdev\u002FttyACM1",[425,25782,695],{"class":691},[425,25784,25785],{"class":427,"line":790},[425,25786,25787],{"class":691},"  --robot.id=my_awesome_follower_arm\n",[1074,25789,25790],{},"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":395,"searchDepth":698,"depth":698,"links":25792},[25793,25794],{"id":25643,"depth":698,"text":25644},{"id":25715,"depth":698,"text":25716},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25634,"description":24374},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25801,"title":25802,"body":25803,"description":24374,"extension":1082,"meta":25994,"navigation":1084,"path":25995,"seo":25996,"stem":25997,"__hash__":25998},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25804,"toc":25990},[25805,25808,25812,25859,25863,25876,25939,25942,25987],[10,25806,25802],{"id":25807},"_4-遥操与相机接入",[1099,25809,25811],{"id":25810},"_41-不带相机遥操","4.1 不带相机遥操",[416,25813,25815],{"className":418,"code":25814,"language":420,"meta":395,"style":395},"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",[422,25816,25817,25824,25830,25836,25843,25849,25855],{"__ignoreMap":395},[425,25818,25819,25822],{"class":427,"line":428},[425,25820,25821],{"class":431},"lerobot-teleoperate",[425,25823,695],{"class":691},[425,25825,25826,25828],{"class":427,"line":698},[425,25827,25702],{"class":691},[425,25829,695],{"class":691},[425,25831,25832,25834],{"class":427,"line":710},[425,25833,25780],{"class":691},[425,25835,695],{"class":691},[425,25837,25838,25841],{"class":427,"line":721},[425,25839,25840],{"class":691},"  --robot.id=my_awesome_follower_arm",[425,25842,695],{"class":691},[425,25844,25845,25847],{"class":427,"line":735},[425,25846,25675],{"class":691},[425,25848,695],{"class":691},[425,25850,25851,25853],{"class":427,"line":743},[425,25852,25747],{"class":691},[425,25854,695],{"class":691},[425,25856,25857],{"class":427,"line":751},[425,25858,25754],{"class":691},[1099,25860,25862],{"id":25861},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[416,25864,25866],{"className":418,"code":25865,"language":420,"meta":395,"style":395},"lerobot-find-cameras opencv\n",[422,25867,25868],{"__ignoreMap":395},[425,25869,25870,25873],{"class":427,"line":428},[425,25871,25872],{"class":431},"lerobot-find-cameras",[425,25874,25875],{"class":435}," opencv\n",[416,25877,25879],{"className":418,"code":25878,"language":420,"meta":395,"style":395},"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",[422,25880,25881,25887,25893,25899,25905,25915,25921,25927,25934],{"__ignoreMap":395},[425,25882,25883,25885],{"class":427,"line":428},[425,25884,25821],{"class":431},[425,25886,695],{"class":691},[425,25888,25889,25891],{"class":427,"line":698},[425,25890,25702],{"class":691},[425,25892,695],{"class":691},[425,25894,25895,25897],{"class":427,"line":710},[425,25896,25780],{"class":691},[425,25898,695],{"class":691},[425,25900,25901,25903],{"class":427,"line":721},[425,25902,25840],{"class":691},[425,25904,695],{"class":691},[425,25906,25907,25910,25913],{"class":427,"line":735},[425,25908,25909],{"class":691},"  --robot.cameras=",[425,25911,25912],{"class":435},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[425,25914,695],{"class":691},[425,25916,25917,25919],{"class":427,"line":743},[425,25918,25675],{"class":691},[425,25920,695],{"class":691},[425,25922,25923,25925],{"class":427,"line":751},[425,25924,25747],{"class":691},[425,25926,695],{"class":691},[425,25928,25929,25932],{"class":427,"line":759},[425,25930,25931],{"class":691},"  --teleop.id=my_awesome_leader_arm",[425,25933,695],{"class":691},[425,25935,25936],{"class":427,"line":770},[425,25937,25938],{"class":691},"  --display_data=true\n",[19,25940,25941],{},"相机参数说明：",[447,25943,25944,25950,25956,25965,25975,25981],{},[450,25945,25946,25949],{},[422,25947,25948],{},"front","：相机名称。",[450,25951,25952,25955],{},[422,25953,25954],{},"type: opencv","：相机驱动类型。",[450,25957,25958,25961,25962,25556],{},[422,25959,25960],{},"index_or_path","：设备编号或设备路径（如 ",[422,25963,25964],{},"\u002Fdev\u002Fvideo4",[450,25966,25967,25970,25971,25974],{},[422,25968,25969],{},"width"," \u002F ",[422,25972,25973],{},"height","：图像分辨率。",[450,25976,25977,25980],{},[422,25978,25979],{},"fps","：采样帧率。",[450,25982,25983,25986],{},[422,25984,25985],{},"--display_data=true","：启用实时可视化。",[1074,25988,25989],{},"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":395,"searchDepth":698,"depth":698,"links":25991},[25992,25993],{"id":25810,"depth":698,"text":25811},{"id":25861,"depth":698,"text":25862},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25802,"description":24374},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":26000,"title":26001,"body":26002,"description":24374,"extension":1082,"meta":26173,"navigation":1084,"path":26174,"seo":26175,"stem":26176,"__hash__":26177},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":26003,"toc":26168},[26004,26008,26012,26017,26022,26025,26067,26073,26077,26125,26130,26134,26137,26145,26150,26155,26160,26165],[10,26005,26007],{"id":26006},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[1099,26009,26011],{"id":26010},"_51-生成访问令牌","5.1 生成访问令牌",[19,26013,26014],{},[393,26015],{"alt":395,"src":26016},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,26018,26019],{},[393,26020],{"alt":395,"src":26021},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,26023,26024],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[416,26026,26028],{"className":418,"code":26027,"language":420,"meta":395,"style":395},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[422,26029,26030,26043],{"__ignoreMap":395},[425,26031,26032,26035,26038,26040],{"class":427,"line":428},[425,26033,26034],{"class":1155},"export",[425,26036,26037],{"class":701}," HF_TOKEN",[425,26039,1204],{"class":1155},[425,26041,26042],{"class":435},"\"your_huggingface_token\"\n",[425,26044,26045,26048,26051,26054,26057,26059,26062,26064],{"class":427,"line":698},[425,26046,26047],{"class":431},"hf",[425,26049,26050],{"class":435}," auth",[425,26052,26053],{"class":435}," login",[425,26055,26056],{"class":691}," --token",[425,26058,10723],{"class":435},[425,26060,26061],{"class":701},"$HF_TOKEN",[425,26063,1400],{"class":435},[425,26065,26066],{"class":691}," --add-to-git-credential\n",[19,26068,26069,26072],{},[422,26070,26071],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[1099,26074,26076],{"id":26075},"_52-验证登录","5.2 验证登录",[416,26078,26080],{"className":418,"code":26079,"language":420,"meta":395,"style":395},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[422,26081,26082,26112],{"__ignoreMap":395},[425,26083,26084,26087,26089,26091,26093,26095,26098,26101,26104,26107,26110],{"class":427,"line":428},[425,26085,26086],{"class":701},"HF_USER",[425,26088,1204],{"class":1155},[425,26090,886],{"class":701},[425,26092,26047],{"class":431},[425,26094,26050],{"class":435},[425,26096,26097],{"class":435}," whoami",[425,26099,26100],{"class":1155}," |",[425,26102,26103],{"class":431}," head",[425,26105,26106],{"class":691}," -n",[425,26108,26109],{"class":691}," 1",[425,26111,1165],{"class":701},[425,26113,26114,26117,26119,26122],{"class":427,"line":698},[425,26115,26116],{"class":691},"echo",[425,26118,10723],{"class":435},[425,26120,26121],{"class":701},"$HF_USER",[425,26123,26124],{"class":435},"\"\n",[19,26126,26127],{},[393,26128],{"alt":395,"src":26129},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[1099,26131,26133],{"id":26132},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,26135,26136],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[447,26138,26139,26142],{},[450,26140,26141],{},"Dataset Repo（用于上传演示数据）",[450,26143,26144],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,26146,26147],{},[393,26148],{"alt":395,"src":26149},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,26151,26152],{},[393,26153],{"alt":395,"src":26154},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,26156,26157],{},[393,26158],{"alt":395,"src":26159},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,26161,26162],{},[393,26163],{"alt":395,"src":26164},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[1074,26166,26167],{},"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":395,"searchDepth":698,"depth":698,"links":26169},[26170,26171,26172],{"id":26010,"depth":698,"text":26011},{"id":26075,"depth":698,"text":26076},{"id":26132,"depth":698,"text":26133},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":26001,"description":24374},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":26179,"title":26180,"body":26181,"description":24374,"extension":1082,"meta":26378,"navigation":1084,"path":26379,"seo":26380,"stem":26381,"__hash__":26382},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":26182,"toc":26373},[26183,26187,26191,26287,26295,26300,26304,26320,26323,26327,26370],[10,26184,26186],{"id":26185},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[1099,26188,26190],{"id":26189},"_61-录制示教数据","6.1 录制示教数据",[416,26192,26194],{"className":418,"code":26193,"language":420,"meta":395,"style":395},"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",[422,26195,26196,26203,26209,26215,26221,26230,26236,26242,26248,26255,26265,26272,26282],{"__ignoreMap":395},[425,26197,26198,26201],{"class":427,"line":428},[425,26199,26200],{"class":431},"lerobot-record",[425,26202,695],{"class":691},[425,26204,26205,26207],{"class":427,"line":698},[425,26206,25702],{"class":691},[425,26208,695],{"class":691},[425,26210,26211,26213],{"class":427,"line":710},[425,26212,25780],{"class":691},[425,26214,695],{"class":691},[425,26216,26217,26219],{"class":427,"line":721},[425,26218,25840],{"class":691},[425,26220,695],{"class":691},[425,26222,26223,26225,26228],{"class":427,"line":735},[425,26224,25909],{"class":691},[425,26226,26227],{"class":435},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[425,26229,695],{"class":691},[425,26231,26232,26234],{"class":427,"line":743},[425,26233,25675],{"class":691},[425,26235,695],{"class":691},[425,26237,26238,26240],{"class":427,"line":751},[425,26239,25747],{"class":691},[425,26241,695],{"class":691},[425,26243,26244,26246],{"class":427,"line":759},[425,26245,25931],{"class":691},[425,26247,695],{"class":691},[425,26249,26250,26253],{"class":427,"line":770},[425,26251,26252],{"class":691},"  --display_data=true",[425,26254,695],{"class":691},[425,26256,26257,26260,26263],{"class":427,"line":780},[425,26258,26259],{"class":691},"  --dataset.repo_id=",[425,26261,26262],{"class":435},"\"Embodied-AI-6\u002Fso101_test\"",[425,26264,695],{"class":691},[425,26266,26267,26270],{"class":427,"line":790},[425,26268,26269],{"class":691},"  --dataset.num_episodes=10",[425,26271,695],{"class":691},[425,26273,26274,26277,26280],{"class":427,"line":805},[425,26275,26276],{"class":691},"  --dataset.single_task=",[425,26278,26279],{"class":435},"\"Grab the green cube\"",[425,26281,695],{"class":691},[425,26283,26284],{"class":427,"line":818},[425,26285,26286],{"class":691},"  --resume=true\n",[447,26288,26289],{},[450,26290,26291,26294],{},[422,26292,26293],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,26296,26297],{},[393,26298],{"alt":395,"src":26299},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[1099,26301,26303],{"id":26302},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[416,26305,26307],{"className":418,"code":26306,"language":420,"meta":395,"style":395},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[422,26308,26309],{"__ignoreMap":395},[425,26310,26311,26314,26317],{"class":427,"line":428},[425,26312,26313],{"class":431},"rm",[425,26315,26316],{"class":691}," -rf",[425,26318,26319],{"class":435}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,26321,26322],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[1099,26324,26326],{"id":26325},"_63-回放指定-episode","6.3 回放指定 episode",[416,26328,26330],{"className":418,"code":26329,"language":420,"meta":395,"style":395},"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",[422,26331,26332,26339,26345,26351,26357,26365],{"__ignoreMap":395},[425,26333,26334,26337],{"class":427,"line":428},[425,26335,26336],{"class":431},"lerobot-replay",[425,26338,695],{"class":691},[425,26340,26341,26343],{"class":427,"line":698},[425,26342,25702],{"class":691},[425,26344,695],{"class":691},[425,26346,26347,26349],{"class":427,"line":710},[425,26348,25780],{"class":691},[425,26350,695],{"class":691},[425,26352,26353,26355],{"class":427,"line":721},[425,26354,25840],{"class":691},[425,26356,695],{"class":691},[425,26358,26359,26361,26363],{"class":427,"line":735},[425,26360,26259],{"class":691},[425,26362,26262],{"class":435},[425,26364,695],{"class":691},[425,26366,26367],{"class":427,"line":743},[425,26368,26369],{"class":691},"  --dataset.episode=0\n",[1074,26371,26372],{},"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":395,"searchDepth":698,"depth":698,"links":26374},[26375,26376,26377],{"id":26189,"depth":698,"text":26190},{"id":26302,"depth":698,"text":26303},{"id":26325,"depth":698,"text":26326},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":26180,"description":24374},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":26384,"title":26385,"body":26386,"description":24374,"extension":1082,"meta":26514,"navigation":1084,"path":26515,"seo":26516,"stem":26517,"__hash__":26518},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":26387,"toc":26512},[26388,26392,26455,26458,26505,26510],[10,26389,26391],{"id":26390},"_7-act-模型训练","7. ACT 模型训练",[416,26393,26395],{"className":418,"code":26394,"language":420,"meta":395,"style":395},"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",[422,26396,26397,26404,26412,26419,26426,26433,26440,26447],{"__ignoreMap":395},[425,26398,26399,26402],{"class":427,"line":428},[425,26400,26401],{"class":431},"lerobot-train",[425,26403,695],{"class":691},[425,26405,26406,26408,26410],{"class":427,"line":698},[425,26407,26259],{"class":691},[425,26409,26262],{"class":435},[425,26411,695],{"class":691},[425,26413,26414,26417],{"class":427,"line":710},[425,26415,26416],{"class":691},"  --policy.type=act",[425,26418,695],{"class":691},[425,26420,26421,26424],{"class":427,"line":721},[425,26422,26423],{"class":691},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[425,26425,695],{"class":691},[425,26427,26428,26431],{"class":427,"line":735},[425,26429,26430],{"class":691},"  --job_name=act_so101_test",[425,26432,695],{"class":691},[425,26434,26435,26438],{"class":427,"line":743},[425,26436,26437],{"class":691},"  --policy.device=cuda",[425,26439,695],{"class":691},[425,26441,26442,26445],{"class":427,"line":751},[425,26443,26444],{"class":691},"  --wandb.enable=false",[425,26446,695],{"class":691},[425,26448,26449,26452],{"class":427,"line":759},[425,26450,26451],{"class":691},"  --policy.repo_id=",[425,26453,26454],{"class":435},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,26456,26457],{},"参数说明：",[447,26459,26460,26466,26472,26478,26484,26493,26499],{},[450,26461,26462,26465],{},[422,26463,26464],{},"--dataset.repo_id","：训练数据集仓库。",[450,26467,26468,26471],{},[422,26469,26470],{},"--policy.type=act","：策略模型类型为 ACT。",[450,26473,26474,26477],{},[422,26475,26476],{},"--output_dir","：本地训练输出目录。",[450,26479,26480,26483],{},[422,26481,26482],{},"--job_name","：训练任务名称。",[450,26485,26486,26489,26490,25556],{},[422,26487,26488],{},"--policy.device","：训练设备（如 ",[422,26491,26492],{},"cuda",[450,26494,26495,26498],{},[422,26496,26497],{},"--wandb.enable","：是否启用 WandB 可视化。",[450,26500,26501,26504],{},[422,26502,26503],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,26506,26507],{},[393,26508],{"alt":395,"src":26509},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[1074,26511,26372],{},{"title":395,"searchDepth":698,"depth":698,"links":26513},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":26385,"description":24374},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":26520,"title":26521,"body":26522,"description":24374,"extension":1082,"meta":26609,"navigation":1084,"path":26610,"seo":26611,"stem":26612,"__hash__":26613},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":26523,"toc":26607},[26524,26527,26530,26597,26605],[10,26525,26521],{"id":26526},"_8-策略部署与自动采集",[19,26528,26529],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[416,26531,26533],{"className":418,"code":26532,"language":420,"meta":395,"style":395},"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",[422,26534,26535,26541,26547,26553,26561,26567,26574,26582,26590],{"__ignoreMap":395},[425,26536,26537,26539],{"class":427,"line":428},[425,26538,26200],{"class":431},[425,26540,695],{"class":691},[425,26542,26543,26545],{"class":427,"line":698},[425,26544,25702],{"class":691},[425,26546,695],{"class":691},[425,26548,26549,26551],{"class":427,"line":710},[425,26550,25780],{"class":691},[425,26552,695],{"class":691},[425,26554,26555,26557,26559],{"class":427,"line":721},[425,26556,25909],{"class":691},[425,26558,26227],{"class":435},[425,26560,695],{"class":691},[425,26562,26563,26565],{"class":427,"line":735},[425,26564,25840],{"class":691},[425,26566,695],{"class":691},[425,26568,26569,26572],{"class":427,"line":743},[425,26570,26571],{"class":691},"  --display_data=false",[425,26573,695],{"class":691},[425,26575,26576,26578,26580],{"class":427,"line":751},[425,26577,26259],{"class":691},[425,26579,26262],{"class":435},[425,26581,695],{"class":691},[425,26583,26584,26586,26588],{"class":427,"line":759},[425,26585,26276],{"class":691},[425,26587,26279],{"class":435},[425,26589,695],{"class":691},[425,26591,26592,26595],{"class":427,"line":770},[425,26593,26594],{"class":691},"  --policy.path=",[425,26596,26454],{"class":435},[447,26598,26599],{},[450,26600,26601,26604],{},[422,26602,26603],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[1074,26606,26372],{},{"title":395,"searchDepth":698,"depth":698,"links":26608},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":26521,"description":24374},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26615,"title":26616,"body":26617,"description":24374,"extension":1082,"meta":26646,"navigation":1084,"path":26647,"seo":26648,"stem":26649,"__hash__":26650},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26618,"toc":26644},[26619,26623,26626,26632,26635,26641],[10,26620,26622],{"id":26621},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,26624,26625],{},"项目地址：",[19,26627,26628],{},[22,26629,26630],{"href":26630,"rel":26631},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[26],[19,26633,26634],{},"参考教程：",[19,26636,26637],{},[22,26638,26639],{"href":26639,"rel":26640},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[26],[19,26642,26643],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":395,"searchDepth":698,"depth":698,"links":26645},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26616,"description":24374},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26652,"title":26653,"body":26654,"description":26658,"extension":1082,"meta":26659,"navigation":1084,"path":26660,"seo":26661,"stem":26662,"__hash__":26663},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26655,"toc":26656},[],{"title":395,"searchDepth":698,"depth":698,"links":26657},[],"act复现",{"category":24376},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26653,"description":26658},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26665,"title":26666,"body":26667,"description":395,"extension":1082,"meta":26969,"navigation":1084,"path":26970,"seo":26971,"stem":26972,"__hash__":26973},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26668,"toc":26961},[26669,26672,26676,26686,26693,26700,26703,26710,26713,26716,26720,26732,26736,26782,26785,26788,26791,26794,26797,26801,26839,26845,26849,26903,26908,26911,26914,26919,26922,26927,26930,26933,26937,26940,26943,26947],[10,26670,26666],{"id":26671},"_1简介",[14,26673,26675],{"id":26674},"_11什么是-docker","1.1什么是 Docker？",[19,26677,26678,26679,26682,26683],{},"Docker 是一个开源的 ",[400,26680,26681],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[400,26684,26685],{},"一次构建，到处运行。",[19,26687,26688,26689,26692],{},"“ ",[400,26690,26691],{},"一次构建，到处运行"," ”也就是说：",[972,26694,26695],{},[450,26696,26697],{},[400,26698,26699],{},"之前：",[19,26701,26702],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[972,26704,26705],{},[450,26706,26707],{},[400,26708,26709],{},"使用docker后：",[19,26711,26712],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,26714,26715],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[14,26717,26719],{"id":26718},"_12它是怎么工作的","1.2.它是怎么工作的？",[447,26721,26722,26725],{},[450,26723,26724],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[450,26726,26727,26728,26731],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[400,26729,26730],{},"无论在哪运行都一样稳定"," 。",[14,26733,26735],{"id":26734},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[35,26737,26738,26748],{},[38,26739,26740],{},[41,26741,26742,26745],{},[44,26743,26744],{"align":46},"概念",[44,26746,26747],{"align":46},"解释",[55,26749,26750,26758,26766,26774],{},[41,26751,26752,26755],{},[60,26753,26754],{"align":46},"镜像",[60,26756,26757],{"align":46},"Image，运行容器的模板，像是一个应用快照",[41,26759,26760,26763],{},[60,26761,26762],{"align":46},"容器",[60,26764,26765],{"align":46},"Container，运行中的镜像实例，有自己的文件系统、网络等",[41,26767,26768,26771],{},[60,26769,26770],{"align":46},"Dockerfile",[60,26772,26773],{"align":46},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[41,26775,26776,26779],{},[60,26777,26778],{"align":46},"仓库",[60,26780,26781],{"align":46},"Registry，存放镜像的地方，比如 Docker Hub",[19,26783,26784],{},"抽象化理解:",[19,26786,26787],{},"Docker镜像≈C++类",[19,26789,26790],{},"Docker容器≈C++类实例(即对象)",[19,26792,26793],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,26795,26796],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[14,26798,26800],{"id":26799},"_14类比理解","1.4.类比理解",[35,26802,26803,26813],{},[38,26804,26805],{},[41,26806,26807,26810],{},[44,26808,26809],{"align":46},"传统部署",[44,26811,26812],{"align":46},"Docker部署",[55,26814,26815,26823,26831],{},[41,26816,26817,26820],{},[60,26818,26819],{"align":46},"手动安装依赖、调试版本不一致问题",[60,26821,26822],{"align":46},"一次打包环境和代码",[41,26824,26825,26828],{},[60,26826,26827],{"align":46},"程序“裸奔”跑在系统上",[60,26829,26830],{"align":46},"程序“穿着容器”隔离运行",[41,26832,26833,26836],{},[60,26834,26835],{"align":46},"容易“在我电脑上能跑”",[60,26837,26838],{"align":46},"保证“无论在哪都能跑”",[19,26840,26841,26842],{},"就像快递包裹： ",[400,26843,26844],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[14,26846,26848],{"id":26847},"_15docker-的核心优势","1.5.Docker 的核心优势",[35,26850,26851,26861],{},[38,26852,26853],{},[41,26854,26855,26858],{},[44,26856,26857],{"align":46},"优势",[44,26859,26860],{"align":46},"说明",[55,26862,26863,26871,26879,26887,26895],{},[41,26864,26865,26868],{},[60,26866,26867],{"align":46},"轻量级",[60,26869,26870],{"align":46},"基于系统内核共享，启动速度快，占资源少",[41,26872,26873,26876],{},[60,26874,26875],{"align":46},"跨平台",[60,26877,26878],{"align":46},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[41,26880,26881,26884],{},[60,26882,26883],{"align":46},"易于迁移部署",[60,26885,26886],{"align":46},"应用和环境一起封装，不怕依赖不一致",[41,26888,26889,26892],{},[60,26890,26891],{"align":46},"易于版本控制",[60,26893,26894],{"align":46},"镜像版本可控，支持回滚",[41,26896,26897,26900],{},[60,26898,26899],{"align":46},"生态丰富",[60,26901,26902],{"align":46},"Docker Hub 上有成千上万的现成镜像可用",[972,26904,26905],{},[450,26906,26907],{},"在Linux上可以几乎实现无性能损失。",[19,26909,26910],{},"docker里的发行版和本机共用Linux内核。",[19,26912,26913],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[972,26915,26916],{},[450,26917,26918],{},"可以快速部署在绝大多数Linux发行版",[19,26920,26921],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[972,26923,26924],{},[450,26925,26926],{},"配置环境简单",[19,26928,26929],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,26931,26932],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[972,26934,26935],{},[450,26936,26899],{},[19,26938,26939],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,26941,26942],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[14,26944,26946],{"id":26945},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[447,26948,26949,26952,26955,26958],{},[450,26950,26951],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[450,26953,26954],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[450,26956,26957],{},"微服务架构：每个服务一个容器，灵活组合",[450,26959,26960],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":395,"searchDepth":698,"depth":698,"links":26962},[26963,26964,26965,26966,26967,26968],{"id":26674,"depth":710,"text":26675},{"id":26718,"depth":710,"text":26719},{"id":26734,"depth":710,"text":26735},{"id":26799,"depth":710,"text":26800},{"id":26847,"depth":710,"text":26848},{"id":26945,"depth":710,"text":26946},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26666,"description":395},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26975,"title":26976,"body":26977,"description":395,"extension":1082,"meta":27708,"navigation":1084,"path":27709,"seo":27710,"stem":27711,"__hash__":27712},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26978,"toc":27703},[26979,26982,26986,26989,26992,26998,27004,27008,27017,27020,27077,27080,27131,27134,27216,27219,27256,27260,27271,27284,27291,27294,27373,27376,27426,27429,27452,27456,27463,27466,27482,27488,27491,27507,27513,27516,27532,27546,27552,27572,27578,27581,27593,27599,27602,27616,27622,27625,27645,27650,27653,27656,27660,27663,27666,27669,27676,27679,27682,27685,27690,27695,27700],[10,26980,26976],{"id":26981},"_2安装docker",[14,26983,26985],{"id":26984},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,26987,26988],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,26990,26991],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,26993,26994],{},[22,26995,26996],{"href":26996,"rel":26997},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[26],[19,26999,27000],{},[22,27001,27002],{"href":27002,"rel":27003},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[26],[22995,27005,27007],{"id":27006},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,27009,27010,27011,27016],{},"以下内容根据 ",[22,27012,27015],{"href":27013,"rel":27014},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[26],"官方文档"," 修改而来。",[19,27018,27019],{},"如果你过去安装过 docker，先删掉：",[416,27021,27023],{"className":418,"code":27022,"language":420,"meta":395,"style":395},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[422,27024,27025],{"__ignoreMap":395},[425,27026,27027,27029,27032,27035,27038,27041,27044,27047,27050,27053,27056,27059,27062,27065,27068,27071,27074],{"class":427,"line":428},[425,27028,4025],{"class":1155},[425,27030,27031],{"class":701}," pkg ",[425,27033,27034],{"class":1155},"in",[425,27036,27037],{"class":435}," docker.io",[425,27039,27040],{"class":435}," docker-doc",[425,27042,27043],{"class":435}," docker-compose",[425,27045,27046],{"class":435}," docker-compose-v2",[425,27048,27049],{"class":435}," podman-docker",[425,27051,27052],{"class":435}," containerd",[425,27054,27055],{"class":435}," runc",[425,27057,27058],{"class":701},"; ",[425,27060,27061],{"class":1155},"do",[425,27063,27064],{"class":431}," sudo",[425,27066,27067],{"class":435}," apt-get",[425,27069,27070],{"class":435}," remove",[425,27072,27073],{"class":701}," $pkg; ",[425,27075,27076],{"class":1155},"done\n",[19,27078,27079],{},"首先安装依赖和GPG：",[416,27081,27085],{"className":27082,"code":27083,"language":27084,"meta":395,"style":395},"language-markdown shiki shiki-themes github-light github-dark","# Add Docker's official GPG key:\nsudo apt-get update\nsudo apt-get install ca-certificates curl\nsudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\nsudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\nsudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n\n# 如果上面这行报错就弄下面这行\nsudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n","markdown",[422,27086,27087,27092,27097,27102,27107,27112,27117,27121,27126],{"__ignoreMap":395},[425,27088,27089],{"class":427,"line":428},[425,27090,27091],{},"# Add Docker's official GPG key:\n",[425,27093,27094],{"class":427,"line":698},[425,27095,27096],{},"sudo apt-get update\n",[425,27098,27099],{"class":427,"line":710},[425,27100,27101],{},"sudo apt-get install ca-certificates curl\n",[425,27103,27104],{"class":427,"line":721},[425,27105,27106],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[425,27108,27109],{"class":427,"line":735},[425,27110,27111],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[425,27113,27114],{"class":427,"line":743},[425,27115,27116],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[425,27118,27119],{"class":427,"line":751},[425,27120,3400],{"emptyLinePlaceholder":1084},[425,27122,27123],{"class":427,"line":759},[425,27124,27125],{},"# 如果上面这行报错就弄下面这行\n",[425,27127,27128],{"class":427,"line":770},[425,27129,27130],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,27132,27133],{},"信任 Docker 的 GPG 公钥并添加仓库：",[416,27135,27137],{"className":418,"code":27136,"language":420,"meta":395,"style":395},"# 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",[422,27138,27139,27144,27150,27166,27199],{"__ignoreMap":395},[425,27140,27141],{"class":427,"line":428},[425,27142,27143],{"class":1216},"# Add the repository to Apt sources:\n",[425,27145,27146,27148],{"class":427,"line":698},[425,27147,26116],{"class":691},[425,27149,695],{"class":691},[425,27151,27152,27155,27158,27161,27164],{"class":427,"line":710},[425,27153,27154],{"class":435},"  \"deb [arch=$(",[425,27156,27157],{"class":431},"dpkg",[425,27159,27160],{"class":691}," --print-architecture",[425,27162,27163],{"class":435},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[425,27165,732],{"class":691},[425,27167,27168,27171,27173,27175,27178,27181,27183,27185,27188,27190,27192,27195,27197],{"class":427,"line":721},[425,27169,27170],{"class":435},"  \"",[425,27172,886],{"class":701},[425,27174,1706],{"class":691},[425,27176,27177],{"class":435}," \u002Fetc\u002Fos-release",[425,27179,27180],{"class":701}," && ",[425,27182,26116],{"class":691},[425,27184,10723],{"class":435},[425,27186,27187],{"class":701},"$VERSION_CODENAME",[425,27189,1400],{"class":435},[425,27191,895],{"class":701},[425,27193,27194],{"class":435},"\" stable\"",[425,27196,26100],{"class":1155},[425,27198,695],{"class":691},[425,27200,27201,27204,27207,27210,27213],{"class":427,"line":735},[425,27202,27203],{"class":431},"  sudo",[425,27205,27206],{"class":435}," tee",[425,27208,27209],{"class":435}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[425,27211,27212],{"class":1155}," >",[425,27214,27215],{"class":435}," \u002Fdev\u002Fnull\n",[19,27217,27218],{},"最后安装",[416,27220,27222],{"className":418,"code":27221,"language":420,"meta":395,"style":395},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[422,27223,27224,27233],{"__ignoreMap":395},[425,27225,27226,27228,27230],{"class":427,"line":428},[425,27227,652],{"class":431},[425,27229,27067],{"class":435},[425,27231,27232],{"class":435}," update\n",[425,27234,27235,27237,27239,27241,27244,27247,27250,27253],{"class":427,"line":698},[425,27236,652],{"class":431},[425,27238,27067],{"class":435},[425,27240,24828],{"class":435},[425,27242,27243],{"class":435}," docker-ce",[425,27245,27246],{"class":435}," docker-ce-cli",[425,27248,27249],{"class":435}," containerd.io",[425,27251,27252],{"class":435}," docker-buildx-plugin",[425,27254,27255],{"class":435}," docker-compose-plugin\n",[22995,27257,27259],{"id":27258},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,27261,27262,27263,27266,27267,27270],{},"查看自己自己包管理工具版本（dnf是 ",[400,27264,27265],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[400,27268,27269],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[416,27272,27274],{"className":418,"code":27273,"language":420,"meta":395,"style":395},"dnf --version\n",[422,27275,27276],{"__ignoreMap":395},[425,27277,27278,27281],{"class":427,"line":428},[425,27279,27280],{"class":431},"dnf",[425,27282,27283],{"class":691}," --version\n",[19,27285,27010,27286,27290],{},[22,27287,27015],{"href":27288,"rel":27289},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[26]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,27292,27293],{},"如果你之前安装过 docker，请先删掉",[416,27295,27297],{"className":418,"code":27296,"language":420,"meta":395,"style":395},"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",[422,27298,27299,27312,27319,27326,27333,27340,27347,27354,27361,27368],{"__ignoreMap":395},[425,27300,27301,27303,27306,27308,27310],{"class":427,"line":428},[425,27302,652],{"class":431},[425,27304,27305],{"class":435}," dnf",[425,27307,27070],{"class":435},[425,27309,685],{"class":435},[425,27311,695],{"class":691},[425,27313,27314,27317],{"class":427,"line":698},[425,27315,27316],{"class":435},"                  docker-client",[425,27318,695],{"class":691},[425,27320,27321,27324],{"class":427,"line":710},[425,27322,27323],{"class":435},"                  docker-client-latest",[425,27325,695],{"class":691},[425,27327,27328,27331],{"class":427,"line":721},[425,27329,27330],{"class":435},"                  docker-common",[425,27332,695],{"class":691},[425,27334,27335,27338],{"class":427,"line":735},[425,27336,27337],{"class":435},"                  docker-latest",[425,27339,695],{"class":691},[425,27341,27342,27345],{"class":427,"line":743},[425,27343,27344],{"class":435},"                  docker-latest-logrotate",[425,27346,695],{"class":691},[425,27348,27349,27352],{"class":427,"line":751},[425,27350,27351],{"class":435},"                  docker-logrotate",[425,27353,695],{"class":691},[425,27355,27356,27359],{"class":427,"line":759},[425,27357,27358],{"class":435},"                  docker-selinux",[425,27360,695],{"class":691},[425,27362,27363,27366],{"class":427,"line":770},[425,27364,27365],{"class":435},"                  docker-engine-selinux",[425,27367,695],{"class":691},[425,27369,27370],{"class":427,"line":780},[425,27371,27372],{"class":435},"                  docker-engine\n",[19,27374,27375],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[416,27377,27379],{"className":418,"code":27378,"language":420,"meta":395,"style":395},"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",[422,27380,27381,27395,27410],{"__ignoreMap":395},[425,27382,27383,27385,27387,27390,27392],{"class":427,"line":428},[425,27384,652],{"class":431},[425,27386,27305],{"class":435},[425,27388,27389],{"class":691}," -y",[425,27391,24828],{"class":435},[425,27393,27394],{"class":435}," dnf-plugins-core\n",[425,27396,27397,27399,27401,27404,27407],{"class":427,"line":698},[425,27398,652],{"class":431},[425,27400,27305],{"class":435},[425,27402,27403],{"class":435}," config-manager",[425,27405,27406],{"class":435}," addrepo",[425,27408,27409],{"class":691}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[425,27411,27412,27414,27417,27420,27423],{"class":427,"line":710},[425,27413,652],{"class":431},[425,27415,27416],{"class":435}," sed",[425,27418,27419],{"class":691}," -i",[425,27421,27422],{"class":435}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[425,27424,27425],{"class":435}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,27427,27428],{},"最后安装：",[416,27430,27432],{"className":418,"code":27431,"language":420,"meta":395,"style":395},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[422,27433,27434],{"__ignoreMap":395},[425,27435,27436,27438,27440,27442,27444,27446,27448,27450],{"class":427,"line":428},[425,27437,652],{"class":431},[425,27439,27305],{"class":435},[425,27441,24828],{"class":435},[425,27443,27243],{"class":435},[425,27445,27246],{"class":435},[425,27447,27249],{"class":435},[425,27449,27252],{"class":435},[425,27451,27255],{"class":435},[14,27453,27455],{"id":27454},"_22配置环境","2.2.配置环境",[22995,27457,27459,27462],{"id":27458},"_221检查-docker-服务状态",[400,27460,27461],{},"2.2.1.检查 Docker 服务状态"," ：",[19,27464,27465],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[416,27467,27469],{"className":418,"code":27468,"language":420,"meta":395,"style":395},"systemctl status docker\n",[422,27470,27471],{"__ignoreMap":395},[425,27472,27473,27476,27479],{"class":427,"line":428},[425,27474,27475],{"class":431},"systemctl",[425,27477,27478],{"class":435}," status",[425,27480,27481],{"class":435}," docker\n",[22995,27483,27485,27462],{"id":27484},"_222启动-docker-服务",[400,27486,27487],{},"2.2.2.启动 Docker 服务",[19,27489,27490],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[416,27492,27494],{"className":418,"code":27493,"language":420,"meta":395,"style":395},"sudo systemctl start docker\n",[422,27495,27496],{"__ignoreMap":395},[425,27497,27498,27500,27503,27505],{"class":427,"line":428},[425,27499,652],{"class":431},[425,27501,27502],{"class":435}," systemctl",[425,27504,5184],{"class":435},[425,27506,27481],{"class":435},[22995,27508,27510,27462],{"id":27509},"_223设置-docker-开机自启",[400,27511,27512],{},"2.2.3.设置 Docker 开机自启",[19,27514,27515],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[416,27517,27519],{"className":418,"code":27518,"language":420,"meta":395,"style":395},"sudo systemctl enable docker\n",[422,27520,27521],{"__ignoreMap":395},[425,27522,27523,27525,27527,27530],{"class":427,"line":428},[425,27524,652],{"class":431},[425,27526,27502],{"class":435},[425,27528,27529],{"class":435}," enable",[425,27531,27481],{"class":435},[22995,27533,27535,978,27538,978,27543,27462],{"id":27534},"_224将用户添加到-docker-组",[400,27536,27537],{},"2.2.4.将用户添加到",[400,27539,27540],{},[422,27541,27542],{},"docker",[400,27544,27545],{},"组",[19,27547,27548,27549,27551],{},"使用以下命令将当前用户添加到 ",[422,27550,27542],{}," 组：",[416,27553,27555],{"className":418,"code":27554,"language":420,"meta":395,"style":395},"sudo usermod -aG docker $USER\n",[422,27556,27557],{"__ignoreMap":395},[425,27558,27559,27561,27564,27567,27569],{"class":427,"line":428},[425,27560,652],{"class":431},[425,27562,27563],{"class":435}," usermod",[425,27565,27566],{"class":691}," -aG",[425,27568,685],{"class":435},[425,27570,27571],{"class":701}," $USER\n",[22995,27573,27575,27462],{"id":27574},"_225退出并重新登录",[400,27576,27577],{},"2.2.5.退出并重新登录",[19,27579,27580],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[416,27582,27584],{"className":418,"code":27583,"language":420,"meta":395,"style":395},"newgrp docker\n",[422,27585,27586],{"__ignoreMap":395},[425,27587,27588,27591],{"class":427,"line":428},[425,27589,27590],{"class":431},"newgrp",[425,27592,27481],{"class":435},[22995,27594,27596,27462],{"id":27595},"_226重新启动-docker-服务如果需要",[400,27597,27598],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,27600,27601],{},"确保 Docker 服务正在运行，可以使用以下命令：",[416,27603,27604],{"className":418,"code":27493,"language":420,"meta":395,"style":395},[422,27605,27606],{"__ignoreMap":395},[425,27607,27608,27610,27612,27614],{"class":427,"line":428},[425,27609,652],{"class":431},[425,27611,27502],{"class":435},[425,27613,5184],{"class":435},[425,27615,27481],{"class":435},[22995,27617,27619,27462],{"id":27618},"_227重启电脑后检查-docker-服务状态",[400,27620,27621],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,27623,27624],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[416,27626,27628],{"className":418,"code":27627,"language":420,"meta":395,"style":395},"sudo reboot\nsystemctl status docker\n",[422,27629,27630,27637],{"__ignoreMap":395},[425,27631,27632,27634],{"class":427,"line":428},[425,27633,652],{"class":431},[425,27635,27636],{"class":435}," reboot\n",[425,27638,27639,27641,27643],{"class":427,"line":698},[425,27640,27475],{"class":431},[425,27642,27478],{"class":435},[425,27644,27481],{"class":435},[19,27646,27647],{},[393,27648],{"alt":395,"src":27649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,27651,27652],{},"第三行显示enabled说明开机自启动成功",[19,27654,27655],{},"按q退出",[14,27657,27659],{"id":27658},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,27661,27662],{},"优先使用linux来使用docker是比较好的",[19,27664,27665],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,27667,27668],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,27670,27671,27672],{},"官方下载安装:",[22,27673,27674],{"href":27674,"rel":27675},"https:\u002F\u002Fwww.docker.com\u002F",[26],[19,27677,27678],{},"Windows的Docker显卡直通与USB直通:",[19,27680,27681],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,27683,27684],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,27686,27687],{},[393,27688],{"alt":395,"src":27689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,27691,27692],{},[393,27693],{"alt":395,"src":27694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,27696,27697],{},[393,27698],{"alt":395,"src":27699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[1074,27701,27702],{},"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":395,"searchDepth":698,"depth":698,"links":27704},[27705,27706,27707],{"id":26984,"depth":710,"text":26985},{"id":27454,"depth":710,"text":27455},{"id":27658,"depth":710,"text":27659},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26976,"description":395},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27714,"title":27715,"body":27716,"description":27723,"extension":1082,"meta":28415,"navigation":1084,"path":28416,"seo":28417,"stem":28418,"__hash__":28419},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27717,"toc":28409},[27718,27721,27724,27728,27733,27738,27741,27769,27774,27783,27786,27791,27795,27802,27807,27813,27817,27820,27824,27829,27921,27926,27944,27949,27970,27975,27991,27995,28000,28029,28034,28080,28085,28129,28137,28154,28159,28175,28180,28194,28197,28200,28203,28206,28234,28237,28242,28246,28249,28252,28258,28261,28264,28267,28329,28336,28341,28344,28362,28366,28369,28386,28389,28392,28406],[10,27719,27715],{"id":27720},"_3docker直通",[19,27722,27723],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[14,27725,27727],{"id":27726},"_31usb直通","3.1.USB直通",[19,27729,27730],{},[393,27731],{"alt":395,"src":27732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[972,27734,27735],{},[450,27736,27737],{},"方法一(不是很推荐新手)：",[19,27739,27740],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[416,27742,27744],{"className":418,"code":27743,"language":420,"meta":395,"style":395},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[422,27745,27746,27754,27759],{"__ignoreMap":395},[425,27747,27748,27751],{"class":427,"line":428},[425,27749,27750],{"class":431},"ls",[425,27752,27753],{"class":435}," \u002Fdev\n",[425,27755,27756],{"class":427,"line":698},[425,27757,27758],{"class":1216},"#例如\n",[425,27760,27761,27764,27766],{"class":427,"line":710},[425,27762,27763],{"class":701},"--device",[425,27765,1204],{"class":1155},[425,27767,27768],{"class":435},"\u002Fdev\u002Ftty_USB0\n",[972,27770,27771],{"start":698},[450,27772,27773],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[416,27775,27777],{"className":418,"code":27776,"language":420,"meta":395,"style":395},"--privileged\n",[422,27778,27779],{"__ignoreMap":395},[425,27780,27781],{"class":427,"line":428},[425,27782,27776],{"class":431},[19,27784,27785],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,27787,27788],{},[393,27789],{"alt":395,"src":27790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[14,27792,27794],{"id":27793},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,27796,27797,27798,27801],{},"NVIDIA Container Toolkit使用户 ",[400,27799,27800],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,27803,27804],{},[393,27805],{"alt":395,"src":27806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,27808,27809],{},[22,27810,27811],{"href":27811,"rel":27812},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[26],[22995,27814,27816],{"id":27815},"_321安装","3.2.1.安装",[19,27818,27819],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23907,27821,27823],{"id":27822},"_3211ubuntu","3.2.1.1.Ubuntu",[972,27825,27826],{},[450,27827,27828],{},"配置存储库 并更新",[416,27830,27832],{"className":418,"code":27831,"language":420,"meta":395,"style":395},"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",[422,27833,27834,27863,27883,27895,27907,27913],{"__ignoreMap":395},[425,27835,27836,27839,27842,27845,27847,27849,27852,27855,27858,27861],{"class":427,"line":428},[425,27837,27838],{"class":431},"curl",[425,27840,27841],{"class":691}," -fsSL",[425,27843,27844],{"class":435}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[425,27846,26100],{"class":1155},[425,27848,27064],{"class":431},[425,27850,27851],{"class":435}," gpg",[425,27853,27854],{"class":691}," --dearmor",[425,27856,27857],{"class":691}," -o",[425,27859,27860],{"class":435}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[425,27862,695],{"class":691},[425,27864,27865,27868,27870,27873,27876,27879,27881],{"class":427,"line":698},[425,27866,27867],{"class":701},"  && ",[425,27869,27838],{"class":431},[425,27871,27872],{"class":691}," -s",[425,27874,27875],{"class":691}," -L",[425,27877,27878],{"class":435}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[425,27880,26100],{"class":1155},[425,27882,695],{"class":691},[425,27884,27885,27888,27891,27893],{"class":427,"line":710},[425,27886,27887],{"class":431},"    sed",[425,27889,27890],{"class":435}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[425,27892,26100],{"class":1155},[425,27894,695],{"class":691},[425,27896,27897,27900,27902,27905],{"class":427,"line":721},[425,27898,27899],{"class":431},"    sudo",[425,27901,27206],{"class":435},[425,27903,27904],{"class":435}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[425,27906,695],{"class":691},[425,27908,27909,27911],{"class":427,"line":735},[425,27910,27867],{"class":701},[425,27912,732],{"class":691},[425,27914,27915,27917,27919],{"class":427,"line":743},[425,27916,27899],{"class":431},[425,27918,27067],{"class":435},[425,27920,27232],{"class":435},[972,27922,27923],{"start":698},[450,27924,27925],{},"安装nvidia-docker2",[416,27927,27929],{"className":418,"code":27928,"language":420,"meta":395,"style":395},"sudo apt-get install -y nvidia-docker2\n",[422,27930,27931],{"__ignoreMap":395},[425,27932,27933,27935,27937,27939,27941],{"class":427,"line":428},[425,27934,652],{"class":431},[425,27936,27067],{"class":435},[425,27938,24828],{"class":435},[425,27940,27389],{"class":691},[425,27942,27943],{"class":435}," nvidia-docker2\n",[972,27945,27946],{"start":710},[450,27947,27948],{},"使用nvidia-ctk命令配置container runtime",[416,27950,27952],{"className":418,"code":27951,"language":420,"meta":395,"style":395},"sudo nvidia-ctk runtime configure --runtime=docker\n",[422,27953,27954],{"__ignoreMap":395},[425,27955,27956,27958,27961,27964,27967],{"class":427,"line":428},[425,27957,652],{"class":431},[425,27959,27960],{"class":435}," nvidia-ctk",[425,27962,27963],{"class":435}," runtime",[425,27965,27966],{"class":435}," configure",[425,27968,27969],{"class":691}," --runtime=docker\n",[972,27971,27972],{"start":721},[450,27973,27974],{},"重启docker服务:",[416,27976,27978],{"className":418,"code":27977,"language":420,"meta":395,"style":395},"sudo systemctl restart docker\n",[422,27979,27980],{"__ignoreMap":395},[425,27981,27982,27984,27986,27989],{"class":427,"line":428},[425,27983,652],{"class":431},[425,27985,27502],{"class":435},[425,27987,27988],{"class":435}," restart",[425,27990,27481],{"class":435},[23907,27992,27994],{"id":27993},"_3212fedora","3.2.1.2.Fedora",[972,27996,27997],{},[450,27998,27999],{},"配置存储库",[416,28001,28003],{"className":418,"code":28002,"language":420,"meta":395,"style":395},"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",[422,28004,28005,28020],{"__ignoreMap":395},[425,28006,28007,28009,28011,28013,28016,28018],{"class":427,"line":428},[425,28008,27838],{"class":431},[425,28010,27872],{"class":691},[425,28012,27875],{"class":691},[425,28014,28015],{"class":435}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[425,28017,26100],{"class":1155},[425,28019,695],{"class":691},[425,28021,28022,28024,28026],{"class":427,"line":698},[425,28023,652],{"class":431},[425,28025,27206],{"class":435},[425,28027,28028],{"class":435}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[972,28030,28031],{"start":698},[450,28032,28033],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[416,28035,28037],{"className":418,"code":28036,"language":420,"meta":395,"style":395},"# 如果是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",[422,28038,28039,28044,28058,28062,28067],{"__ignoreMap":395},[425,28040,28041],{"class":427,"line":428},[425,28042,28043],{"class":1216},"# 如果是RHEL或者Rocky（DNF4）\n",[425,28045,28046,28048,28050,28052,28055],{"class":427,"line":698},[425,28047,652],{"class":431},[425,28049,27305],{"class":435},[425,28051,27403],{"class":435},[425,28053,28054],{"class":691}," --add-repo",[425,28056,28057],{"class":435}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[425,28059,28060],{"class":427,"line":710},[425,28061,3400],{"emptyLinePlaceholder":1084},[425,28063,28064],{"class":427,"line":721},[425,28065,28066],{"class":1216},"# 如果是Feodra41+（DNF5）\n",[425,28068,28069,28071,28073,28075,28077],{"class":427,"line":735},[425,28070,652],{"class":431},[425,28072,27305],{"class":435},[425,28074,27403],{"class":435},[425,28076,27406],{"class":435},[425,28078,28079],{"class":691}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[972,28081,28082],{"start":710},[450,28083,28084],{},"安装NVIDIA Container Toolki包",[416,28086,28088],{"className":418,"code":28087,"language":420,"meta":395,"style":395},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[422,28089,28090,28095,28108,28112,28117],{"__ignoreMap":395},[425,28091,28092],{"class":427,"line":428},[425,28093,28094],{"class":1216},"# 如果是RHEL或者Rocky\n",[425,28096,28097,28099,28101,28103,28105],{"class":427,"line":698},[425,28098,652],{"class":431},[425,28100,27305],{"class":435},[425,28102,24828],{"class":435},[425,28104,27389],{"class":691},[425,28106,28107],{"class":435}," nvidia-container-toolkit\n",[425,28109,28110],{"class":427,"line":710},[425,28111,3400],{"emptyLinePlaceholder":1084},[425,28113,28114],{"class":427,"line":721},[425,28115,28116],{"class":1216},"# 如果是Fedora\n",[425,28118,28119,28121,28123,28125,28127],{"class":427,"line":735},[425,28120,652],{"class":431},[425,28122,27305],{"class":435},[425,28124,24828],{"class":435},[425,28126,27389],{"class":691},[425,28128,28107],{"class":435},[972,28130,28131],{"start":721},[450,28132,28133,28134,28136],{},"安装nvidia-docker2 ： 在Fedora上使用",[422,28135,27280],{},"进行安装",[416,28138,28140],{"className":418,"code":28139,"language":420,"meta":395,"style":395},"sudo dnf install -y nvidia-docker2\n",[422,28141,28142],{"__ignoreMap":395},[425,28143,28144,28146,28148,28150,28152],{"class":427,"line":428},[425,28145,652],{"class":431},[425,28147,27305],{"class":435},[425,28149,24828],{"class":435},[425,28151,27389],{"class":691},[425,28153,27943],{"class":435},[972,28155,28156],{"start":735},[450,28157,28158],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[416,28160,28161],{"className":418,"code":27951,"language":420,"meta":395,"style":395},[422,28162,28163],{"__ignoreMap":395},[425,28164,28165,28167,28169,28171,28173],{"class":427,"line":428},[425,28166,652],{"class":431},[425,28168,27960],{"class":435},[425,28170,27963],{"class":435},[425,28172,27966],{"class":435},[425,28174,27969],{"class":691},[972,28176,28177],{"start":743},[450,28178,28179],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[416,28181,28182],{"className":418,"code":27977,"language":420,"meta":395,"style":395},[422,28183,28184],{"__ignoreMap":395},[425,28185,28186,28188,28190,28192],{"class":427,"line":428},[425,28187,652],{"class":431},[425,28189,27502],{"class":435},[425,28191,27988],{"class":435},[425,28193,27481],{"class":435},[19,28195,28196],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,28198,28199],{},"方法：",[19,28201,28202],{},"1️⃣nvidia-smi",[19,28204,28205],{},"2️⃣运行nvidia cuda 容器进行测试",[416,28207,28209],{"className":418,"code":28208,"language":420,"meta":395,"style":395},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[422,28210,28211],{"__ignoreMap":395},[425,28212,28213,28215,28217,28219,28222,28225,28228,28231],{"class":427,"line":428},[425,28214,652],{"class":431},[425,28216,685],{"class":435},[425,28218,688],{"class":435},[425,28220,28221],{"class":691}," --rm",[425,28223,28224],{"class":691}," --gpus",[425,28226,28227],{"class":435}," all",[425,28229,28230],{"class":435}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[425,28232,28233],{"class":435}," nvidia-smi\n",[19,28235,28236],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,28238,28239],{},[393,28240],{"alt":395,"src":28241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[14,28243,28245],{"id":28244},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,28247,28248],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,28250,28251],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,28253,28254],{},[22,28255,28256],{"href":28256,"rel":28257},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[26],[19,28259,28260],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,28262,28263],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,28265,28266],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[35,28268,28269,28285],{},[38,28270,28271],{},[41,28272,28273,28276,28279,28282],{},[44,28274,28275],{"align":46},"镜像类型",[44,28277,28278],{"align":46},"适用场景",[44,28280,28281],{"align":46},"示例标签",[44,28283,28284],{"align":46},"大小",[55,28286,28287,28301,28315],{},[41,28288,28289,28292,28295,28298],{},[60,28290,28291],{"align":46},"base",[60,28293,28294],{"align":46},"仅需 CUDA 运行时库",[60,28296,28297],{"align":46},"12.4.0-base-ubuntu22.04",[60,28299,28300],{"align":46},"~240MB",[41,28302,28303,28306,28309,28312],{},[60,28304,28305],{"align":46},"runtime",[60,28307,28308],{"align":46},"部署编译后的应用（含数学库）",[60,28310,28311],{"align":46},"12.4.0-runtime-ubuntu22.04",[60,28313,28314],{"align":46},"~2GB",[41,28316,28317,28320,28323,28326],{},[60,28318,28319],{"align":46},"devel",[60,28321,28322],{"align":46},"开发环境（含编译工具）",[60,28324,28325],{"align":46},"12.4.0-devel-ubuntu22.04",[60,28327,28328],{"align":46},"~3GB",[19,28330,28331,28332,28335],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[422,28333,28334],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,28337,28338],{},[393,28339],{"alt":395,"src":28340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,28342,28343],{},"在dockerfile里就可以开头这么写：",[416,28345,28347],{"className":418,"code":28346,"language":420,"meta":395,"style":395},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[422,28348,28349,28354],{"__ignoreMap":395},[425,28350,28351],{"class":427,"line":428},[425,28352,28353],{"class":1216},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[425,28355,28356,28359],{"class":427,"line":698},[425,28357,28358],{"class":431},"FROM",[425,28360,28361],{"class":435}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[14,28363,28365],{"id":28364},"_34配置以太网","3.4.配置以太网",[19,28367,28368],{},"指定网络模式",[416,28370,28372],{"className":418,"code":28371,"language":420,"meta":395,"style":395},"--net=host \\\n",[422,28373,28374],{"__ignoreMap":395},[425,28375,28376,28379,28381,28384],{"class":427,"line":428},[425,28377,28378],{"class":701},"--net",[425,28380,1204],{"class":1155},[425,28382,28383],{"class":435},"host",[425,28385,695],{"class":431},[19,28387,28388],{},"启动参数里加上这行即可。具体在下方",[19,28390,28391],{},"--net选项：指定网络模式，该选项有以下参数可选：",[447,28393,28394,28397,28400,28403],{},[450,28395,28396],{},"--net=bridge:默认选项，表示连接到默认的网桥",[450,28398,28399],{},"--net=host:容器使用宿主机的网络",[450,28401,28402],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[450,28404,28405],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[1074,28407,28408],{},"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":395,"searchDepth":698,"depth":698,"links":28410},[28411,28412,28413,28414],{"id":27726,"depth":710,"text":27727},{"id":27793,"depth":710,"text":27794},{"id":28244,"depth":710,"text":28245},{"id":28364,"depth":710,"text":28365},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27715,"description":27723},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":28421,"title":28422,"body":28423,"description":28430,"extension":1082,"meta":28436,"navigation":1084,"path":28437,"seo":28438,"stem":28439,"__hash__":28440},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":28424,"toc":28434},[28425,28428,28431],[10,28426,28422],{"id":28427},"_4dockerhub换源",[19,28429,28430],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,28432,28433],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":395,"searchDepth":698,"depth":698,"links":28435},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":28422,"description":28430},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":4,"title":5,"body":28442,"description":395,"extension":1082,"meta":29226,"navigation":1084,"path":1085,"seo":29227,"stem":1087,"__hash__":1088},{"type":7,"value":28443,"toc":29221},[28444,28446,28448,28453,28455,28457,28711,28713,28715,28717,28721,28725,28727,28729,28731,28733,28747,28749,28757,28761,28895,28901,28911,29137,29139,29157,29169,29175,29219],[10,28445,5],{"id":12},[14,28447,17],{"id":16},[19,28449,28450],{},[22,28451,24],{"href":24,"rel":28452},[26],[14,28454,30],{"id":29},[19,28456,33],{},[35,28458,28459,28469],{},[38,28460,28461],{},[41,28462,28463,28465,28467],{},[44,28464,47],{"align":46},[44,28466,50],{"align":46},[44,28468,53],{"align":46},[55,28470,28471,28479,28487,28495,28503,28511,28519,28527,28535,28543,28551,28559,28567,28575,28583,28591,28599,28607,28615,28623,28631,28639,28647,28655,28663,28671,28679,28687,28695,28703],{},[41,28472,28473,28475,28477],{},[60,28474,62],{"align":46},[60,28476,65],{"align":46},[60,28478,68],{"align":46},[41,28480,28481,28483,28485],{},[60,28482,73],{"align":46},[60,28484,76],{"align":46},[60,28486,79],{"align":46},[41,28488,28489,28491,28493],{},[60,28490,84],{"align":46},[60,28492,87],{"align":46},[60,28494,90],{"align":46},[41,28496,28497,28499,28501],{},[60,28498,95],{"align":46},[60,28500,98],{"align":46},[60,28502,101],{"align":46},[41,28504,28505,28507,28509],{},[60,28506,106],{"align":46},[60,28508,109],{"align":46},[60,28510,112],{"align":46},[41,28512,28513,28515,28517],{},[60,28514,117],{"align":46},[60,28516,120],{"align":46},[60,28518,123],{"align":46},[41,28520,28521,28523,28525],{},[60,28522,128],{"align":46},[60,28524,131],{"align":46},[60,28526,134],{"align":46},[41,28528,28529,28531,28533],{},[60,28530,139],{"align":46},[60,28532,142],{"align":46},[60,28534,139],{"align":46},[41,28536,28537,28539,28541],{},[60,28538,149],{"align":46},[60,28540,152],{"align":46},[60,28542,155],{"align":46},[41,28544,28545,28547,28549],{},[60,28546,160],{"align":46},[60,28548,163],{"align":46},[60,28550,166],{"align":46},[41,28552,28553,28555,28557],{},[60,28554,171],{"align":46},[60,28556,174],{"align":46},[60,28558,177],{"align":46},[41,28560,28561,28563,28565],{},[60,28562,182],{"align":46},[60,28564,185],{"align":46},[60,28566,182],{"align":46},[41,28568,28569,28571,28573],{},[60,28570,192],{"align":46},[60,28572,195],{"align":46},[60,28574,198],{"align":46},[41,28576,28577,28579,28581],{},[60,28578,203],{"align":46},[60,28580,206],{"align":46},[60,28582,209],{"align":46},[41,28584,28585,28587,28589],{},[60,28586,214],{"align":46},[60,28588,217],{"align":46},[60,28590,220],{"align":46},[41,28592,28593,28595,28597],{},[60,28594,225],{"align":46},[60,28596,228],{"align":46},[60,28598,225],{"align":46},[41,28600,28601,28603,28605],{},[60,28602,235],{"align":46},[60,28604,238],{"align":46},[60,28606,235],{"align":46},[41,28608,28609,28611,28613],{},[60,28610,245],{"align":46},[60,28612,248],{"align":46},[60,28614,245],{"align":46},[41,28616,28617,28619,28621],{},[60,28618,255],{"align":46},[60,28620,258],{"align":46},[60,28622,255],{"align":46},[41,28624,28625,28627,28629],{},[60,28626,265],{"align":46},[60,28628,268],{"align":46},[60,28630,271],{"align":46},[41,28632,28633,28635,28637],{},[60,28634,276],{"align":46},[60,28636,279],{"align":46},[60,28638,282],{"align":46},[41,28640,28641,28643,28645],{},[60,28642,287],{"align":46},[60,28644,290],{"align":46},[60,28646,293],{"align":46},[41,28648,28649,28651,28653],{},[60,28650,298],{"align":46},[60,28652,301],{"align":46},[60,28654,304],{"align":46},[41,28656,28657,28659,28661],{},[60,28658,309],{"align":46},[60,28660,312],{"align":46},[60,28662,315],{"align":46},[41,28664,28665,28667,28669],{},[60,28666,320],{"align":46},[60,28668,323],{"align":46},[60,28670,326],{"align":46},[41,28672,28673,28675,28677],{},[60,28674,331],{"align":46},[60,28676,334],{"align":46},[60,28678,331],{"align":46},[41,28680,28681,28683,28685],{},[60,28682,341],{"align":46},[60,28684,344],{"align":46},[60,28686,347],{"align":46},[41,28688,28689,28691,28693],{},[60,28690,352],{"align":46},[60,28692,355],{"align":46},[60,28694,358],{"align":46},[41,28696,28697,28699,28701],{},[60,28698,363],{"align":46},[60,28700,366],{"align":46},[60,28702,369],{"align":46},[41,28704,28705,28707,28709],{},[60,28706,374],{"align":46},[60,28708,377],{"align":46},[60,28710,380],{"align":46},[19,28712,383],{},[19,28714,386],{},[19,28716,389],{},[19,28718,28719],{},[393,28720],{"alt":395,"src":396},[19,28722,28723],{},[400,28724,402],{},[19,28726,405],{},[19,28728,408],{},[19,28730,411],{},[19,28732,414],{},[416,28734,28735],{"className":418,"code":419,"language":420,"meta":395,"style":395},[422,28736,28737],{"__ignoreMap":395},[425,28738,28739,28741,28743,28745],{"class":427,"line":428},[425,28740,432],{"class":431},[425,28742,436],{"class":435},[425,28744,439],{"class":435},[425,28746,442],{"class":435},[19,28748,445],{},[447,28750,28751,28753,28755],{},[450,28752,452],{},[450,28754,455],{},[450,28756,458],{},[14,28758,28759],{"id":461},[400,28760,464],{},[35,28762,28763,28773],{},[38,28764,28765],{},[41,28766,28767,28769,28771],{},[44,28768,473],{"align":46},[44,28770,476],{"align":46},[44,28772,479],{"align":46},[55,28774,28775,28783,28791,28799,28807,28815,28823,28831,28839,28847,28855,28863,28871,28879,28887],{},[41,28776,28777,28779,28781],{},[60,28778,486],{"align":46},[60,28780,489],{"align":46},[60,28782,492],{"align":46},[41,28784,28785,28787,28789],{},[60,28786,497],{"align":46},[60,28788,500],{"align":46},[60,28790,503],{"align":46},[41,28792,28793,28795,28797],{},[60,28794,508],{"align":46},[60,28796,511],{"align":46},[60,28798,514],{"align":46},[41,28800,28801,28803,28805],{},[60,28802,519],{"align":46},[60,28804,522],{"align":46},[60,28806,525],{"align":46},[41,28808,28809,28811,28813],{},[60,28810,530],{"align":46},[60,28812,533],{"align":46},[60,28814,536],{"align":46},[41,28816,28817,28819,28821],{},[60,28818,541],{"align":46},[60,28820,544],{"align":46},[60,28822,547],{"align":46},[41,28824,28825,28827,28829],{},[60,28826,552],{"align":46},[60,28828,555],{"align":46},[60,28830,558],{"align":46},[41,28832,28833,28835,28837],{},[60,28834,563],{"align":46},[60,28836,566],{"align":46},[60,28838,569],{"align":46},[41,28840,28841,28843,28845],{},[60,28842,574],{"align":46},[60,28844,577],{"align":46},[60,28846,580],{"align":46},[41,28848,28849,28851,28853],{},[60,28850,585],{"align":46},[60,28852,588],{"align":46},[60,28854,591],{"align":46},[41,28856,28857,28859,28861],{},[60,28858,596],{"align":46},[60,28860,599],{"align":46},[60,28862,602],{"align":46},[41,28864,28865,28867,28869],{},[60,28866,607],{"align":46},[60,28868,610],{"align":46},[60,28870,613],{"align":46},[41,28872,28873,28875,28877],{},[60,28874,618],{"align":46},[60,28876,621],{"align":46},[60,28878,624],{"align":46},[41,28880,28881,28883,28885],{},[60,28882,629],{"align":46},[60,28884,632],{"align":46},[60,28886,635],{"align":46},[41,28888,28889,28891,28893],{},[60,28890,640],{"align":46},[60,28892,643],{"align":46},[60,28894,646],{"align":46},[19,28896,649,28897,653,28899,657],{},[422,28898,652],{},[422,28900,656],{},[19,28902,660,28903,663,28905,666,28907,670,28909,673],{},[422,28904,652],{},[422,28906,652],{},[422,28908,669],{},[422,28910,669],{},[416,28912,28913],{"className":418,"code":676,"language":420,"meta":395,"style":395},[422,28914,28915,28927,28935,28943,28953,28959,28965,28971,28979,28987,28995,29007,29017,29027,29035,29043,29051,29063,29091,29117,29127,29133],{"__ignoreMap":395},[425,28916,28917,28919,28921,28923,28925],{"class":427,"line":428},[425,28918,652],{"class":431},[425,28920,685],{"class":435},[425,28922,688],{"class":435},[425,28924,692],{"class":691},[425,28926,695],{"class":691},[425,28928,28929,28931,28933],{"class":427,"line":698},[425,28930,702],{"class":701},[425,28932,705],{"class":435},[425,28934,695],{"class":691},[425,28936,28937,28939,28941],{"class":427,"line":710},[425,28938,713],{"class":701},[425,28940,716],{"class":435},[425,28942,695],{"class":691},[425,28944,28945,28947,28949,28951],{"class":427,"line":721},[425,28946,713],{"class":701},[425,28948,726],{"class":435},[425,28950,729],{"class":701},[425,28952,732],{"class":691},[425,28954,28955,28957],{"class":427,"line":735},[425,28956,738],{"class":701},[425,28958,732],{"class":691},[425,28960,28961,28963],{"class":427,"line":743},[425,28962,746],{"class":701},[425,28964,732],{"class":691},[425,28966,28967,28969],{"class":427,"line":751},[425,28968,754],{"class":701},[425,28970,732],{"class":691},[425,28972,28973,28975,28977],{"class":427,"line":759},[425,28974,762],{"class":701},[425,28976,765],{"class":435},[425,28978,695],{"class":691},[425,28980,28981,28983,28985],{"class":427,"line":770},[425,28982,762],{"class":701},[425,28984,775],{"class":435},[425,28986,695],{"class":691},[425,28988,28989,28991,28993],{"class":427,"line":780},[425,28990,762],{"class":701},[425,28992,785],{"class":435},[425,28994,695],{"class":691},[425,28996,28997,28999,29001,29003,29005],{"class":427,"line":790},[425,28998,713],{"class":701},[425,29000,795],{"class":435},[425,29002,669],{"class":701},[425,29004,800],{"class":435},[425,29006,695],{"class":691},[425,29008,29009,29011,29013,29015],{"class":427,"line":805},[425,29010,713],{"class":701},[425,29012,810],{"class":435},[425,29014,813],{"class":701},[425,29016,732],{"class":691},[425,29018,29019,29021,29023,29025],{"class":427,"line":818},[425,29020,713],{"class":701},[425,29022,823],{"class":435},[425,29024,826],{"class":701},[425,29026,732],{"class":691},[425,29028,29029,29031,29033],{"class":427,"line":831},[425,29030,713],{"class":701},[425,29032,836],{"class":435},[425,29034,695],{"class":691},[425,29036,29037,29039,29041],{"class":427,"line":841},[425,29038,844],{"class":701},[425,29040,847],{"class":435},[425,29042,695],{"class":691},[425,29044,29045,29047,29049],{"class":427,"line":852},[425,29046,844],{"class":701},[425,29048,857],{"class":435},[425,29050,695],{"class":691},[425,29052,29053,29055,29057,29059,29061],{"class":427,"line":862},[425,29054,865],{"class":701},[425,29056,868],{"class":435},[425,29058,669],{"class":701},[425,29060,873],{"class":435},[425,29062,695],{"class":691},[425,29064,29065,29067,29069,29071,29073,29075,29077,29079,29081,29083,29085,29087,29089],{"class":427,"line":878},[425,29066,844],{"class":701},[425,29068,883],{"class":435},[425,29070,886],{"class":701},[425,29072,889],{"class":431},[425,29074,892],{"class":691},[425,29076,895],{"class":701},[425,29078,898],{"class":435},[425,29080,886],{"class":701},[425,29082,889],{"class":431},[425,29084,892],{"class":691},[425,29086,895],{"class":701},[425,29088,909],{"class":435},[425,29090,695],{"class":691},[425,29092,29093,29095,29097,29099,29101,29103,29105,29107,29109,29111,29113,29115],{"class":427,"line":914},[425,29094,844],{"class":701},[425,29096,883],{"class":435},[425,29098,886],{"class":701},[425,29100,889],{"class":431},[425,29102,892],{"class":691},[425,29104,895],{"class":701},[425,29106,929],{"class":435},[425,29108,886],{"class":701},[425,29110,889],{"class":431},[425,29112,892],{"class":691},[425,29114,938],{"class":701},[425,29116,732],{"class":691},[425,29118,29119,29121,29123,29125],{"class":427,"line":943},[425,29120,865],{"class":701},[425,29122,948],{"class":435},[425,29124,951],{"class":701},[425,29126,732],{"class":691},[425,29128,29129,29131],{"class":427,"line":956},[425,29130,959],{"class":701},[425,29132,732],{"class":691},[425,29134,29135],{"class":427,"line":964},[425,29136,967],{"class":701},[19,29138,970],{},[972,29140,29141,29147,29149,29151],{},[450,29142,29143,978,29145,982],{},[422,29144,716],{},[422,29146,981],{},[450,29148,985],{},[450,29150,988],{},[450,29152,991,29153,998],{},[993,29154,29155],{},[400,29156,997],{},[416,29158,29159],{"className":418,"code":1001,"language":420,"meta":395,"style":395},[422,29160,29161],{"__ignoreMap":395},[425,29162,29163,29165,29167],{"class":427,"line":428},[425,29164,1008],{"class":431},[425,29166,1011],{"class":435},[425,29168,695],{"class":691},[19,29170,1016,29171,1022],{},[993,29172,29173],{},[400,29174,1021],{},[416,29176,29177],{"className":418,"code":1025,"language":420,"meta":395,"style":395},[422,29178,29179,29203,29211],{"__ignoreMap":395},[425,29180,29181,29183,29185,29187,29189,29191,29193,29195,29197,29199,29201],{"class":427,"line":428},[425,29182,1032],{"class":431},[425,29184,1035],{"class":701},[425,29186,889],{"class":431},[425,29188,892],{"class":691},[425,29190,895],{"class":701},[425,29192,948],{"class":435},[425,29194,886],{"class":701},[425,29196,889],{"class":431},[425,29198,1050],{"class":691},[425,29200,938],{"class":701},[425,29202,732],{"class":691},[425,29204,29205,29207,29209],{"class":427,"line":698},[425,29206,844],{"class":701},[425,29208,1061],{"class":435},[425,29210,695],{"class":691},[425,29212,29213,29215,29217],{"class":427,"line":710},[425,29214,844],{"class":701},[425,29216,1070],{"class":435},[425,29218,695],{"class":691},[1074,29220,1076],{},{"title":395,"searchDepth":698,"depth":698,"links":29222},[29223,29224,29225],{"id":16,"depth":710,"text":17},{"id":29,"depth":710,"text":30},{"id":461,"depth":710,"text":464},{},{"title":5,"description":395},{"id":29229,"title":29230,"body":29231,"description":395,"extension":1082,"meta":30854,"navigation":1084,"path":30855,"seo":30856,"stem":30857,"__hash__":30858},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":29232,"toc":30849},[29233,29236,29240,29243,29465,29469,29473,29476,29582,29587,29590,29595,29598,29603,29606,29611,29614,29626,29629,29634,29641,29669,29676,29752,29757,29760,29783,29785,29860,29865,29868,29872,29880,29885,29890,29894,29905,29911,29914,29917,29941,29944,29947,29975,29978,29981,30446,30449,30454,30459,30463,30486,30491,30495,30499,30502,30505,30508,30535,30538,30541,30559,30562,30565,30587,30595,30600,30605,30609,30612,30615,30618,30621,30666,30669,30687,30690,30695,30698,30719,30722,30778,30781,30786,30790,30793,30800,30803,30806,30811,30814,30830,30833,30846],[10,29234,29230],{"id":29235},"_6手动创建docker镜像",[14,29237,29239],{"id":29238},"_61dockerfile","6.1.DockerFile",[19,29241,29242],{},"常用命令：",[35,29244,29245,29256],{},[38,29246,29247],{},[41,29248,29249,29252,29254],{},[44,29250,29251],{"align":46},"指令",[44,29253,26860],{"align":46},[44,29255,53],{"align":46},[55,29257,29258,29268,29284,29295,29306,29317,29328,29339,29350,29364,29378,29389,29403,29414,29425,29439,29454],{},[41,29259,29260,29262,29265],{},[60,29261,28358],{"align":46},[60,29263,29264],{"align":46},"指定基础镜像，是 Dockerfile 的起点",[60,29266,29267],{"align":46},"FROM ubuntu:22.04",[41,29269,29270,29273,29276],{},[60,29271,29272],{"align":46},"LABEL",[60,29274,29275],{"align":46},"添加元数据（如作者、版本等）",[60,29277,29278,29279,29283],{"align":46},"LABEL maintainer=”",[22,29280,29282],{"href":29281},"mailto:you@example.com","you@example.com","”",[41,29285,29286,29289,29292],{},[60,29287,29288],{"align":46},"ENV",[60,29290,29291],{"align":46},"设置环境变量",[60,29293,29294],{"align":46},"ENV PORT=8080",[41,29296,29297,29300,29303],{},[60,29298,29299],{"align":46},"ARG",[60,29301,29302],{"align":46},"构建参数，只在构建期间可用",[60,29304,29305],{"align":46},"ARG VERSION=1.0",[41,29307,29308,29311,29314],{},[60,29309,29310],{"align":46},"RUN",[60,29312,29313],{"align":46},"构建镜像时运行命令",[60,29315,29316],{"align":46},"RUN apt-get update && apt-get install -y curl",[41,29318,29319,29322,29325],{},[60,29320,29321],{"align":46},"COPY",[60,29323,29324],{"align":46},"复制文件到镜像中",[60,29326,29327],{"align":46},"COPY . \u002Fapp",[41,29329,29330,29333,29336],{},[60,29331,29332],{"align":46},"ADD",[60,29334,29335],{"align":46},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[60,29337,29338],{"align":46},"ADD archive.tar.gz \u002Fdata\u002F",[41,29340,29341,29344,29347],{},[60,29342,29343],{"align":46},"WORKDIR",[60,29345,29346],{"align":46},"设置工作目录",[60,29348,29349],{"align":46},"WORKDIR \u002Fopt",[41,29351,29352,29355,29358],{},[60,29353,29354],{"align":46},"CMD",[60,29356,29357],{"align":46},"设置容器启动时默认命令（可被 docker run 覆盖）",[60,29359,29360,29361],{"align":46},"CMD ",[425,29362,29363],{},"“node”, “index.js”",[41,29365,29366,29369,29372],{},[60,29367,29368],{"align":46},"ENTRYPOINT",[60,29370,29371],{"align":46},"设置容器启动时固定命令（通常用于 CLI 工具等）",[60,29373,29374,29375],{"align":46},"ENTRYPOINT ",[425,29376,29377],{},"“python3”",[41,29379,29380,29383,29386],{},[60,29381,29382],{"align":46},"EXPOSE",[60,29384,29385],{"align":46},"声明镜像内服务监听的端口（不会自动映射）",[60,29387,29388],{"align":46},"EXPOSE 80",[41,29390,29391,29394,29397],{},[60,29392,29393],{"align":46},"VOLUME",[60,29395,29396],{"align":46},"声明数据卷挂载点",[60,29398,29399,29400],{"align":46},"VOLUME ",[425,29401,29402],{},"“\u002Fdata”",[41,29404,29405,29408,29411],{},[60,29406,29407],{"align":46},"USER",[60,29409,29410],{"align":46},"设置后续命令执行的用户",[60,29412,29413],{"align":46},"USER appuser",[41,29415,29416,29419,29422],{},[60,29417,29418],{"align":46},"ONBUILD",[60,29420,29421],{"align":46},"当镜像作为其他镜像基础镜像时触发的构建指令",[60,29423,29424],{"align":46},"ONBUILD COPY . \u002Fsrc",[41,29426,29427,29430,29433],{},[60,29428,29429],{"align":46},"SHELL",[60,29431,29432],{"align":46},"更改默认 shell，比如将 sh -c 改为 bash -c",[60,29434,29435,29436],{"align":46},"SHELL ",[425,29437,29438],{},"“\u002Fbin\u002Fbash”, “-c”",[41,29440,29441,29444,29447],{},[60,29442,29443],{"align":46},"HEALTHCHECK",[60,29445,29446],{"align":46},"定义容器运行时的健康检查命令",[60,29448,29449,29450],{"align":46},"`HEALTHCHECK CMD curl –fail ",[22,29451,29452],{"href":29452,"rel":29453},"http:\u002F\u002Flocalhost:8080",[26],[41,29455,29456,29459,29462],{},[60,29457,29458],{"align":46},"STOPSIGNAL",[60,29460,29461],{"align":46},"容器停止时发送的信号",[60,29463,29464],{"align":46},"STOPSIGNAL SIGKILL",[14,29466,29468],{"id":29467},"_62自己创建容器","6.2.自己创建容器",[22995,29470,29472],{"id":29471},"_621手动创建","6.2.1.手动创建",[19,29474,29475],{},"在x86电脑上编译x86的：",[416,29477,29479],{"className":418,"code":29478,"language":420,"meta":395,"style":395},"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",[422,29480,29481,29497,29501,29514,29518,29531,29535,29548,29552,29565,29569],{"__ignoreMap":395},[425,29482,29483,29485,29488,29491,29494],{"class":427,"line":428},[425,29484,27542],{"class":431},[425,29486,29487],{"class":435}," build",[425,29489,29490],{"class":691}," -t",[425,29492,29493],{"class":435}," ros-melodic-cuda118-cudnn8-bionic:latest",[425,29495,29496],{"class":435}," .\n",[425,29498,29499],{"class":427,"line":698},[425,29500,3400],{"emptyLinePlaceholder":1084},[425,29502,29503,29505,29507,29509,29512],{"class":427,"line":710},[425,29504,27542],{"class":431},[425,29506,29487],{"class":435},[425,29508,29490],{"class":691},[425,29510,29511],{"class":435}," ros-noetic-focal:latest",[425,29513,29496],{"class":435},[425,29515,29516],{"class":427,"line":721},[425,29517,3400],{"emptyLinePlaceholder":1084},[425,29519,29520,29522,29524,29526,29529],{"class":427,"line":735},[425,29521,27542],{"class":431},[425,29523,29487],{"class":435},[425,29525,29490],{"class":691},[425,29527,29528],{"class":435}," ros-humble-jammy:latest",[425,29530,29496],{"class":435},[425,29532,29533],{"class":427,"line":743},[425,29534,3400],{"emptyLinePlaceholder":1084},[425,29536,29537,29539,29541,29543,29546],{"class":427,"line":751},[425,29538,27542],{"class":431},[425,29540,29487],{"class":435},[425,29542,29490],{"class":691},[425,29544,29545],{"class":435}," ros-jazzy-noble:latest",[425,29547,29496],{"class":435},[425,29549,29550],{"class":427,"line":759},[425,29551,3400],{"emptyLinePlaceholder":1084},[425,29553,29554,29556,29558,29560,29563],{"class":427,"line":770},[425,29555,27542],{"class":431},[425,29557,29487],{"class":435},[425,29559,29490],{"class":691},[425,29561,29562],{"class":435}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[425,29564,29496],{"class":435},[425,29566,29567],{"class":427,"line":780},[425,29568,3400],{"emptyLinePlaceholder":1084},[425,29570,29571,29573,29575,29577,29580],{"class":427,"line":790},[425,29572,27542],{"class":431},[425,29574,29487],{"class":435},[425,29576,29490],{"class":691},[425,29578,29579],{"class":435}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[425,29581,29496],{"class":435},[19,29583,29584],{},[393,29585],{"alt":395,"src":29586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,29588,29589],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,29591,29592],{},[393,29593],{"alt":395,"src":29594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,29596,29597],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[972,29599,29600],{},[450,29601,29602],{},"创建 Docker Hub 账户",[19,29604,29605],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[972,29607,29608],{"start":698},[450,29609,29610],{},"登录 Docker Hub",[19,29612,29613],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[416,29615,29617],{"className":418,"code":29616,"language":420,"meta":395,"style":395},"docker login\n",[422,29618,29619],{"__ignoreMap":395},[425,29620,29621,29623],{"class":427,"line":428},[425,29622,27542],{"class":431},[425,29624,29625],{"class":435}," login\n",[19,29627,29628],{},"输入你的 Docker Hub 用户名和密码进行验证。",[972,29630,29631],{},[450,29632,29633],{},"为你的镜像打标签",[19,29635,29636,29637,29640],{},"Docker Hub 使用 ",[422,29638,29639],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[416,29642,29644],{"className":418,"code":29643,"language":420,"meta":395,"style":395},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[422,29645,29646],{"__ignoreMap":395},[425,29647,29648,29650,29653,29655,29658,29661,29664,29666],{"class":427,"line":428},[425,29649,27542],{"class":431},[425,29651,29652],{"class":435}," tag",[425,29654,29545],{"class":435},[425,29656,29657],{"class":1155}," \u003C",[425,29659,29660],{"class":435},"你的用户",[425,29662,29663],{"class":701},"名",[425,29665,2107],{"class":1155},[425,29667,29668],{"class":435},"\u002Fros-jazzy-noble:latest\n",[19,29670,29671,29672,29675],{},"例如，如果你的 Docker Hub 用户名是 ",[422,29673,29674],{},"tungchiahui","，你应该执行：",[416,29677,29679],{"className":418,"code":29678,"language":420,"meta":395,"style":395},"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",[422,29680,29681,29692,29696,29707,29711,29722,29726,29737,29741],{"__ignoreMap":395},[425,29682,29683,29685,29687,29689],{"class":427,"line":428},[425,29684,27542],{"class":431},[425,29686,29652],{"class":435},[425,29688,29511],{"class":435},[425,29690,29691],{"class":435}," tungchiahui\u002Fros-noetic-focal:latest\n",[425,29693,29694],{"class":427,"line":698},[425,29695,3400],{"emptyLinePlaceholder":1084},[425,29697,29698,29700,29702,29704],{"class":427,"line":710},[425,29699,27542],{"class":431},[425,29701,29652],{"class":435},[425,29703,29528],{"class":435},[425,29705,29706],{"class":435}," tungchiahui\u002Fros-humble-jammy:latest\n",[425,29708,29709],{"class":427,"line":721},[425,29710,3400],{"emptyLinePlaceholder":1084},[425,29712,29713,29715,29717,29719],{"class":427,"line":735},[425,29714,27542],{"class":431},[425,29716,29652],{"class":435},[425,29718,29545],{"class":435},[425,29720,29721],{"class":435}," tungchiahui\u002Fros-jazzy-noble:latest\n",[425,29723,29724],{"class":427,"line":743},[425,29725,3400],{"emptyLinePlaceholder":1084},[425,29727,29728,29730,29732,29734],{"class":427,"line":751},[425,29729,27542],{"class":431},[425,29731,29652],{"class":435},[425,29733,29562],{"class":435},[425,29735,29736],{"class":435}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[425,29738,29739],{"class":427,"line":759},[425,29740,3400],{"emptyLinePlaceholder":1084},[425,29742,29743,29745,29747,29749],{"class":427,"line":770},[425,29744,27542],{"class":431},[425,29746,29652],{"class":435},[425,29748,29579],{"class":435},[425,29750,29751],{"class":435}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[972,29753,29754],{"start":698},[450,29755,29756],{},"推送镜像到 Docker Hub",[19,29758,29759],{},"使用以下命令将镜像推送到 Docker Hub：",[416,29761,29763],{"className":418,"code":29762,"language":420,"meta":395,"style":395},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[422,29764,29765],{"__ignoreMap":395},[425,29766,29767,29769,29772,29774,29776,29778,29780],{"class":427,"line":428},[425,29768,27542],{"class":431},[425,29770,29771],{"class":435}," push",[425,29773,29657],{"class":1155},[425,29775,29660],{"class":435},[425,29777,29663],{"class":701},[425,29779,2107],{"class":1155},[425,29781,29782],{"class":435},"\u002Fros-noetic-jazzy-noble:latest\n",[19,29784,15630],{},[416,29786,29788],{"className":418,"code":29787,"language":420,"meta":395,"style":395},"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",[422,29789,29790,29798,29802,29810,29814,29822,29826,29835,29839,29847,29851],{"__ignoreMap":395},[425,29791,29792,29794,29796],{"class":427,"line":428},[425,29793,27542],{"class":431},[425,29795,29771],{"class":435},[425,29797,29691],{"class":435},[425,29799,29800],{"class":427,"line":698},[425,29801,3400],{"emptyLinePlaceholder":1084},[425,29803,29804,29806,29808],{"class":427,"line":710},[425,29805,27542],{"class":431},[425,29807,29771],{"class":435},[425,29809,29706],{"class":435},[425,29811,29812],{"class":427,"line":721},[425,29813,3400],{"emptyLinePlaceholder":1084},[425,29815,29816,29818,29820],{"class":427,"line":735},[425,29817,27542],{"class":431},[425,29819,29771],{"class":435},[425,29821,29721],{"class":435},[425,29823,29824],{"class":427,"line":743},[425,29825,3400],{"emptyLinePlaceholder":1084},[425,29827,29828,29830,29832],{"class":427,"line":751},[425,29829,27542],{"class":431},[425,29831,29771],{"class":435},[425,29833,29834],{"class":435}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[425,29836,29837],{"class":427,"line":759},[425,29838,3400],{"emptyLinePlaceholder":1084},[425,29840,29841,29843,29845],{"class":427,"line":770},[425,29842,27542],{"class":431},[425,29844,29771],{"class":435},[425,29846,29751],{"class":435},[425,29848,29849],{"class":427,"line":780},[425,29850,3400],{"emptyLinePlaceholder":1084},[425,29852,29853,29855,29857],{"class":427,"line":790},[425,29854,27542],{"class":431},[425,29856,29771],{"class":435},[425,29858,29859],{"class":435}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[972,29861,29862],{"start":710},[450,29863,29864],{},"验证推送成功",[19,29866,29867],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,29869,29870],{},[400,29871,4784],{},[447,29873,29874,29877],{},[450,29875,29876],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[450,29878,29879],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,29881,29882],{},[393,29883],{"alt":395,"src":29884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,29886,29887],{},[393,29888],{"alt":395,"src":29889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22995,29891,29893],{"id":29892},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,29895,29896,29897,29900,29901,29904],{},"如果您想在 ",[400,29898,29899],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[400,29902,29903],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,29906,29907,29908],{},"1. ",[400,29909,29910],{},"启用 Docker 跨平台构建",[19,29912,29913],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,29915,29916],{},"第一步：启用 buildx（只需执行一次）",[416,29918,29920],{"className":418,"code":29919,"language":420,"meta":395,"style":395},"docker buildx create --name multiarch_builder --use\n",[422,29921,29922],{"__ignoreMap":395},[425,29923,29924,29926,29929,29932,29935,29938],{"class":427,"line":428},[425,29925,27542],{"class":431},[425,29927,29928],{"class":435}," buildx",[425,29930,29931],{"class":435}," create",[425,29933,29934],{"class":691}," --name",[425,29936,29937],{"class":435}," multiarch_builder",[425,29939,29940],{"class":691}," --use\n",[19,29942,29943],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,29945,29946],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[416,29948,29950],{"className":418,"code":29949,"language":420,"meta":395,"style":395},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[422,29951,29952],{"__ignoreMap":395},[425,29953,29954,29956,29958,29960,29963,29966,29969,29972],{"class":427,"line":428},[425,29955,27542],{"class":431},[425,29957,688],{"class":435},[425,29959,28221],{"class":691},[425,29961,29962],{"class":691}," --privileged",[425,29964,29965],{"class":435}," multiarch\u002Fqemu-user-static",[425,29967,29968],{"class":691}," --reset",[425,29970,29971],{"class":691}," -p",[425,29973,29974],{"class":435}," yes\n",[19,29976,29977],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,29979,29980],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[416,29982,29984],{"className":418,"code":29983,"language":420,"meta":395,"style":395},"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",[422,29985,29986,30028,30032,30037,30047,30057,30066,30072,30076,30080,30090,30098,30107,30113,30117,30121,30131,30139,30148,30154,30158,30162,30172,30180,30189,30195,30199,30203,30213,30221,30230,30236,30240,30244,30254,30262,30271,30277,30281,30285,30295,30303,30312,30318,30322,30326,30336,30344,30353,30359,30363,30367,30377,30385,30394,30400,30404,30408,30419,30427,30436,30442],{"__ignoreMap":395},[425,29987,29988,29990,29992,29994,29997,30000,30002,30004,30007,30009,30011,30013,30015,30018,30021,30023,30026],{"class":427,"line":428},[425,29989,27542],{"class":431},[425,29991,29928],{"class":435},[425,29993,29487],{"class":435},[425,29995,29996],{"class":691}," --platform",[425,29998,29999],{"class":435}," linux\u002Famd64,linux\u002Farm64",[425,30001,29490],{"class":691},[425,30003,29657],{"class":1155},[425,30005,30006],{"class":435},"你的镜像",[425,30008,29663],{"class":701},[425,30010,2107],{"class":1155},[425,30012,948],{"class":435},[425,30014,2057],{"class":1155},[425,30016,30017],{"class":435},"标",[425,30019,30020],{"class":701},"签",[425,30022,2107],{"class":1155},[425,30024,30025],{"class":691}," --push",[425,30027,29496],{"class":435},[425,30029,30030],{"class":427,"line":698},[425,30031,3400],{"emptyLinePlaceholder":1084},[425,30033,30034],{"class":427,"line":710},[425,30035,30036],{"class":1216},"# 例子：\n",[425,30038,30039,30041,30043,30045],{"class":427,"line":721},[425,30040,27542],{"class":431},[425,30042,29928],{"class":435},[425,30044,29487],{"class":435},[425,30046,695],{"class":691},[425,30048,30049,30052,30055],{"class":427,"line":735},[425,30050,30051],{"class":701},"--platform ",[425,30053,30054],{"class":435},"linux\u002Famd64,linux\u002Farm64",[425,30056,695],{"class":691},[425,30058,30059,30061,30064],{"class":427,"line":743},[425,30060,29490],{"class":691},[425,30062,30063],{"class":435}," tungchiahui\u002Fros:noetic-focal",[425,30065,695],{"class":691},[425,30067,30068,30070],{"class":427,"line":751},[425,30069,30025],{"class":691},[425,30071,695],{"class":691},[425,30073,30074],{"class":427,"line":759},[425,30075,29496],{"class":435},[425,30077,30078],{"class":427,"line":770},[425,30079,3400],{"emptyLinePlaceholder":1084},[425,30081,30082,30084,30086,30088],{"class":427,"line":780},[425,30083,27542],{"class":431},[425,30085,29928],{"class":435},[425,30087,29487],{"class":435},[425,30089,695],{"class":691},[425,30091,30092,30094,30096],{"class":427,"line":790},[425,30093,30051],{"class":701},[425,30095,30054],{"class":435},[425,30097,695],{"class":691},[425,30099,30100,30102,30105],{"class":427,"line":805},[425,30101,29490],{"class":691},[425,30103,30104],{"class":435}," tungchiahui\u002Fros:humble-jammy",[425,30106,695],{"class":691},[425,30108,30109,30111],{"class":427,"line":818},[425,30110,30025],{"class":691},[425,30112,695],{"class":691},[425,30114,30115],{"class":427,"line":831},[425,30116,29496],{"class":435},[425,30118,30119],{"class":427,"line":841},[425,30120,3400],{"emptyLinePlaceholder":1084},[425,30122,30123,30125,30127,30129],{"class":427,"line":852},[425,30124,27542],{"class":431},[425,30126,29928],{"class":435},[425,30128,29487],{"class":435},[425,30130,695],{"class":691},[425,30132,30133,30135,30137],{"class":427,"line":862},[425,30134,30051],{"class":701},[425,30136,30054],{"class":435},[425,30138,695],{"class":691},[425,30140,30141,30143,30146],{"class":427,"line":878},[425,30142,29490],{"class":691},[425,30144,30145],{"class":435}," tungchiahui\u002Fros:jazzy-noble",[425,30147,695],{"class":691},[425,30149,30150,30152],{"class":427,"line":914},[425,30151,30025],{"class":691},[425,30153,695],{"class":691},[425,30155,30156],{"class":427,"line":943},[425,30157,29496],{"class":435},[425,30159,30160],{"class":427,"line":956},[425,30161,3400],{"emptyLinePlaceholder":1084},[425,30163,30164,30166,30168,30170],{"class":427,"line":964},[425,30165,685],{"class":431},[425,30167,29928],{"class":435},[425,30169,29487],{"class":435},[425,30171,695],{"class":691},[425,30173,30174,30176,30178],{"class":427,"line":2733},[425,30175,30051],{"class":701},[425,30177,30054],{"class":435},[425,30179,695],{"class":691},[425,30181,30182,30184,30187],{"class":427,"line":2750},[425,30183,29490],{"class":691},[425,30185,30186],{"class":435}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[425,30188,695],{"class":691},[425,30190,30191,30193],{"class":427,"line":2755},[425,30192,30025],{"class":691},[425,30194,695],{"class":691},[425,30196,30197],{"class":427,"line":2760},[425,30198,29496],{"class":435},[425,30200,30201],{"class":427,"line":2765},[425,30202,3400],{"emptyLinePlaceholder":1084},[425,30204,30205,30207,30209,30211],{"class":427,"line":2779},[425,30206,27542],{"class":431},[425,30208,29928],{"class":435},[425,30210,29487],{"class":435},[425,30212,695],{"class":691},[425,30214,30215,30217,30219],{"class":427,"line":2784},[425,30216,30051],{"class":701},[425,30218,30054],{"class":435},[425,30220,695],{"class":691},[425,30222,30223,30225,30228],{"class":427,"line":3577},[425,30224,29490],{"class":691},[425,30226,30227],{"class":435}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[425,30229,695],{"class":691},[425,30231,30232,30234],{"class":427,"line":3591},[425,30233,30025],{"class":691},[425,30235,695],{"class":691},[425,30237,30238],{"class":427,"line":3599},[425,30239,29496],{"class":435},[425,30241,30242],{"class":427,"line":3604},[425,30243,3400],{"emptyLinePlaceholder":1084},[425,30245,30246,30248,30250,30252],{"class":427,"line":3610},[425,30247,685],{"class":431},[425,30249,29928],{"class":435},[425,30251,29487],{"class":435},[425,30253,695],{"class":691},[425,30255,30256,30258,30260],{"class":427,"line":3616},[425,30257,30051],{"class":701},[425,30259,30054],{"class":435},[425,30261,695],{"class":691},[425,30263,30264,30266,30269],{"class":427,"line":3621},[425,30265,29490],{"class":691},[425,30267,30268],{"class":435}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[425,30270,695],{"class":691},[425,30272,30273,30275],{"class":427,"line":8948},[425,30274,30025],{"class":691},[425,30276,695],{"class":691},[425,30278,30279],{"class":427,"line":8972},[425,30280,29496],{"class":435},[425,30282,30283],{"class":427,"line":8977},[425,30284,3400],{"emptyLinePlaceholder":1084},[425,30286,30287,30289,30291,30293],{"class":427,"line":8983},[425,30288,27542],{"class":431},[425,30290,29928],{"class":435},[425,30292,29487],{"class":435},[425,30294,695],{"class":691},[425,30296,30297,30299,30301],{"class":427,"line":9010},[425,30298,30051],{"class":701},[425,30300,30054],{"class":435},[425,30302,695],{"class":691},[425,30304,30305,30307,30310],{"class":427,"line":9015},[425,30306,29490],{"class":691},[425,30308,30309],{"class":435}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[425,30311,695],{"class":691},[425,30313,30314,30316],{"class":427,"line":9021},[425,30315,30025],{"class":691},[425,30317,695],{"class":691},[425,30319,30320],{"class":427,"line":9033},[425,30321,29496],{"class":435},[425,30323,30324],{"class":427,"line":9045},[425,30325,3400],{"emptyLinePlaceholder":1084},[425,30327,30328,30330,30332,30334],{"class":427,"line":9057},[425,30329,27542],{"class":431},[425,30331,29928],{"class":435},[425,30333,29487],{"class":435},[425,30335,695],{"class":691},[425,30337,30338,30340,30342],{"class":427,"line":10715},[425,30339,30051],{"class":701},[425,30341,30054],{"class":435},[425,30343,695],{"class":691},[425,30345,30346,30348,30351],{"class":427,"line":10740},[425,30347,29490],{"class":691},[425,30349,30350],{"class":435}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[425,30352,695],{"class":691},[425,30354,30355,30357],{"class":427,"line":10763},[425,30356,30025],{"class":691},[425,30358,695],{"class":691},[425,30360,30361],{"class":427,"line":10787},[425,30362,29496],{"class":435},[425,30364,30365],{"class":427,"line":10792},[425,30366,3400],{"emptyLinePlaceholder":1084},[425,30368,30369,30371,30373,30375],{"class":427,"line":10797},[425,30370,685],{"class":431},[425,30372,29928],{"class":435},[425,30374,29487],{"class":435},[425,30376,695],{"class":691},[425,30378,30379,30381,30383],{"class":427,"line":10802},[425,30380,30051],{"class":701},[425,30382,30054],{"class":435},[425,30384,695],{"class":691},[425,30386,30387,30389,30392],{"class":427,"line":10811},[425,30388,29490],{"class":691},[425,30390,30391],{"class":435}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[425,30393,695],{"class":691},[425,30395,30396,30398],{"class":427,"line":10816},[425,30397,30025],{"class":691},[425,30399,695],{"class":691},[425,30401,30402],{"class":427,"line":10822},[425,30403,29496],{"class":435},[425,30405,30406],{"class":427,"line":10843},[425,30407,3400],{"emptyLinePlaceholder":1084},[425,30409,30410,30413,30415,30417],{"class":427,"line":10849},[425,30411,30412],{"class":431},"  docker",[425,30414,29928],{"class":435},[425,30416,29487],{"class":435},[425,30418,695],{"class":691},[425,30420,30421,30423,30425],{"class":427,"line":10863},[425,30422,30051],{"class":701},[425,30424,30054],{"class":435},[425,30426,695],{"class":691},[425,30428,30429,30431,30434],{"class":427,"line":10869},[425,30430,29490],{"class":691},[425,30432,30433],{"class":435}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[425,30435,695],{"class":691},[425,30437,30438,30440],{"class":427,"line":10896},[425,30439,30025],{"class":691},[425,30441,695],{"class":691},[425,30443,30444],{"class":427,"line":10905},[425,30445,29496],{"class":435},[19,30447,30448],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,30450,30451],{},[393,30452],{"alt":395,"src":30453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,30455,30456],{},[393,30457],{"alt":395,"src":30458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22995,30460,30462],{"id":30461},"_623清除构建缓存","6.2.3.清除构建缓存",[416,30464,30466],{"className":418,"code":30465,"language":420,"meta":395,"style":395},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[422,30467,30468,30473],{"__ignoreMap":395},[425,30469,30470],{"class":427,"line":428},[425,30471,30472],{"class":1216},"# 清理BuildKit构建缓存\n",[425,30474,30475,30477,30480,30483],{"class":427,"line":698},[425,30476,27542],{"class":431},[425,30478,30479],{"class":435}," builder",[425,30481,30482],{"class":435}," prune",[425,30484,30485],{"class":691}," -f\n",[19,30487,30488],{},[393,30489],{"alt":395,"src":30490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[14,30492,30494],{"id":30493},"_63补充","6.3.补充",[22995,30496,30498],{"id":30497},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,30500,30501],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,30503,30504],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,30506,30507],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[416,30509,30511],{"className":418,"code":30510,"language":420,"meta":395,"style":395},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[422,30512,30513,30520],{"__ignoreMap":395},[425,30514,30515,30517],{"class":427,"line":428},[425,30516,28358],{"class":431},[425,30518,30519],{"class":435}," nginx\n",[425,30521,30522,30524,30527,30530,30532],{"class":427,"line":698},[425,30523,29310],{"class":431},[425,30525,30526],{"class":435}," echo",[425,30528,30529],{"class":435}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[425,30531,27212],{"class":1155},[425,30533,30534],{"class":435}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,30536,30537],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,30539,30540],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[416,30542,30544],{"className":418,"code":30543,"language":420,"meta":395,"style":395},"docker build -t nginx:tuling .\n",[422,30545,30546],{"__ignoreMap":395},[425,30547,30548,30550,30552,30554,30557],{"class":427,"line":428},[425,30549,27542],{"class":431},[425,30551,29487],{"class":435},[425,30553,29490],{"class":691},[425,30555,30556],{"class":435}," nginx:tuling",[425,30558,29496],{"class":435},[19,30560,30561],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,30563,30564],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[416,30566,30568],{"className":418,"code":30567,"language":420,"meta":395,"style":395},"docker run -d -p 92:80 nginx:tuling\n",[422,30569,30570],{"__ignoreMap":395},[425,30571,30572,30574,30576,30579,30581,30584],{"class":427,"line":428},[425,30573,27542],{"class":431},[425,30575,688],{"class":435},[425,30577,30578],{"class":691}," -d",[425,30580,29971],{"class":691},[425,30582,30583],{"class":435}," 92:80",[425,30585,30586],{"class":435}," nginx:tuling\n",[19,30588,30589,30590],{},"4、访问 ",[22,30591,30594],{"href":30592,"rel":30593},"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",[26],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,30596,30597],{},[393,30598],{"alt":395,"src":30599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,30601,30602],{},[393,30603],{"alt":395,"src":30604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22995,30606,30608],{"id":30607},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,30610,30611],{},"只需要知道大体流程即可",[19,30613,30614],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,30616,30617],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,30619,30620],{},"2、在Dockerfile中添加以下内容",[416,30622,30624],{"className":27082,"code":30623,"language":27084,"meta":395,"style":395},"# 基于哪个镜像\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",[422,30625,30626,30631,30636,30641,30646,30651,30656,30661],{"__ignoreMap":395},[425,30627,30628],{"class":427,"line":428},[425,30629,30630],{},"# 基于哪个镜像\n",[425,30632,30633],{"class":427,"line":698},[425,30634,30635],{},"From java:8\n",[425,30637,30638],{"class":427,"line":710},[425,30639,30640],{},"# 复制文件到容器\n",[425,30642,30643],{"class":427,"line":721},[425,30644,30645],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[425,30647,30648],{"class":427,"line":735},[425,30649,30650],{},"# 声明需要暴露的端口\n",[425,30652,30653],{"class":427,"line":743},[425,30654,30655],{},"EXPOSE 8877\n",[425,30657,30658],{"class":427,"line":751},[425,30659,30660],{},"# 配置容器启动后执行的命令\n",[425,30662,30663],{"class":427,"line":759},[425,30664,30665],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,30667,30668],{},"3、使用docker build命令构建镜像",[416,30670,30672],{"className":418,"code":30671,"language":420,"meta":395,"style":395},"docker build -t tulingmall-member:0.0.5 .\n",[422,30673,30674],{"__ignoreMap":395},[425,30675,30676,30678,30680,30682,30685],{"class":427,"line":428},[425,30677,27542],{"class":431},[425,30679,29487],{"class":435},[425,30681,29490],{"class":691},[425,30683,30684],{"class":435}," tulingmall-member:0.0.5",[425,30686,29496],{"class":435},[19,30688,30689],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,30691,30692],{},[393,30693],{"alt":395,"src":30694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,30696,30697],{},"4、启动镜像，加-d可在后台启动",[416,30699,30701],{"className":418,"code":30700,"language":420,"meta":395,"style":395},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[422,30702,30703],{"__ignoreMap":395},[425,30704,30705,30707,30709,30711,30713,30716],{"class":427,"line":428},[425,30706,27542],{"class":431},[425,30708,688],{"class":435},[425,30710,30578],{"class":691},[425,30712,29971],{"class":691},[425,30714,30715],{"class":435}," 8877:8877",[425,30717,30718],{"class":435}," tulingmall-member:0.0.5\n",[19,30720,30721],{},"加上JVM参数：",[416,30723,30725],{"className":418,"code":30724,"language":420,"meta":395,"style":395},"# --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",[422,30726,30727,30732,30747,30757,30766,30773],{"__ignoreMap":395},[425,30728,30729],{"class":427,"line":428},[425,30730,30731],{"class":1216},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[425,30733,30734,30736,30738,30741,30743,30745],{"class":427,"line":698},[425,30735,27542],{"class":431},[425,30737,688],{"class":435},[425,30739,30740],{"class":691},"  -d",[425,30742,29971],{"class":691},[425,30744,30715],{"class":435},[425,30746,695],{"class":691},[425,30748,30749,30751,30754],{"class":427,"line":710},[425,30750,713],{"class":701},[425,30752,30753],{"class":435},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[425,30755,30756],{"class":691},"  \\\n",[425,30758,30759,30761,30764],{"class":427,"line":721},[425,30760,713],{"class":701},[425,30762,30763],{"class":435},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[425,30765,30756],{"class":691},[425,30767,30768,30771],{"class":427,"line":735},[425,30769,30770],{"class":701},"--cap-add=SYS_PTRACE  ",[425,30772,732],{"class":691},[425,30774,30775],{"class":427,"line":743},[425,30776,30777],{"class":701},"tulingmall-member:0.0.5\n",[19,30779,30780],{},"5、访问会员服务接口",[19,30782,30783],{},[393,30784],{"alt":395,"src":30785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22995,30787,30789],{"id":30788},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,30791,30792],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,30794,30795,30796],{},"阿里云docker镜像仓库：",[22,30797,30798],{"href":30798,"rel":30799},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[26],[19,30801,30802],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,30804,30805],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,30807,30808],{},[393,30809],{"alt":395,"src":30810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,30812,30813],{},"要把镜像推送到镜像仓库",[416,30815,30817],{"className":418,"code":30816,"language":420,"meta":395,"style":395},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[422,30818,30819],{"__ignoreMap":395},[425,30820,30821,30823,30825,30827],{"class":427,"line":428},[425,30822,27542],{"class":431},[425,30824,29652],{"class":435},[425,30826,30684],{"class":435},[425,30828,30829],{"class":435}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,30831,30832],{},"最后将镜像推送到远程仓库",[416,30834,30836],{"className":418,"code":30835,"language":420,"meta":395,"style":395},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[422,30837,30838],{"__ignoreMap":395},[425,30839,30840,30842,30844],{"class":427,"line":428},[425,30841,27542],{"class":431},[425,30843,29771],{"class":435},[425,30845,30829],{"class":435},[1074,30847,30848],{},"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":395,"searchDepth":698,"depth":698,"links":30850},[30851,30852,30853],{"id":29238,"depth":710,"text":29239},{"id":29467,"depth":710,"text":29468},{"id":30493,"depth":710,"text":30494},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":29230,"description":395},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30860,"title":30861,"body":30862,"description":395,"extension":1082,"meta":31005,"navigation":1084,"path":31006,"seo":31007,"stem":31008,"__hash__":31009},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30863,"toc":31003},[30864,30867,30872,30877,30880,30885,30890,30893,30898,30903,30906,30911,30914,30917,30920,30923,30926,30929,30949,30971,30974,30977,30997,31000],[10,30865,30861],{"id":30866},"_7vscode远程开发",[972,30868,30869],{},[450,30870,30871],{},"插件1：微软Docker工具",[19,30873,30874],{},[393,30875],{"alt":395,"src":30876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,30878,30879],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,30881,30882],{},[393,30883],{"alt":395,"src":30884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[972,30886,30887],{"start":698},[450,30888,30889],{},"插件2：微软Docker远程开发工具",[19,30891,30892],{},"下面这是远程开发的插件。",[19,30894,30895],{},[393,30896],{"alt":395,"src":30897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,30899,30900],{},[393,30901],{"alt":395,"src":30902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,30904,30905],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,30907,30908],{},[393,30909],{"alt":395,"src":30910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,30912,30913],{},"安装完拓展之后，vscode进行链接：",[19,30915,30916],{},"1.按ctrl+shift+p",[19,30918,30919],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,30921,30922],{},"3.选择目前运行的容器",[19,30924,30925],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,30927,30928],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[416,30930,30932],{"className":418,"code":30931,"language":420,"meta":395,"style":395},"docker run -v 主机目录:容器目录 image-name\n",[422,30933,30934],{"__ignoreMap":395},[425,30935,30936,30938,30940,30943,30946],{"class":427,"line":428},[425,30937,27542],{"class":431},[425,30939,688],{"class":435},[425,30941,30942],{"class":691}," -v",[425,30944,30945],{"class":435}," 主机目录:容器目录",[425,30947,30948],{"class":435}," image-name\n",[416,30950,30952],{"className":418,"code":30951,"language":420,"meta":395,"style":395},"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",[422,30953,30954],{"__ignoreMap":395},[425,30955,30956,30958,30960,30963,30965,30968],{"class":427,"line":428},[425,30957,27542],{"class":431},[425,30959,688],{"class":435},[425,30961,30962],{"class":691}," -it",[425,30964,30942],{"class":691},[425,30966,30967],{"class":435}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[425,30969,30970],{"class":435}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,30972,30973],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,30975,30976],{},"查看挂载情况：",[416,30978,30980],{"className":418,"code":30979,"language":420,"meta":395,"style":395},"mount | grep -i project\n",[422,30981,30982],{"__ignoreMap":395},[425,30983,30984,30987,30989,30992,30994],{"class":427,"line":428},[425,30985,30986],{"class":431},"mount",[425,30988,26100],{"class":1155},[425,30990,30991],{"class":431}," grep",[425,30993,27419],{"class":691},[425,30995,30996],{"class":435}," project\n",[19,30998,30999],{},"也可以通过ls来进行查看",[1074,31001,31002],{},"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":395,"searchDepth":698,"depth":698,"links":31004},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30861,"description":395},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":31011,"title":31012,"body":31013,"description":24374,"extension":1082,"meta":31017,"navigation":1084,"path":31019,"seo":31020,"stem":31021,"__hash__":31022},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":31014,"toc":31015},[],{"title":395,"searchDepth":698,"depth":698,"links":31016},[],{"category":31018},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":31012,"description":24374},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":31024,"title":31025,"body":31026,"description":24374,"extension":1082,"meta":31030,"navigation":1084,"path":31031,"seo":31032,"stem":31033,"__hash__":31034},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":31027,"toc":31028},[],{"title":395,"searchDepth":698,"depth":698,"links":31029},[],{"category":31018},"\u002Fwiki\u002F2025-11-10-k8s",{"title":31025,"description":24374},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":31036,"title":31037,"body":31038,"description":24374,"extension":1082,"meta":31331,"navigation":1084,"path":31332,"seo":31333,"stem":31334,"__hash__":31335},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":31039,"toc":31329},[31040,31043,31051,31066,31071,31122,31125,31131,31318,31323,31326],[10,31041,31037],{"id":31042},"_1验证深度学习环境",[19,31044,31045,31046],{},"关于环境的安装，看",[22,31047,31050],{"href":31048,"rel":31049},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[26],"Pytorch-->深度学习",[19,31052,31053,31054,31057,31058,31061,31062,31065],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[422,31055,31056],{},"pytorch-cuda=12.4"," 是一个“ ",[400,31059,31060],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[400,31063,31064],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,31067,31068],{},[393,31069],{"alt":395,"src":31070},"\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",[416,31072,31074],{"className":418,"code":31073,"language":420,"meta":395,"style":395},"# 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",[422,31075,31076,31081],{"__ignoreMap":395},[425,31077,31078],{"class":427,"line":428},[425,31079,31080],{"class":1216},"# CUDA 12.4\n",[425,31082,31083,31086,31088,31091,31094,31097,31100,31103,31105,31108,31111,31114,31117,31119],{"class":427,"line":698},[425,31084,31085],{"class":431},"conda",[425,31087,24828],{"class":435},[425,31089,31090],{"class":435}," pytorch==",[425,31092,31093],{"class":691},"2.5.1",[425,31095,31096],{"class":435}," torchvision==",[425,31098,31099],{"class":691},"0.20.1",[425,31101,31102],{"class":435}," torchaudio==",[425,31104,31093],{"class":691},[425,31106,31107],{"class":435}," pytorch-cuda=",[425,31109,31110],{"class":691},"12.4",[425,31112,31113],{"class":691}," -c",[425,31115,31116],{"class":435}," pytorch",[425,31118,31113],{"class":691},[425,31120,31121],{"class":435}," nvidia\n",[19,31123,31124],{},"）：",[19,31126,31127],{},[22,31128,31129],{"href":31129,"rel":31130},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[26],[416,31132,31136],{"className":31133,"code":31134,"language":31135,"meta":395,"style":395},"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",[422,31137,31138,31143,31151,31156,31166,31182,31187,31197,31234,31241,31253,31269,31274,31284,31296,31306],{"__ignoreMap":395},[425,31139,31140],{"class":427,"line":428},[425,31141,31142],{"class":1216},"# 对深度学习环境进行测试\n",[425,31144,31145,31148],{"class":427,"line":698},[425,31146,31147],{"class":1155},"import",[425,31149,31150],{"class":701}," torch\n",[425,31152,31153],{"class":427,"line":710},[425,31154,31155],{"class":1216},"# 查看cuda是否被激活\n",[425,31157,31158,31161,31163],{"class":427,"line":721},[425,31159,31160],{"class":701},"flag",[425,31162,1204],{"class":1155},[425,31164,31165],{"class":701},"torch.cuda.is_available()\n",[425,31167,31168,31171,31173,31176,31179],{"class":427,"line":735},[425,31169,31170],{"class":691},"print",[425,31172,1159],{"class":701},[425,31174,31175],{"class":435},"\"cuda:\"",[425,31177,31178],{"class":701},", flag)   ",[425,31180,31181],{"class":1216},"#返回true的话说明被激活\n",[425,31183,31184],{"class":427,"line":743},[425,31185,31186],{"class":1216},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[425,31188,31189,31192,31194],{"class":427,"line":751},[425,31190,31191],{"class":701},"ngpu",[425,31193,1204],{"class":1155},[425,31195,31196],{"class":691},"1\n",[425,31198,31199,31202,31204,31207,31210,31212,31215,31218,31221,31223,31225,31227,31229,31232],{"class":427,"line":759},[425,31200,31201],{"class":701},"device",[425,31203,1204],{"class":1155},[425,31205,31206],{"class":701},"torch.device(",[425,31208,31209],{"class":435},"\"cuda:0\"",[425,31211,2706],{"class":1155},[425,31213,31214],{"class":701},"(torch.cuda.is_available() ",[425,31216,31217],{"class":1155},"and",[425,31219,31220],{"class":701}," ngpu",[425,31222,2107],{"class":1155},[425,31224,1341],{"class":691},[425,31226,938],{"class":701},[425,31228,2703],{"class":1155},[425,31230,31231],{"class":435}," \"cpu\"",[425,31233,1165],{"class":701},[425,31235,31236,31238],{"class":427,"line":770},[425,31237,31170],{"class":691},[425,31239,31240],{"class":701},"(device)\n",[425,31242,31243,31245,31248,31250],{"class":427,"line":780},[425,31244,31170],{"class":691},[425,31246,31247],{"class":701},"(torch.cuda.get_device_name(",[425,31249,1341],{"class":691},[425,31251,31252],{"class":701},"))\n",[425,31254,31255,31257,31260,31262,31264,31266],{"class":427,"line":790},[425,31256,31170],{"class":691},[425,31258,31259],{"class":701},"(torch.rand(",[425,31261,1229],{"class":691},[425,31263,1527],{"class":701},[425,31265,1229],{"class":691},[425,31267,31268],{"class":701},").cuda())\n",[425,31270,31271],{"class":427,"line":805},[425,31272,31273],{"class":1216},"# 查看cuda和cudnn的版本\n",[425,31275,31276,31279,31281],{"class":427,"line":818},[425,31277,31278],{"class":701},"cuda_version",[425,31280,1204],{"class":1155},[425,31282,31283],{"class":701},"torch.version.cuda\n",[425,31285,31286,31288,31290,31293],{"class":427,"line":831},[425,31287,31170],{"class":691},[425,31289,1159],{"class":701},[425,31291,31292],{"class":435},"\"cuda version\"",[425,31294,31295],{"class":701},",cuda_version)\n",[425,31297,31298,31301,31303],{"class":427,"line":841},[425,31299,31300],{"class":701},"cudnn_version",[425,31302,1204],{"class":1155},[425,31304,31305],{"class":701},"torch.backends.cudnn.version()\n",[425,31307,31308,31310,31312,31315],{"class":427,"line":852},[425,31309,31170],{"class":691},[425,31311,1159],{"class":701},[425,31313,31314],{"class":435},"\"cudnn version\"",[425,31316,31317],{"class":701},",cudnn_version)\n",[19,31319,31320],{},[393,31321],{"alt":395,"src":31322},"\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,31324,31325],{},"cuda:0 指的是一块显卡",[1074,31327,31328],{},"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":395,"searchDepth":698,"depth":698,"links":31330},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":31037,"description":24374},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":31337,"title":31338,"body":31339,"description":24374,"extension":1082,"meta":51143,"navigation":1084,"path":51144,"seo":51145,"stem":51146,"__hash__":51147},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":31340,"toc":51137},[31341,31344,31348,31352,31355,31360,31365,31368,31373,31378,31383,31386,31390,31395,31399,31404,31407,31412,31415,31418,31421,31424,31429,31432,31437,31442,31447,31452,31455,31459,31462,31467,32071,32076,32079,32084,32087,32090,32554,32557,32560,32563,32566,34617,34620,34625,34630,35425,35428,35433,36211,36215,37874,37878,38592,38596,38600,38605,38610,38615,38618,38623,38628,38633,38638,38643,38647,38652,39934,39939,39942,39945,39948,40103,40106,40109,41325,41330,42025,42029,42033,42038,42043,42046,42051,42056,42061,42066,42071,42076,42081,42086,42091,42096,42101,42106,42111,42116,42121,42126,42131,42136,42141,42146,42151,42156,42161,42166,42171,42176,42181,42186,42191,42196,42200,42204,42207,43685,43689,45336,45340,46034,46038,46041,46044,46588,46591,46595,46598,47995,47999,48002,48580,50367,50371,50374,51134],[10,31342,31338],{"id":31343},"_2经典神经网络",[14,31345,31347],{"id":31346},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22995,31349,31351],{"id":31350},"_211原理介绍","2.1.1.原理介绍",[19,31353,31354],{},"LeNet-5",[972,31356,31357],{},[450,31358,31359],{},"原理",[19,31361,31362],{},[393,31363],{"alt":395,"src":31364},"\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,31366,31367],{},"B是batch批次；C是channel通道",[972,31369,31370],{"start":698},[450,31371,31372],{},"网络参数详细",[19,31374,31375],{},[393,31376],{"alt":395,"src":31377},"\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,31379,31380],{},[393,31381],{"alt":395,"src":31382},"\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,31384,31385],{},"AlexNet",[972,31387,31388],{},[450,31389,31359],{},[19,31391,31392],{},[393,31393],{"alt":395,"src":31394},"\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",[972,31396,31397],{"start":698},[450,31398,31372],{},[19,31400,31401],{},[393,31402],{"alt":395,"src":31403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[19,31405,31406],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,31408,31409],{},[393,31410],{"alt":395,"src":31411},"\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,31413,31414],{},"数据处理中的图像增强操作:",[19,31416,31417],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,31419,31420],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,31422,31423],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,31425,31426],{},[393,31427],{"alt":395,"src":31428},"\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,31430,31431],{},"提升网络精确度的方法：LRN正则化",[19,31433,31434],{},[393,31435],{"alt":395,"src":31436},"\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,31438,31439],{},[393,31440],{"alt":395,"src":31441},"\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",[972,31443,31444],{"start":710},[450,31445,31446],{},"AlexNet的总结",[19,31448,31449],{},[393,31450],{"alt":395,"src":31451},"\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,31453,31454],{},"比LeNet模型要深一丢丢",[22995,31456,31458],{"id":31457},"_212代码实现","2.1.2.代码实现",[19,31460,31461],{},"（1）LeNet",[972,31463,31464],{},[450,31465,31466],{},"模型搭建",[416,31468,31470],{"className":31133,"code":31469,"language":31135,"meta":395,"style":395},"# 导入库\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",[422,31471,31472,31477,31483,31488,31501,31506,31518,31522,31542,31547,31552,31563,31568,31587,31591,31596,31645,31657,31662,31691,31726,31753,31758,31770,31775,31795,31814,31833,31837,31842,31852,31869,31880,31895,31906,31917,31932,31947,31958,31965,31969,31983,31988,32011,32016,32021,32026,32030,32035,32040,32050],{"__ignoreMap":395},[425,31473,31474],{"class":427,"line":428},[425,31475,31476],{"class":1216},"# 导入库\n",[425,31478,31479,31481],{"class":427,"line":698},[425,31480,31147],{"class":1155},[425,31482,31150],{"class":701},[425,31484,31485],{"class":427,"line":710},[425,31486,31487],{"class":1216},"# 导入神经网络层\n",[425,31489,31490,31493,31496,31498],{"class":427,"line":721},[425,31491,31492],{"class":1155},"from",[425,31494,31495],{"class":701}," torch ",[425,31497,31147],{"class":1155},[425,31499,31500],{"class":701}," nn\n",[425,31502,31503],{"class":427,"line":735},[425,31504,31505],{"class":1216},"# 导入展示神经网络参数的包\n",[425,31507,31508,31510,31513,31515],{"class":427,"line":743},[425,31509,31492],{"class":1155},[425,31511,31512],{"class":701}," torchsummary ",[425,31514,31147],{"class":1155},[425,31516,31517],{"class":701}," summary\n",[425,31519,31520],{"class":427,"line":751},[425,31521,3400],{"emptyLinePlaceholder":1084},[425,31523,31524,31526,31529,31531,31534,31536,31539],{"class":427,"line":759},[425,31525,15691],{"class":1155},[425,31527,31528],{"class":431}," LeNet",[425,31530,1159],{"class":701},[425,31532,31533],{"class":431},"nn",[425,31535,1706],{"class":701},[425,31537,31538],{"class":431},"Module",[425,31540,31541],{"class":701},"):\n",[425,31543,31544],{"class":427,"line":770},[425,31545,31546],{"class":1216},"    # 模型初始化:\n",[425,31548,31549],{"class":427,"line":780},[425,31550,31551],{"class":1216},"    # 定义一些网络层和激活函数\n",[425,31553,31554,31557,31560],{"class":427,"line":790},[425,31555,31556],{"class":1155},"    def",[425,31558,31559],{"class":691}," __init__",[425,31561,31562],{"class":701},"(self):\n",[425,31564,31565],{"class":427,"line":805},[425,31566,31567],{"class":1216},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[425,31569,31570,31573,31576,31579,31582,31585],{"class":427,"line":818},[425,31571,31572],{"class":691},"        super",[425,31574,31575],{"class":701},"(LeNet,",[425,31577,31578],{"class":691},"self",[425,31580,31581],{"class":701},").",[425,31583,31584],{"class":691},"__init__",[425,31586,2976],{"class":701},[425,31588,31589],{"class":427,"line":831},[425,31590,3400],{"emptyLinePlaceholder":1084},[425,31592,31593],{"class":427,"line":841},[425,31594,31595],{"class":1216},"        # 定义网络层\n",[425,31597,31598,31601,31604,31606,31609,31612,31614,31616,31618,31621,31623,31625,31627,31630,31632,31634,31636,31639,31641,31643],{"class":427,"line":852},[425,31599,31600],{"class":691},"        self",[425,31602,31603],{"class":701},".c1",[425,31605,1204],{"class":1155},[425,31607,31608],{"class":701},"nn.Conv2d(",[425,31610,31611],{"class":6216},"in_channels",[425,31613,1204],{"class":1155},[425,31615,1367],{"class":691},[425,31617,1527],{"class":701},[425,31619,31620],{"class":6216},"out_channels",[425,31622,1204],{"class":1155},[425,31624,1493],{"class":691},[425,31626,1527],{"class":701},[425,31628,31629],{"class":6216},"kernel_size",[425,31631,1204],{"class":1155},[425,31633,1468],{"class":691},[425,31635,1527],{"class":701},[425,31637,31638],{"class":6216},"padding",[425,31640,1204],{"class":1155},[425,31642,1235],{"class":691},[425,31644,1165],{"class":701},[425,31646,31647,31649,31652,31654],{"class":427,"line":862},[425,31648,31600],{"class":691},[425,31650,31651],{"class":701},".sig",[425,31653,1204],{"class":1155},[425,31655,31656],{"class":701},"nn.Sigmoid()\n",[425,31658,31659],{"class":427,"line":878},[425,31660,31661],{"class":1216},"        # 定义池化\n",[425,31663,31664,31666,31669,31671,31674,31676,31678,31680,31682,31685,31687,31689],{"class":427,"line":914},[425,31665,31600],{"class":691},[425,31667,31668],{"class":701},".s2",[425,31670,1204],{"class":1155},[425,31672,31673],{"class":701},"nn.AvgPool2d(",[425,31675,31629],{"class":6216},[425,31677,1204],{"class":1155},[425,31679,1235],{"class":691},[425,31681,1527],{"class":701},[425,31683,31684],{"class":6216},"stride",[425,31686,1204],{"class":1155},[425,31688,1235],{"class":691},[425,31690,1165],{"class":701},[425,31692,31693,31695,31698,31700,31702,31704,31706,31708,31710,31712,31714,31716,31718,31720,31722,31724],{"class":427,"line":943},[425,31694,31600],{"class":691},[425,31696,31697],{"class":701},".c3",[425,31699,1204],{"class":1155},[425,31701,31608],{"class":701},[425,31703,31611],{"class":6216},[425,31705,1204],{"class":1155},[425,31707,1493],{"class":691},[425,31709,1527],{"class":701},[425,31711,31620],{"class":6216},[425,31713,1204],{"class":1155},[425,31715,1749],{"class":691},[425,31717,1527],{"class":701},[425,31719,31629],{"class":6216},[425,31721,1204],{"class":1155},[425,31723,1468],{"class":691},[425,31725,1165],{"class":701},[425,31727,31728,31730,31733,31735,31737,31739,31741,31743,31745,31747,31749,31751],{"class":427,"line":956},[425,31729,31600],{"class":691},[425,31731,31732],{"class":701},".s4",[425,31734,1204],{"class":1155},[425,31736,31673],{"class":701},[425,31738,31629],{"class":6216},[425,31740,1204],{"class":1155},[425,31742,1235],{"class":691},[425,31744,1527],{"class":701},[425,31746,31684],{"class":6216},[425,31748,1204],{"class":1155},[425,31750,1235],{"class":691},[425,31752,1165],{"class":701},[425,31754,31755],{"class":427,"line":964},[425,31756,31757],{"class":1216},"        # 定义平展层\n",[425,31759,31760,31762,31765,31767],{"class":427,"line":2733},[425,31761,31600],{"class":691},[425,31763,31764],{"class":701},".flatten",[425,31766,1204],{"class":1155},[425,31768,31769],{"class":701},"nn.Flatten()\n",[425,31771,31772],{"class":427,"line":2750},[425,31773,31774],{"class":1216},"        # 定义全连接层\n",[425,31776,31777,31779,31782,31784,31787,31789,31791,31793],{"class":427,"line":2755},[425,31778,31600],{"class":691},[425,31780,31781],{"class":701},".f5",[425,31783,1204],{"class":1155},[425,31785,31786],{"class":701},"nn.Linear(",[425,31788,4987],{"class":691},[425,31790,1527],{"class":701},[425,31792,1965],{"class":691},[425,31794,1165],{"class":701},[425,31796,31797,31799,31802,31804,31806,31808,31810,31812],{"class":427,"line":2760},[425,31798,31600],{"class":691},[425,31800,31801],{"class":701},".f6",[425,31803,1204],{"class":1155},[425,31805,31786],{"class":701},[425,31807,1965],{"class":691},[425,31809,1527],{"class":701},[425,31811,1859],{"class":691},[425,31813,1165],{"class":701},[425,31815,31816,31818,31821,31823,31825,31827,31829,31831],{"class":427,"line":2765},[425,31817,31600],{"class":691},[425,31819,31820],{"class":701},".f7",[425,31822,1204],{"class":1155},[425,31824,31786],{"class":701},[425,31826,1859],{"class":691},[425,31828,1527],{"class":701},[425,31830,1594],{"class":691},[425,31832,1165],{"class":701},[425,31834,31835],{"class":427,"line":2779},[425,31836,3400],{"emptyLinePlaceholder":1084},[425,31838,31839],{"class":427,"line":2784},[425,31840,31841],{"class":1216},"    # 写工具->写前向传播\n",[425,31843,31844,31846,31849],{"class":427,"line":3577},[425,31845,31556],{"class":1155},[425,31847,31848],{"class":431}," forward",[425,31850,31851],{"class":701},"(self,x):\n",[425,31853,31854,31857,31859,31861,31864,31866],{"class":427,"line":3591},[425,31855,31856],{"class":701},"        x",[425,31858,1204],{"class":1155},[425,31860,31578],{"class":691},[425,31862,31863],{"class":701},".sig(",[425,31865,31578],{"class":691},[425,31867,31868],{"class":701},".c1(x))\n",[425,31870,31871,31873,31875,31877],{"class":427,"line":3599},[425,31872,31856],{"class":701},[425,31874,1204],{"class":1155},[425,31876,31578],{"class":691},[425,31878,31879],{"class":701},".s2(x)\n",[425,31881,31882,31884,31886,31888,31890,31892],{"class":427,"line":3604},[425,31883,31856],{"class":701},[425,31885,1204],{"class":1155},[425,31887,31578],{"class":691},[425,31889,31863],{"class":701},[425,31891,31578],{"class":691},[425,31893,31894],{"class":701},".c3(x))\n",[425,31896,31897,31899,31901,31903],{"class":427,"line":3610},[425,31898,31856],{"class":701},[425,31900,1204],{"class":1155},[425,31902,31578],{"class":691},[425,31904,31905],{"class":701},".s4(x)\n",[425,31907,31908,31910,31912,31914],{"class":427,"line":3616},[425,31909,31856],{"class":701},[425,31911,1204],{"class":1155},[425,31913,31578],{"class":691},[425,31915,31916],{"class":701},".flatten(x)\n",[425,31918,31919,31921,31923,31925,31927,31929],{"class":427,"line":3621},[425,31920,31856],{"class":701},[425,31922,1204],{"class":1155},[425,31924,31578],{"class":691},[425,31926,31863],{"class":701},[425,31928,31578],{"class":691},[425,31930,31931],{"class":701},".f5(x))\n",[425,31933,31934,31936,31938,31940,31942,31944],{"class":427,"line":8948},[425,31935,31856],{"class":701},[425,31937,1204],{"class":1155},[425,31939,31578],{"class":691},[425,31941,31863],{"class":701},[425,31943,31578],{"class":691},[425,31945,31946],{"class":701},".f6(x))\n",[425,31948,31949,31951,31953,31955],{"class":427,"line":8972},[425,31950,31856],{"class":701},[425,31952,1204],{"class":1155},[425,31954,31578],{"class":691},[425,31956,31957],{"class":701},".f7(x)\n",[425,31959,31960,31962],{"class":427,"line":8977},[425,31961,15749],{"class":1155},[425,31963,31964],{"class":701}," x\n",[425,31966,31967],{"class":427,"line":8983},[425,31968,3400],{"emptyLinePlaceholder":1084},[425,31970,31971,31973,31976,31978,31981],{"class":427,"line":9010},[425,31972,2544],{"class":1155},[425,31974,31975],{"class":691}," __name__",[425,31977,3949],{"class":1155},[425,31979,31980],{"class":435},"\"__main__\"",[425,31982,4739],{"class":701},[425,31984,31985],{"class":427,"line":9015},[425,31986,31987],{"class":1216},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[425,31989,31990,31993,31995,31997,32000,32002,32005,32007,32009],{"class":427,"line":9021},[425,31991,31992],{"class":701},"    device",[425,31994,1204],{"class":1155},[425,31996,31206],{"class":701},[425,31998,31999],{"class":435},"\"cuda\"",[425,32001,2706],{"class":1155},[425,32003,32004],{"class":701}," torch.cuda.is_available() ",[425,32006,2703],{"class":1155},[425,32008,31231],{"class":435},[425,32010,1165],{"class":701},[425,32012,32013],{"class":427,"line":9033},[425,32014,32015],{"class":1216},"    # 如果就是想指定用cpu用下方代码:\n",[425,32017,32018],{"class":427,"line":9045},[425,32019,32020],{"class":1216},"    # device=\"cpu\"\n",[425,32022,32023],{"class":427,"line":9057},[425,32024,32025],{"class":1216},"    # print(device)\n",[425,32027,32028],{"class":427,"line":10715},[425,32029,3400],{"emptyLinePlaceholder":1084},[425,32031,32032],{"class":427,"line":10740},[425,32033,32034],{"class":1216},"    # 实例化模型\n",[425,32036,32037],{"class":427,"line":10763},[425,32038,32039],{"class":1216},"    # 将模型放到设备中去运行\n",[425,32041,32042,32045,32047],{"class":427,"line":10787},[425,32043,32044],{"class":701},"    model",[425,32046,1204],{"class":1155},[425,32048,32049],{"class":701},"LeNet().to(device)\n",[425,32051,32052,32055,32058,32060,32062,32064,32066,32068],{"class":427,"line":10792},[425,32053,32054],{"class":691},"    print",[425,32056,32057],{"class":701},"(summary(model,(",[425,32059,1367],{"class":691},[425,32061,1527],{"class":701},[425,32063,2048],{"class":691},[425,32065,1527],{"class":701},[425,32067,2048],{"class":691},[425,32069,32070],{"class":701},")))\n",[19,32072,32073],{},[393,32074],{"alt":395,"src":32075},"\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,32077,32078],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[972,32080,32081],{"start":698},[450,32082,32083],{},"训练",[19,32085,32086],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,32088,32089],{},"在训练之前可以将数据展示看一下",[416,32091,32093],{"className":31133,"code":32092,"language":31135,"meta":395,"style":395},"# 建立画图的函数，用于展示数据\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",[422,32094,32095,32100,32105,32117,32129,32142,32147,32159,32164,32176,32181,32193,32197,32201,32222,32234,32239,32260,32271,32275,32280,32298,32309,32314,32325,32330,32341,32345,32350,32365,32378,32383,32388,32401,32414,32427,32432,32436,32441,32461,32478,32498,32511,32524,32534,32549],{"__ignoreMap":395},[425,32096,32097],{"class":427,"line":428},[425,32098,32099],{"class":1216},"# 建立画图的函数，用于展示数据\n",[425,32101,32102],{"class":427,"line":698},[425,32103,32104],{"class":1216},"# torchvision中包含很多内置的数据集\n",[425,32106,32107,32109,32112,32114],{"class":427,"line":710},[425,32108,31492],{"class":1155},[425,32110,32111],{"class":701}," sklearn.externals.array_api_compat.torch ",[425,32113,31147],{"class":1155},[425,32115,32116],{"class":701}," squeeze\n",[425,32118,32119,32121,32124,32126],{"class":427,"line":721},[425,32120,31492],{"class":1155},[425,32122,32123],{"class":701}," torchvision.datasets ",[425,32125,31147],{"class":1155},[425,32127,32128],{"class":701}," FashionMNIST\n",[425,32130,32131,32133,32136,32139],{"class":427,"line":735},[425,32132,31147],{"class":1155},[425,32134,32135],{"class":701}," numpy ",[425,32137,32138],{"class":1155},"as",[425,32140,32141],{"class":701}," np\n",[425,32143,32144],{"class":427,"line":743},[425,32145,32146],{"class":1216},"# 引入处理数据集的包\n",[425,32148,32149,32151,32154,32156],{"class":427,"line":751},[425,32150,31492],{"class":1155},[425,32152,32153],{"class":701}," torchvision ",[425,32155,31147],{"class":1155},[425,32157,32158],{"class":701}," transforms\n",[425,32160,32161],{"class":427,"line":759},[425,32162,32163],{"class":1216},"# 从torch库中引入数据处理的包\n",[425,32165,32166,32168,32171,32173],{"class":427,"line":770},[425,32167,31147],{"class":1155},[425,32169,32170],{"class":701}," torch.utils.data ",[425,32172,32138],{"class":1155},[425,32174,32175],{"class":701}," Data\n",[425,32177,32178],{"class":427,"line":780},[425,32179,32180],{"class":1216},"# 导入画图的库\n",[425,32182,32183,32185,32188,32190],{"class":427,"line":790},[425,32184,31147],{"class":1155},[425,32186,32187],{"class":701}," matplotlib.pyplot ",[425,32189,32138],{"class":1155},[425,32191,32192],{"class":701}," plt\n",[425,32194,32195],{"class":427,"line":805},[425,32196,3400],{"emptyLinePlaceholder":1084},[425,32198,32199],{"class":427,"line":818},[425,32200,3400],{"emptyLinePlaceholder":1084},[425,32202,32203,32206,32208,32211,32214,32216,32219],{"class":427,"line":831},[425,32204,32205],{"class":701},"train_data",[425,32207,1204],{"class":1155},[425,32209,32210],{"class":701},"FashionMNIST(",[425,32212,32213],{"class":6216},"root",[425,32215,1204],{"class":1155},[425,32217,32218],{"class":435},"'.\u002Fdata'",[425,32220,32221],{"class":701},",\n",[425,32223,32224,32227,32229,32232],{"class":427,"line":841},[425,32225,32226],{"class":6216},"                        train",[425,32228,1204],{"class":1155},[425,32230,32231],{"class":691},"True",[425,32233,32221],{"class":701},[425,32235,32236],{"class":427,"line":852},[425,32237,32238],{"class":1216},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[425,32240,32241,32244,32246,32249,32252,32254,32257],{"class":427,"line":862},[425,32242,32243],{"class":6216},"                        transform",[425,32245,1204],{"class":1155},[425,32247,32248],{"class":701},"transforms.Compose([transforms.Resize(",[425,32250,32251],{"class":6216},"size",[425,32253,1204],{"class":1155},[425,32255,32256],{"class":691},"224",[425,32258,32259],{"class":701},"),transforms.ToTensor()]),\n",[425,32261,32262,32265,32267,32269],{"class":427,"line":878},[425,32263,32264],{"class":6216},"                        download",[425,32266,1204],{"class":1155},[425,32268,32231],{"class":691},[425,32270,1165],{"class":701},[425,32272,32273],{"class":427,"line":914},[425,32274,3400],{"emptyLinePlaceholder":1084},[425,32276,32277],{"class":427,"line":943},[425,32278,32279],{"class":1216},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[425,32281,32282,32285,32287,32290,32293,32295],{"class":427,"line":956},[425,32283,32284],{"class":701},"train_loader",[425,32286,1204],{"class":1155},[425,32288,32289],{"class":701},"Data.DataLoader(",[425,32291,32292],{"class":6216},"dataset",[425,32294,1204],{"class":1155},[425,32296,32297],{"class":701},"train_data,\n",[425,32299,32300,32303,32305,32307],{"class":427,"line":964},[425,32301,32302],{"class":6216},"                             batch_size",[425,32304,1204],{"class":1155},[425,32306,1353],{"class":691},[425,32308,32221],{"class":701},[425,32310,32311],{"class":427,"line":2733},[425,32312,32313],{"class":1216},"                             # 数据是否打乱\n",[425,32315,32316,32319,32321,32323],{"class":427,"line":2750},[425,32317,32318],{"class":6216},"                             shuffle",[425,32320,1204],{"class":1155},[425,32322,32231],{"class":691},[425,32324,32221],{"class":701},[425,32326,32327],{"class":427,"line":2755},[425,32328,32329],{"class":1216},"                             # 规定加载数据的进程\n",[425,32331,32332,32335,32337,32339],{"class":427,"line":2760},[425,32333,32334],{"class":6216},"                             num_workers",[425,32336,1204],{"class":1155},[425,32338,1341],{"class":691},[425,32340,1165],{"class":701},[425,32342,32343],{"class":427,"line":2765},[425,32344,3400],{"emptyLinePlaceholder":1084},[425,32346,32347],{"class":427,"line":2779},[425,32348,32349],{"class":1216},"# 获得一个batch的数据\n",[425,32351,32352,32354,32357,32359,32362],{"class":427,"line":2784},[425,32353,4025],{"class":1155},[425,32355,32356],{"class":701}," step,(b_x,b_y) ",[425,32358,27034],{"class":1155},[425,32360,32361],{"class":691}," enumerate",[425,32363,32364],{"class":701},"(train_loader):\n",[425,32366,32367,32369,32372,32374,32376],{"class":427,"line":3577},[425,32368,4101],{"class":1155},[425,32370,32371],{"class":701}," step ",[425,32373,2107],{"class":1155},[425,32375,5093],{"class":691},[425,32377,4739],{"class":701},[425,32379,32380],{"class":427,"line":3591},[425,32381,32382],{"class":1155},"        break\n",[425,32384,32385],{"class":427,"line":3599},[425,32386,32387],{"class":1216},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[425,32389,32390,32393,32395,32398],{"class":427,"line":3604},[425,32391,32392],{"class":701},"batch_x",[425,32394,1204],{"class":1155},[425,32396,32397],{"class":701},"b_x.squeeze().numpy()  ",[425,32399,32400],{"class":1216},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[425,32402,32403,32406,32408,32411],{"class":427,"line":3610},[425,32404,32405],{"class":701},"batch_y",[425,32407,1204],{"class":1155},[425,32409,32410],{"class":701},"b_y.numpy()   ",[425,32412,32413],{"class":1216},"#将张量转换成功numpy数组\n",[425,32415,32416,32419,32421,32424],{"class":427,"line":3616},[425,32417,32418],{"class":701},"class_label",[425,32420,1204],{"class":1155},[425,32422,32423],{"class":701},"train_data.classes  ",[425,32425,32426],{"class":1216},"#训练集标签\n",[425,32428,32429],{"class":427,"line":3621},[425,32430,32431],{"class":1216},"# print(class_label)\n",[425,32433,32434],{"class":427,"line":8948},[425,32435,3400],{"emptyLinePlaceholder":1084},[425,32437,32438],{"class":427,"line":8972},[425,32439,32440],{"class":1216},"# 可视化一个batch的图像\n",[425,32442,32443,32446,32449,32451,32453,32455,32457,32459],{"class":427,"line":8977},[425,32444,32445],{"class":701},"plt.figure(",[425,32447,32448],{"class":6216},"figsize",[425,32450,1204],{"class":1155},[425,32452,1159],{"class":701},[425,32454,1646],{"class":691},[425,32456,1527],{"class":701},[425,32458,1468],{"class":691},[425,32460,31252],{"class":701},[425,32462,32463,32465,32468,32470,32473,32475],{"class":427,"line":8983},[425,32464,4025],{"class":1155},[425,32466,32467],{"class":701}," ii ",[425,32469,27034],{"class":1155},[425,32471,32472],{"class":701}," np.arange(",[425,32474,8358],{"class":691},[425,32476,32477],{"class":701},"(batch_y)):\n",[425,32479,32480,32483,32485,32487,32489,32492,32494,32496],{"class":427,"line":9010},[425,32481,32482],{"class":701},"    plt.subplot(",[425,32484,1442],{"class":691},[425,32486,1527],{"class":701},[425,32488,1749],{"class":691},[425,32490,32491],{"class":701},",ii ",[425,32493,1629],{"class":1155},[425,32495,26109],{"class":691},[425,32497,1165],{"class":701},[425,32499,32500,32503,32506,32508],{"class":427,"line":9015},[425,32501,32502],{"class":701},"    plt.imshow(batch_x[ii,:,:],",[425,32504,32505],{"class":6216},"cmap",[425,32507,1204],{"class":1155},[425,32509,32510],{"class":701},"plt.cm.gray)\n",[425,32512,32513,32516,32518,32520,32522],{"class":427,"line":9021},[425,32514,32515],{"class":701},"    plt.title(class_label[batch_y[ii]],",[425,32517,32251],{"class":6216},[425,32519,1204],{"class":1155},[425,32521,1594],{"class":691},[425,32523,1165],{"class":701},[425,32525,32526,32529,32532],{"class":427,"line":9033},[425,32527,32528],{"class":701},"    plt.axis(",[425,32530,32531],{"class":435},"\"off\"",[425,32533,1165],{"class":701},[425,32535,32536,32539,32542,32544,32547],{"class":427,"line":9045},[425,32537,32538],{"class":701},"    plt.subplots_adjust(",[425,32540,32541],{"class":6216},"wspace",[425,32543,1204],{"class":1155},[425,32545,32546],{"class":691},"0.05",[425,32548,1165],{"class":701},[425,32550,32551],{"class":427,"line":9057},[425,32552,32553],{"class":701},"plt.show()\n",[19,32555,32556],{},"用matplotlib进行展示的过程可以后续再补",[19,32558,32559],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,32561,32562],{},"训练次数就是按照批次过整个训练集数据的次数",[19,32564,32565],{},"模型训练：",[416,32567,32569],{"className":31133,"code":32568,"language":31135,"meta":395,"style":395},"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",[422,32570,32571,32578,32585,32589,32601,32607,32618,32628,32638,32648,32658,32663,32675,32685,32689,32693,32698,32709,32722,32733,32750,32761,32800,32816,32828,32839,32844,32855,32871,32882,32893,32904,32911,32915,32920,32925,32929,32934,32944,32965,32969,32973,32978,32983,32988,33008,33012,33017,33027,33031,33036,33045,33050,33055,33060,33070,33074,33078,33083,33088,33098,33103,33113,33118,33127,33132,33141,33146,33155,33159,33164,33174,33178,33182,33187,33202,33230,33245,33249,33254,33259,33268,33273,33282,33287,33296,33301,33310,33315,33324,33329,33338,33343,33356,33361,33371,33376,33386,33392,33398,33404,33410,33421,33427,33447,33453,33464,33470,33476,33482,33488,33494,33500,33506,33526,33532,33548,33554,33568,33574,33589,33595,33604,33610,33619,33625,33631,33640,33646,33657,33663,33682,33688,33699,33705,33725,33741,33747,33761,33767,33773,33784,33790,33796,33806,33812,33823,33829,33839,33844,33850,33899,33946,33951,33957,33976,33982,34002,34008,34014,34024,34029,34035,34051,34096,34102,34108,34114,34125,34131,34137,34143,34161,34175,34184,34193,34202,34211,34217,34223,34231,34236,34242,34253,34259,34279,34285,34291,34297,34314,34320,34326,34332,34338,34344,34371,34395,34401,34407,34413,34424,34435,34441,34458,34481,34504,34510,34515,34524,34534,34540,34545,34551,34564,34570,34581,34592,34611],{"__ignoreMap":395},[425,32572,32573,32575],{"class":427,"line":428},[425,32574,31147],{"class":1155},[425,32576,32577],{"class":701}," copy\n",[425,32579,32580,32582],{"class":427,"line":698},[425,32581,31147],{"class":1155},[425,32583,32584],{"class":701}," time\n",[425,32586,32587],{"class":427,"line":710},[425,32588,3400],{"emptyLinePlaceholder":1084},[425,32590,32591,32593,32596,32598],{"class":427,"line":721},[425,32592,31147],{"class":1155},[425,32594,32595],{"class":701}," pandas ",[425,32597,32138],{"class":1155},[425,32599,32600],{"class":701}," pd\n",[425,32602,32603,32605],{"class":427,"line":735},[425,32604,31147],{"class":1155},[425,32606,31150],{"class":701},[425,32608,32609,32611,32613,32615],{"class":427,"line":743},[425,32610,31492],{"class":1155},[425,32612,32170],{"class":701},[425,32614,31147],{"class":1155},[425,32616,32617],{"class":701}," Dataset\n",[425,32619,32620,32622,32624,32626],{"class":427,"line":751},[425,32621,31492],{"class":1155},[425,32623,32123],{"class":701},[425,32625,31147],{"class":1155},[425,32627,32128],{"class":701},[425,32629,32630,32632,32634,32636],{"class":427,"line":759},[425,32631,31492],{"class":1155},[425,32633,32153],{"class":701},[425,32635,31147],{"class":1155},[425,32637,32158],{"class":701},[425,32639,32640,32642,32644,32646],{"class":427,"line":770},[425,32641,31147],{"class":1155},[425,32643,32170],{"class":701},[425,32645,32138],{"class":1155},[425,32647,32175],{"class":701},[425,32649,32650,32652,32654,32656],{"class":427,"line":780},[425,32651,31147],{"class":1155},[425,32653,32187],{"class":701},[425,32655,32138],{"class":1155},[425,32657,32192],{"class":701},[425,32659,32660],{"class":427,"line":790},[425,32661,32662],{"class":1216},"# 导入模型\n",[425,32664,32665,32667,32670,32672],{"class":427,"line":805},[425,32666,31492],{"class":1155},[425,32668,32669],{"class":701}," model ",[425,32671,31147],{"class":1155},[425,32673,32674],{"class":701}," LeNet\n",[425,32676,32677,32679,32681,32683],{"class":427,"line":818},[425,32678,31492],{"class":1155},[425,32680,31495],{"class":701},[425,32682,31147],{"class":1155},[425,32684,31500],{"class":701},[425,32686,32687],{"class":427,"line":831},[425,32688,3400],{"emptyLinePlaceholder":1084},[425,32690,32691],{"class":427,"line":841},[425,32692,3400],{"emptyLinePlaceholder":1084},[425,32694,32695],{"class":427,"line":852},[425,32696,32697],{"class":1216},"# 处理训练集与验证集函数--->划分数据集\n",[425,32699,32700,32703,32706],{"class":427,"line":862},[425,32701,32702],{"class":1155},"def",[425,32704,32705],{"class":431}," train_val_data_process",[425,32707,32708],{"class":701},"():\n",[425,32710,32711,32714,32716,32718,32720],{"class":427,"line":878},[425,32712,32713],{"class":701},"    train_data",[425,32715,1204],{"class":1155},[425,32717,32210],{"class":701},[425,32719,32218],{"class":435},[425,32721,32221],{"class":701},[425,32723,32724,32727,32729,32731],{"class":427,"line":914},[425,32725,32726],{"class":6216},"                            train",[425,32728,1204],{"class":1155},[425,32730,32231],{"class":691},[425,32732,32221],{"class":701},[425,32734,32735,32738,32740,32742,32744,32746,32748],{"class":427,"line":943},[425,32736,32737],{"class":6216},"                            transform",[425,32739,1204],{"class":1155},[425,32741,32248],{"class":701},[425,32743,32251],{"class":6216},[425,32745,1204],{"class":1155},[425,32747,2048],{"class":691},[425,32749,32259],{"class":701},[425,32751,32752,32755,32757,32759],{"class":427,"line":956},[425,32753,32754],{"class":6216},"                            download",[425,32756,1204],{"class":1155},[425,32758,32231],{"class":691},[425,32760,1165],{"class":701},[425,32762,32763,32766,32768,32771,32774,32776,32779,32781,32783,32786,32788,32790,32793,32795,32797],{"class":427,"line":964},[425,32764,32765],{"class":701},"    train_data,val_data",[425,32767,1204],{"class":1155},[425,32769,32770],{"class":701},"Data.random_split(train_data,[",[425,32772,32773],{"class":691},"round",[425,32775,1159],{"class":701},[425,32777,32778],{"class":691},"0.8",[425,32780,1603],{"class":1155},[425,32782,8358],{"class":691},[425,32784,32785],{"class":701},"(train_data)),",[425,32787,32773],{"class":691},[425,32789,1159],{"class":701},[425,32791,32792],{"class":691},"0.2",[425,32794,1603],{"class":1155},[425,32796,8358],{"class":691},[425,32798,32799],{"class":701},"(train_data))])\n",[425,32801,32802,32805,32807,32810,32812,32814],{"class":427,"line":2733},[425,32803,32804],{"class":701},"    train_dataloader ",[425,32806,1204],{"class":1155},[425,32808,32809],{"class":701}," Data.DataLoader(",[425,32811,32292],{"class":6216},[425,32813,1204],{"class":1155},[425,32815,32297],{"class":701},[425,32817,32818,32821,32823,32826],{"class":427,"line":2750},[425,32819,32820],{"class":6216},"                                       batch_size",[425,32822,1204],{"class":1155},[425,32824,32825],{"class":691},"128",[425,32827,32221],{"class":701},[425,32829,32830,32833,32835,32837],{"class":427,"line":2755},[425,32831,32832],{"class":6216},"                                       shuffle",[425,32834,1204],{"class":1155},[425,32836,32231],{"class":691},[425,32838,32221],{"class":701},[425,32840,32841],{"class":427,"line":2760},[425,32842,32843],{"class":1216},"                                       # 规定8个进程\n",[425,32845,32846,32849,32851,32853],{"class":427,"line":2765},[425,32847,32848],{"class":6216},"                                       num_workers",[425,32850,1204],{"class":1155},[425,32852,1544],{"class":691},[425,32854,1165],{"class":701},[425,32856,32857,32860,32862,32864,32866,32868],{"class":427,"line":2779},[425,32858,32859],{"class":701},"    val_dataloader",[425,32861,1204],{"class":1155},[425,32863,32289],{"class":701},[425,32865,32292],{"class":6216},[425,32867,1204],{"class":1155},[425,32869,32870],{"class":701},"val_data,\n",[425,32872,32873,32876,32878,32880],{"class":427,"line":2784},[425,32874,32875],{"class":6216},"                                   batch_size",[425,32877,1204],{"class":1155},[425,32879,32825],{"class":691},[425,32881,32221],{"class":701},[425,32883,32884,32887,32889,32891],{"class":427,"line":3577},[425,32885,32886],{"class":6216},"                                   shuffle",[425,32888,1204],{"class":1155},[425,32890,32231],{"class":691},[425,32892,32221],{"class":701},[425,32894,32895,32898,32900,32902],{"class":427,"line":3591},[425,32896,32897],{"class":6216},"                                   num_workers",[425,32899,1204],{"class":1155},[425,32901,1544],{"class":691},[425,32903,1165],{"class":701},[425,32905,32906,32908],{"class":427,"line":3599},[425,32907,5090],{"class":1155},[425,32909,32910],{"class":701}," train_dataloader,val_dataloader\n",[425,32912,32913],{"class":427,"line":3604},[425,32914,3400],{"emptyLinePlaceholder":1084},[425,32916,32917],{"class":427,"line":3610},[425,32918,32919],{"class":1216},"# 验证是否出错\n",[425,32921,32922],{"class":427,"line":3616},[425,32923,32924],{"class":1216},"# train_val_data_process()\n",[425,32926,32927],{"class":427,"line":3621},[425,32928,3400],{"emptyLinePlaceholder":1084},[425,32930,32931],{"class":427,"line":8948},[425,32932,32933],{"class":1216},"# 定义模型训练函数\n",[425,32935,32936,32938,32941],{"class":427,"line":8972},[425,32937,32702],{"class":1155},[425,32939,32940],{"class":431}," train_model_process",[425,32942,32943],{"class":701},"(model,train_dataloader,val_dataloader,num_epochs):\n",[425,32945,32946,32948,32950,32952,32954,32956,32958,32960,32963],{"class":427,"line":8977},[425,32947,31992],{"class":701},[425,32949,1204],{"class":1155},[425,32951,31206],{"class":701},[425,32953,31999],{"class":435},[425,32955,2706],{"class":1155},[425,32957,32004],{"class":701},[425,32959,2703],{"class":1155},[425,32961,32962],{"class":435}," 'cpu'",[425,32964,1165],{"class":701},[425,32966,32967],{"class":427,"line":8983},[425,32968,3400],{"emptyLinePlaceholder":1084},[425,32970,32971],{"class":427,"line":9010},[425,32972,3400],{"emptyLinePlaceholder":1084},[425,32974,32975],{"class":427,"line":9015},[425,32976,32977],{"class":1216},"    # 定义优化器\n",[425,32979,32980],{"class":427,"line":9021},[425,32981,32982],{"class":1216},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[425,32984,32985],{"class":427,"line":9033},[425,32986,32987],{"class":1216},"    # lr为学习率\n",[425,32989,32990,32993,32995,32998,33001,33003,33006],{"class":427,"line":9045},[425,32991,32992],{"class":701},"    optimizer",[425,32994,1204],{"class":1155},[425,32996,32997],{"class":701},"torch.optim.Adam(model.parameters(),",[425,32999,33000],{"class":6216},"lr",[425,33002,1204],{"class":1155},[425,33004,33005],{"class":691},"0.001",[425,33007,1165],{"class":701},[425,33009,33010],{"class":427,"line":9057},[425,33011,3400],{"emptyLinePlaceholder":1084},[425,33013,33014],{"class":427,"line":10715},[425,33015,33016],{"class":1216},"    # 定义损失函数使用交叉熵损失函数\n",[425,33018,33019,33022,33024],{"class":427,"line":10740},[425,33020,33021],{"class":701},"    criterion",[425,33023,1204],{"class":1155},[425,33025,33026],{"class":701},"nn.CrossEntropyLoss()\n",[425,33028,33029],{"class":427,"line":10763},[425,33030,3400],{"emptyLinePlaceholder":1084},[425,33032,33033],{"class":427,"line":10787},[425,33034,33035],{"class":1216},"    # 将模型放到GPU中进行训练\n",[425,33037,33038,33040,33042],{"class":427,"line":10792},[425,33039,32044],{"class":701},[425,33041,1204],{"class":1155},[425,33043,33044],{"class":701},"model.to(device)\n",[425,33046,33047],{"class":427,"line":10797},[425,33048,33049],{"class":1216},"    # 复制当前模型的参数\n",[425,33051,33052],{"class":427,"line":10802},[425,33053,33054],{"class":1216},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[425,33056,33057],{"class":427,"line":10811},[425,33058,33059],{"class":1216},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[425,33061,33062,33065,33067],{"class":427,"line":10816},[425,33063,33064],{"class":701},"    best_model_wts",[425,33066,1204],{"class":1155},[425,33068,33069],{"class":701},"copy.deepcopy(model.state_dict())\n",[425,33071,33072],{"class":427,"line":10822},[425,33073,3400],{"emptyLinePlaceholder":1084},[425,33075,33076],{"class":427,"line":10843},[425,33077,3400],{"emptyLinePlaceholder":1084},[425,33079,33080],{"class":427,"line":10849},[425,33081,33082],{"class":1216},"    # 初始化参数\n",[425,33084,33085],{"class":427,"line":10863},[425,33086,33087],{"class":1216},"    # 最高准确度\n",[425,33089,33090,33093,33095],{"class":427,"line":10869},[425,33091,33092],{"class":701},"    best_acc",[425,33094,1204],{"class":1155},[425,33096,33097],{"class":691},"0.0\n",[425,33099,33100],{"class":427,"line":10896},[425,33101,33102],{"class":1216},"    # 训练集损失列表\n",[425,33104,33105,33108,33110],{"class":427,"line":10905},[425,33106,33107],{"class":701},"    train_loss_all",[425,33109,1204],{"class":1155},[425,33111,33112],{"class":701},"[]\n",[425,33114,33115],{"class":427,"line":10911},[425,33116,33117],{"class":1216},"    # 验证集函数列表\n",[425,33119,33120,33123,33125],{"class":427,"line":10919},[425,33121,33122],{"class":701},"    val_loss_all",[425,33124,1204],{"class":1155},[425,33126,33112],{"class":701},[425,33128,33129],{"class":427,"line":10924},[425,33130,33131],{"class":1216},"    # 训练集准确度列表\n",[425,33133,33134,33137,33139],{"class":427,"line":17601},[425,33135,33136],{"class":701},"    train_acc_all",[425,33138,1204],{"class":1155},[425,33140,33112],{"class":701},[425,33142,33143],{"class":427,"line":17607},[425,33144,33145],{"class":1216},"    # 验证集准确度列表\n",[425,33147,33148,33151,33153],{"class":427,"line":17630},[425,33149,33150],{"class":701},"    val_acc_all",[425,33152,1204],{"class":1155},[425,33154,33112],{"class":701},[425,33156,33157],{"class":427,"line":17636},[425,33158,3400],{"emptyLinePlaceholder":1084},[425,33160,33161],{"class":427,"line":17659},[425,33162,33163],{"class":1216},"    # 保存当前时间--->方便看每轮训练的时间\n",[425,33165,33166,33169,33171],{"class":427,"line":17673},[425,33167,33168],{"class":701},"    since",[425,33170,1204],{"class":1155},[425,33172,33173],{"class":701},"time.time()\n",[425,33175,33176],{"class":427,"line":17693},[425,33177,3400],{"emptyLinePlaceholder":1084},[425,33179,33180],{"class":427,"line":17699},[425,33181,3400],{"emptyLinePlaceholder":1084},[425,33183,33184],{"class":427,"line":17710},[425,33185,33186],{"class":1216},"    # 准备工作完成--->开始训练模型\n",[425,33188,33189,33191,33194,33196,33199],{"class":427,"line":17733},[425,33190,4201],{"class":1155},[425,33192,33193],{"class":701}," epoch ",[425,33195,27034],{"class":1155},[425,33197,33198],{"class":691}," range",[425,33200,33201],{"class":701},"(num_epochs):\n",[425,33203,33204,33207,33209,33212,33215,33217,33219,33221,33224,33226,33228],{"class":427,"line":17755},[425,33205,33206],{"class":691},"        print",[425,33208,1159],{"class":701},[425,33210,33211],{"class":435},"\"Epoch ",[425,33213,33214],{"class":691},"{}",[425,33216,1732],{"class":435},[425,33218,33214],{"class":691},[425,33220,1400],{"class":435},[425,33222,33223],{"class":701},".format(epoch,num_epochs",[425,33225,1680],{"class":1155},[425,33227,1367],{"class":691},[425,33229,31252],{"class":701},[425,33231,33232,33234,33236,33239,33241,33243],{"class":427,"line":17760},[425,33233,33206],{"class":691},[425,33235,1159],{"class":701},[425,33237,33238],{"class":435},"\"-\"",[425,33240,1603],{"class":1155},[425,33242,1594],{"class":691},[425,33244,1165],{"class":701},[425,33246,33247],{"class":427,"line":17766},[425,33248,3400],{"emptyLinePlaceholder":1084},[425,33250,33251],{"class":427,"line":17780},[425,33252,33253],{"class":1216},"        # 初始化参数\n",[425,33255,33256],{"class":427,"line":17793},[425,33257,33258],{"class":1216},"        # 训练集损失函数\n",[425,33260,33261,33264,33266],{"class":427,"line":17798},[425,33262,33263],{"class":701},"        train_loss",[425,33265,1204],{"class":1155},[425,33267,33097],{"class":691},[425,33269,33270],{"class":427,"line":17812},[425,33271,33272],{"class":1216},"        # 训练集准确度\n",[425,33274,33275,33278,33280],{"class":427,"line":17817},[425,33276,33277],{"class":701},"        train_corrects",[425,33279,1204],{"class":1155},[425,33281,4085],{"class":691},[425,33283,33284],{"class":427,"line":17823},[425,33285,33286],{"class":1216},"        # 验证集损失函数\n",[425,33288,33289,33292,33294],{"class":427,"line":17828},[425,33290,33291],{"class":701},"        val_loss",[425,33293,1204],{"class":1155},[425,33295,33097],{"class":691},[425,33297,33298],{"class":427,"line":17842},[425,33299,33300],{"class":1216},"        # 验证集准确度\n",[425,33302,33303,33306,33308],{"class":427,"line":17847},[425,33304,33305],{"class":701},"        val_corrects",[425,33307,1204],{"class":1155},[425,33309,4085],{"class":691},[425,33311,33312],{"class":427,"line":17852},[425,33313,33314],{"class":1216},"        # 训练集样本数量\n",[425,33316,33317,33320,33322],{"class":427,"line":17866},[425,33318,33319],{"class":701},"        train_num",[425,33321,1204],{"class":1155},[425,33323,4085],{"class":691},[425,33325,33326],{"class":427,"line":17878},[425,33327,33328],{"class":1216},"        # 验证集样本数量\n",[425,33330,33331,33334,33336],{"class":427,"line":17883},[425,33332,33333],{"class":701},"        val_num",[425,33335,1204],{"class":1155},[425,33337,4085],{"class":691},[425,33339,33340],{"class":427,"line":17896},[425,33341,33342],{"class":1216},"        # 将数据放到设备,并开始训练\n",[425,33344,33345,33347,33349,33351,33353],{"class":427,"line":17901},[425,33346,4403],{"class":1155},[425,33348,32356],{"class":701},[425,33350,27034],{"class":1155},[425,33352,32361],{"class":691},[425,33354,33355],{"class":701},"(train_dataloader):\n",[425,33357,33358],{"class":427,"line":17906},[425,33359,33360],{"class":1216},"            # 将特征放入到训练设备\n",[425,33362,33363,33366,33368],{"class":427,"line":17911},[425,33364,33365],{"class":701},"            b_x",[425,33367,1204],{"class":1155},[425,33369,33370],{"class":701},"b_x.to(device)\n",[425,33372,33373],{"class":427,"line":17924},[425,33374,33375],{"class":1216},"            # 将标签放入到训练设备当中\n",[425,33377,33378,33381,33383],{"class":427,"line":17929},[425,33379,33380],{"class":701},"            b_y",[425,33382,1204],{"class":1155},[425,33384,33385],{"class":701},"b_y.to(device)\n",[425,33387,33389],{"class":427,"line":33388},98,[425,33390,33391],{"class":1216},"            # 设置模型为训练模式\n",[425,33393,33395],{"class":427,"line":33394},99,[425,33396,33397],{"class":701},"            model.train()\n",[425,33399,33401],{"class":427,"line":33400},100,[425,33402,33403],{"class":1216},"            # 将数据放到模型当中,开始前向传播\n",[425,33405,33407],{"class":427,"line":33406},101,[425,33408,33409],{"class":1216},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[425,33411,33413,33416,33418],{"class":427,"line":33412},102,[425,33414,33415],{"class":701},"            output",[425,33417,1204],{"class":1155},[425,33419,33420],{"class":701},"model(b_x)\n",[425,33422,33424],{"class":427,"line":33423},103,[425,33425,33426],{"class":1216},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[425,33428,33430,33433,33435,33438,33441,33443,33445],{"class":427,"line":33429},104,[425,33431,33432],{"class":701},"            pre_lab",[425,33434,1204],{"class":1155},[425,33436,33437],{"class":701},"torch.argmax(output,",[425,33439,33440],{"class":6216},"dim",[425,33442,1204],{"class":1155},[425,33444,1367],{"class":691},[425,33446,1165],{"class":701},[425,33448,33450],{"class":427,"line":33449},105,[425,33451,33452],{"class":1216},"            # 计算每一个batch的损失函数\n",[425,33454,33456,33459,33461],{"class":427,"line":33455},106,[425,33457,33458],{"class":701},"            loss",[425,33460,1204],{"class":1155},[425,33462,33463],{"class":701},"criterion(output,b_y)\n",[425,33465,33467],{"class":427,"line":33466},107,[425,33468,33469],{"class":1216},"            # 将梯度初始化为0\n",[425,33471,33473],{"class":427,"line":33472},108,[425,33474,33475],{"class":701},"            optimizer.zero_grad()\n",[425,33477,33479],{"class":427,"line":33478},109,[425,33480,33481],{"class":1216},"            # 梯度置为0后再进行反向传播\n",[425,33483,33485],{"class":427,"line":33484},110,[425,33486,33487],{"class":701},"            loss.backward()\n",[425,33489,33491],{"class":427,"line":33490},111,[425,33492,33493],{"class":1216},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[425,33495,33497],{"class":427,"line":33496},112,[425,33498,33499],{"class":701},"            optimizer.step()\n",[425,33501,33503],{"class":427,"line":33502},113,[425,33504,33505],{"class":1216},"            # loss.item()指的是batch的平均损失\n",[425,33507,33509,33512,33514,33517,33519,33522,33524],{"class":427,"line":33508},114,[425,33510,33511],{"class":701},"            train_loss",[425,33513,10476],{"class":1155},[425,33515,33516],{"class":701},"loss.item()",[425,33518,1603],{"class":1155},[425,33520,33521],{"class":701},"b_x.size(",[425,33523,1341],{"class":691},[425,33525,1165],{"class":701},[425,33527,33529],{"class":427,"line":33528},115,[425,33530,33531],{"class":1216},"            # 计算每个批次中正确预测的数量\n",[425,33533,33535,33538,33540,33543,33545],{"class":427,"line":33534},116,[425,33536,33537],{"class":701},"            train_corrects",[425,33539,10476],{"class":1155},[425,33541,33542],{"class":701},"torch.sum(pre_lab",[425,33544,3949],{"class":1155},[425,33546,33547],{"class":701},"b_y.data)\n",[425,33549,33551],{"class":427,"line":33550},117,[425,33552,33553],{"class":1216},"            # 计算目前为止一共处理了多少样本\n",[425,33555,33557,33560,33562,33564,33566],{"class":427,"line":33556},118,[425,33558,33559],{"class":701},"            train_num",[425,33561,10476],{"class":1155},[425,33563,33521],{"class":701},[425,33565,1341],{"class":691},[425,33567,1165],{"class":701},[425,33569,33571],{"class":427,"line":33570},119,[425,33572,33573],{"class":1216},"        # 验证数据\n",[425,33575,33577,33579,33582,33584,33586],{"class":427,"line":33576},120,[425,33578,4403],{"class":1155},[425,33580,33581],{"class":701}," step ,(b_x,b_y) ",[425,33583,27034],{"class":1155},[425,33585,32361],{"class":691},[425,33587,33588],{"class":701},"(val_dataloader):\n",[425,33590,33592],{"class":427,"line":33591},121,[425,33593,33594],{"class":1216},"            # 将特征放到验证设备当中\n",[425,33596,33598,33600,33602],{"class":427,"line":33597},122,[425,33599,33365],{"class":701},[425,33601,1204],{"class":1155},[425,33603,33370],{"class":701},[425,33605,33607],{"class":427,"line":33606},123,[425,33608,33609],{"class":1216},"            # 将标签放到放到训练设备当中\n",[425,33611,33613,33615,33617],{"class":427,"line":33612},124,[425,33614,33380],{"class":701},[425,33616,1204],{"class":1155},[425,33618,33385],{"class":701},[425,33620,33622],{"class":427,"line":33621},125,[425,33623,33624],{"class":1216},"            # 开启验证模式，设置模型为评估模式\n",[425,33626,33628],{"class":427,"line":33627},126,[425,33629,33630],{"class":701},"            model.eval()\n",[425,33632,33634,33637],{"class":427,"line":33633},127,[425,33635,33636],{"class":1155},"            with",[425,33638,33639],{"class":701}," torch.no_grad():\n",[425,33641,33643],{"class":427,"line":33642},128,[425,33644,33645],{"class":1216},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[425,33647,33649,33652,33654],{"class":427,"line":33648},129,[425,33650,33651],{"class":701},"                output ",[425,33653,1204],{"class":1155},[425,33655,33656],{"class":701}," model(b_x)\n",[425,33658,33660],{"class":427,"line":33659},130,[425,33661,33662],{"class":1216},"                # 查找每一行中最大值对应的下标\n",[425,33664,33666,33669,33671,33674,33676,33678,33680],{"class":427,"line":33665},131,[425,33667,33668],{"class":701},"                pre_lab ",[425,33670,1204],{"class":1155},[425,33672,33673],{"class":701}," torch.argmax(output, ",[425,33675,33440],{"class":6216},[425,33677,1204],{"class":1155},[425,33679,1367],{"class":691},[425,33681,1165],{"class":701},[425,33683,33685],{"class":427,"line":33684},132,[425,33686,33687],{"class":1216},"                # 计算验证集上的当前 batch 损失\n",[425,33689,33691,33694,33696],{"class":427,"line":33690},133,[425,33692,33693],{"class":701},"                val_batch_loss ",[425,33695,1204],{"class":1155},[425,33697,33698],{"class":701}," criterion(output, b_y)\n",[425,33700,33702],{"class":427,"line":33701},134,[425,33703,33704],{"class":1216},"                # 对损失函数进行累加（按样本数加权）\n",[425,33706,33708,33711,33713,33716,33718,33721,33723],{"class":427,"line":33707},135,[425,33709,33710],{"class":701},"                val_loss ",[425,33712,10476],{"class":1155},[425,33714,33715],{"class":701}," val_batch_loss.item() ",[425,33717,1603],{"class":1155},[425,33719,33720],{"class":701}," b_x.size(",[425,33722,1341],{"class":691},[425,33724,1165],{"class":701},[425,33726,33728,33731,33733,33736,33738],{"class":427,"line":33727},136,[425,33729,33730],{"class":701},"                val_corrects ",[425,33732,10476],{"class":1155},[425,33734,33735],{"class":701}," torch.sum(pre_lab ",[425,33737,3949],{"class":1155},[425,33739,33740],{"class":701}," b_y.data)\n",[425,33742,33744],{"class":427,"line":33743},137,[425,33745,33746],{"class":1216},"                # 当前用于验证的样本数量\n",[425,33748,33750,33753,33755,33757,33759],{"class":427,"line":33749},138,[425,33751,33752],{"class":701},"            val_num ",[425,33754,10476],{"class":1155},[425,33756,33720],{"class":701},[425,33758,1341],{"class":691},[425,33760,1165],{"class":701},[425,33762,33764],{"class":427,"line":33763},139,[425,33765,33766],{"class":1216},"        # 计算并保存每一次迭代的loss值和准确率\n",[425,33768,33770],{"class":427,"line":33769},140,[425,33771,33772],{"class":1216},"        # 计算并保存训练集的loss值\n",[425,33774,33776,33779,33781],{"class":427,"line":33775},141,[425,33777,33778],{"class":701},"        train_loss_all.append(train_loss",[425,33780,1732],{"class":1155},[425,33782,33783],{"class":701},"train_num)\n",[425,33785,33787],{"class":427,"line":33786},142,[425,33788,33789],{"class":1216},"        # 取双精度\n",[425,33791,33793],{"class":427,"line":33792},143,[425,33794,33795],{"class":1216},"        # 计算并保存训练集的准确率\n",[425,33797,33799,33802,33804],{"class":427,"line":33798},144,[425,33800,33801],{"class":701},"        train_acc_all.append(train_corrects.double().item()",[425,33803,1732],{"class":1155},[425,33805,33783],{"class":701},[425,33807,33809],{"class":427,"line":33808},145,[425,33810,33811],{"class":1216},"        # 计算并保存验证集的loss值\n",[425,33813,33815,33818,33820],{"class":427,"line":33814},146,[425,33816,33817],{"class":701},"        val_loss_all.append(val_loss",[425,33819,1732],{"class":1155},[425,33821,33822],{"class":701},"val_num)\n",[425,33824,33826],{"class":427,"line":33825},147,[425,33827,33828],{"class":1216},"        # 计算并保存验证集的准确率\n",[425,33830,33832,33835,33837],{"class":427,"line":33831},148,[425,33833,33834],{"class":701},"        val_acc_all.append(val_corrects.double().item()",[425,33836,1732],{"class":1155},[425,33838,33822],{"class":701},[425,33840,33842],{"class":427,"line":33841},149,[425,33843,3400],{"emptyLinePlaceholder":1084},[425,33845,33847],{"class":427,"line":33846},150,[425,33848,33849],{"class":1216},"        # 打印训练一轮的loss值和准确率\n",[425,33851,33853,33855,33857,33859,33861,33864,33866,33869,33871,33874,33876,33878,33880,33882,33885,33887,33889,33892,33894,33896],{"class":427,"line":33852},151,[425,33854,33206],{"class":691},[425,33856,1159],{"class":701},[425,33858,4592],{"class":435},[425,33860,33214],{"class":691},[425,33862,33863],{"class":435},"train loss:",[425,33865,2043],{"class":691},[425,33867,33868],{"class":1155},":.4f",[425,33870,2093],{"class":691},[425,33872,33873],{"class":435}," train acc:",[425,33875,2043],{"class":691},[425,33877,33868],{"class":1155},[425,33879,2093],{"class":691},[425,33881,4592],{"class":435},[425,33883,33884],{"class":701},".format(epoch,train_loss_all[",[425,33886,1680],{"class":1155},[425,33888,1367],{"class":691},[425,33890,33891],{"class":701},"],train_acc_all[",[425,33893,1680],{"class":1155},[425,33895,1367],{"class":691},[425,33897,33898],{"class":701},"]))\n",[425,33900,33902,33904,33906,33908,33910,33913,33915,33917,33919,33922,33924,33926,33928,33930,33933,33935,33937,33940,33942,33944],{"class":427,"line":33901},152,[425,33903,33206],{"class":691},[425,33905,1159],{"class":701},[425,33907,4592],{"class":435},[425,33909,33214],{"class":691},[425,33911,33912],{"class":435},"val loss:",[425,33914,2043],{"class":691},[425,33916,33868],{"class":1155},[425,33918,2093],{"class":691},[425,33920,33921],{"class":435}," val acc:",[425,33923,2043],{"class":691},[425,33925,33868],{"class":1155},[425,33927,2093],{"class":691},[425,33929,4592],{"class":435},[425,33931,33932],{"class":701},".format(epoch,val_loss_all[",[425,33934,1680],{"class":1155},[425,33936,1367],{"class":691},[425,33938,33939],{"class":701},"],val_acc_all[",[425,33941,1680],{"class":1155},[425,33943,1367],{"class":691},[425,33945,33898],{"class":701},[425,33947,33949],{"class":427,"line":33948},153,[425,33950,3400],{"emptyLinePlaceholder":1084},[425,33952,33954],{"class":427,"line":33953},154,[425,33955,33956],{"class":1216},"        # 判断准确度--->保存最优模型\n",[425,33958,33960,33962,33965,33967,33969,33971,33973],{"class":427,"line":33959},155,[425,33961,3497],{"class":1155},[425,33963,33964],{"class":701}," val_acc_all[",[425,33966,1680],{"class":1155},[425,33968,1367],{"class":691},[425,33970,2087],{"class":701},[425,33972,2107],{"class":1155},[425,33974,33975],{"class":701},"best_acc:\n",[425,33977,33979],{"class":427,"line":33978},156,[425,33980,33981],{"class":1216},"            # 保存当前模型准确度\n",[425,33983,33985,33988,33990,33992,33995,33997,33999],{"class":427,"line":33984},157,[425,33986,33987],{"class":701},"            best_acc:",[425,33989,1198],{"class":691},[425,33991,1204],{"class":1155},[425,33993,33994],{"class":701},"val_acc_all[",[425,33996,1680],{"class":1155},[425,33998,1367],{"class":691},[425,34000,34001],{"class":701},"]\n",[425,34003,34005],{"class":427,"line":34004},158,[425,34006,34007],{"class":1216},"            # 保存当前的准确度\n",[425,34009,34011],{"class":427,"line":34010},159,[425,34012,34013],{"class":1216},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[425,34015,34017,34020,34022],{"class":427,"line":34016},160,[425,34018,34019],{"class":701},"            best_model_wts",[425,34021,1204],{"class":1155},[425,34023,33069],{"class":701},[425,34025,34027],{"class":427,"line":34026},161,[425,34028,3400],{"emptyLinePlaceholder":1084},[425,34030,34032],{"class":427,"line":34031},162,[425,34033,34034],{"class":1216},"        # 计算耗时\n",[425,34036,34038,34041,34043,34046,34048],{"class":427,"line":34037},163,[425,34039,34040],{"class":701},"        time_use",[425,34042,1204],{"class":1155},[425,34044,34045],{"class":701},"time.time()",[425,34047,1680],{"class":1155},[425,34049,34050],{"class":701},"since\n",[425,34052,34054,34056,34058,34061,34063,34066,34068,34070,34072,34074,34076,34079,34082,34085,34087,34090,34092,34094],{"class":427,"line":34053},164,[425,34055,33206],{"class":691},[425,34057,1159],{"class":701},[425,34059,34060],{"class":435},"'训练和验证耗费的时间",[425,34062,2043],{"class":691},[425,34064,34065],{"class":1155},":.0f",[425,34067,2093],{"class":691},[425,34069,1692],{"class":435},[425,34071,2043],{"class":691},[425,34073,34065],{"class":1155},[425,34075,2093],{"class":691},[425,34077,34078],{"class":435},"s'",[425,34080,34081],{"class":701},".format(time_use",[425,34083,34084],{"class":1155},"\u002F\u002F",[425,34086,2054],{"class":691},[425,34088,34089],{"class":701},",time_use",[425,34091,1477],{"class":1155},[425,34093,2054],{"class":691},[425,34095,31252],{"class":701},[425,34097,34099],{"class":427,"line":34098},165,[425,34100,34101],{"class":1216},"    # 选择最优参数\n",[425,34103,34105],{"class":427,"line":34104},166,[425,34106,34107],{"class":1216},"    # 加载最高准确率下的模型参数\n",[425,34109,34111],{"class":427,"line":34110},167,[425,34112,34113],{"class":1216},"    # model.load_state_dict(best_model_wts)\n",[425,34115,34117,34120,34123],{"class":427,"line":34116},168,[425,34118,34119],{"class":701},"    torch.save(model.state_dict(best_model_wts), ",[425,34121,34122],{"class":435},"'.\u002Fbest_model.pth'",[425,34124,1165],{"class":701},[425,34126,34128],{"class":427,"line":34127},169,[425,34129,34130],{"class":1216},"    # 或者写成\n",[425,34132,34134],{"class":427,"line":34133},170,[425,34135,34136],{"class":1216},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[425,34138,34140],{"class":427,"line":34139},171,[425,34141,34142],{"class":1216},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[425,34144,34146,34149,34151,34154,34157,34159],{"class":427,"line":34145},172,[425,34147,34148],{"class":701},"    train_process",[425,34150,1204],{"class":1155},[425,34152,34153],{"class":701},"pd.DataFrame(",[425,34155,34156],{"class":6216},"data",[425,34158,1204],{"class":1155},[425,34160,2559],{"class":701},[425,34162,34164,34167,34169,34172],{"class":427,"line":34163},173,[425,34165,34166],{"class":435},"        \"epoch\"",[425,34168,948],{"class":701},[425,34170,34171],{"class":691},"range",[425,34173,34174],{"class":701},"(num_epochs),\n",[425,34176,34178,34181],{"class":427,"line":34177},174,[425,34179,34180],{"class":435},"        \"train_loss_all\"",[425,34182,34183],{"class":701},":train_loss_all,\n",[425,34185,34187,34190],{"class":427,"line":34186},175,[425,34188,34189],{"class":435},"        \"val_loss_all\"",[425,34191,34192],{"class":701},":val_loss_all,\n",[425,34194,34196,34199],{"class":427,"line":34195},176,[425,34197,34198],{"class":435},"        \"train_acc_all\"",[425,34200,34201],{"class":701},":train_acc_all,\n",[425,34203,34205,34208],{"class":427,"line":34204},177,[425,34206,34207],{"class":435},"        \"val_acc_all\"",[425,34209,34210],{"class":701},":val_acc_all\n",[425,34212,34214],{"class":427,"line":34213},178,[425,34215,34216],{"class":701},"    })\n",[425,34218,34220],{"class":427,"line":34219},179,[425,34221,34222],{"class":1216},"    # 返回训练保存的过程\n",[425,34224,34226,34228],{"class":427,"line":34225},180,[425,34227,5090],{"class":1155},[425,34229,34230],{"class":701}," train_process\n",[425,34232,34234],{"class":427,"line":34233},181,[425,34235,3400],{"emptyLinePlaceholder":1084},[425,34237,34239],{"class":427,"line":34238},182,[425,34240,34241],{"class":1216},"# 将loss值和精度按照图片的形式展示出来\n",[425,34243,34245,34247,34250],{"class":427,"line":34244},183,[425,34246,32702],{"class":1155},[425,34248,34249],{"class":431}," matplot_acc_loss",[425,34251,34252],{"class":701},"(train_process):\n",[425,34254,34256],{"class":427,"line":34255},184,[425,34257,34258],{"class":1216},"    # 设置图的大小\n",[425,34260,34262,34265,34267,34269,34271,34273,34275,34277],{"class":427,"line":34261},185,[425,34263,34264],{"class":701},"    plt.figure(",[425,34266,32448],{"class":6216},[425,34268,1204],{"class":1155},[425,34270,1159],{"class":701},[425,34272,1646],{"class":691},[425,34274,1527],{"class":701},[425,34276,1442],{"class":691},[425,34278,31252],{"class":701},[425,34280,34282],{"class":427,"line":34281},186,[425,34283,34284],{"class":1216},"    # 设置图中有几张图\n",[425,34286,34288],{"class":427,"line":34287},187,[425,34289,34290],{"class":1216},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[425,34292,34294],{"class":427,"line":34293},188,[425,34295,34296],{"class":1216},"    # ①loss图\n",[425,34298,34300,34302,34304,34306,34308,34310,34312],{"class":427,"line":34299},189,[425,34301,32482],{"class":701},[425,34303,1367],{"class":691},[425,34305,1527],{"class":701},[425,34307,1235],{"class":691},[425,34309,1527],{"class":701},[425,34311,1367],{"class":691},[425,34313,1165],{"class":701},[425,34315,34317],{"class":427,"line":34316},190,[425,34318,34319],{"class":1216},"    # 补充:\n",[425,34321,34323],{"class":427,"line":34322},191,[425,34324,34325],{"class":1216},"    # plt.subplot(nrows, ncols, index)\n",[425,34327,34329],{"class":427,"line":34328},192,[425,34330,34331],{"class":1216},"    # nrows：行数\n",[425,34333,34335],{"class":427,"line":34334},193,[425,34336,34337],{"class":1216},"    # ncols：列数\n",[425,34339,34341],{"class":427,"line":34340},194,[425,34342,34343],{"class":1216},"    # index：目前选中第几个子图（从1开始）\n",[425,34345,34347,34350,34353,34356,34359,34361,34364,34366,34369],{"class":427,"line":34346},195,[425,34348,34349],{"class":701},"    plt.plot(train_process[",[425,34351,34352],{"class":435},"\"epoch\"",[425,34354,34355],{"class":701},"],train_process.train_loss_all,",[425,34357,34358],{"class":435},"'ro-'",[425,34360,1527],{"class":701},[425,34362,34363],{"class":6216},"label",[425,34365,1204],{"class":1155},[425,34367,34368],{"class":435},"'train loss'",[425,34370,1165],{"class":701},[425,34372,34374,34376,34378,34381,34384,34386,34388,34390,34393],{"class":427,"line":34373},196,[425,34375,34349],{"class":701},[425,34377,34352],{"class":435},[425,34379,34380],{"class":701},"],train_process.val_loss_all,",[425,34382,34383],{"class":435},"'bs--'",[425,34385,1527],{"class":701},[425,34387,34363],{"class":6216},[425,34389,1204],{"class":1155},[425,34391,34392],{"class":435},"'val loss'",[425,34394,1165],{"class":701},[425,34396,34398],{"class":427,"line":34397},197,[425,34399,34400],{"class":1216},"    # 添加一个图例\n",[425,34402,34404],{"class":427,"line":34403},198,[425,34405,34406],{"class":701},"    plt.legend()\n",[425,34408,34410],{"class":427,"line":34409},199,[425,34411,34412],{"class":1216},"    # 给轴添加标签\n",[425,34414,34416,34419,34422],{"class":427,"line":34415},200,[425,34417,34418],{"class":701},"    plt.xlabel(",[425,34420,34421],{"class":435},"'epoch'",[425,34423,1165],{"class":701},[425,34425,34427,34430,34433],{"class":427,"line":34426},201,[425,34428,34429],{"class":701},"    plt.ylabel(",[425,34431,34432],{"class":435},"'loss'",[425,34434,1165],{"class":701},[425,34436,34438],{"class":427,"line":34437},202,[425,34439,34440],{"class":1216},"    # ②准确度图\n",[425,34442,34444,34446,34448,34450,34452,34454,34456],{"class":427,"line":34443},203,[425,34445,32482],{"class":701},[425,34447,1367],{"class":691},[425,34449,1527],{"class":701},[425,34451,1235],{"class":691},[425,34453,1527],{"class":701},[425,34455,1235],{"class":691},[425,34457,1165],{"class":701},[425,34459,34461,34463,34465,34468,34470,34472,34474,34476,34479],{"class":427,"line":34460},204,[425,34462,34349],{"class":701},[425,34464,34352],{"class":435},[425,34466,34467],{"class":701},"],train_process.train_acc_all,",[425,34469,34358],{"class":435},[425,34471,1527],{"class":701},[425,34473,34363],{"class":6216},[425,34475,1204],{"class":1155},[425,34477,34478],{"class":435},"'train acc'",[425,34480,1165],{"class":701},[425,34482,34484,34486,34488,34491,34493,34495,34497,34499,34502],{"class":427,"line":34483},205,[425,34485,34349],{"class":701},[425,34487,34352],{"class":435},[425,34489,34490],{"class":701},"],train_process.val_acc_all,",[425,34492,34383],{"class":435},[425,34494,1527],{"class":701},[425,34496,34363],{"class":6216},[425,34498,1204],{"class":1155},[425,34500,34501],{"class":435},"'val acc'",[425,34503,1165],{"class":701},[425,34505,34507],{"class":427,"line":34506},206,[425,34508,34509],{"class":1216},"    # 添加图例\n",[425,34511,34513],{"class":427,"line":34512},207,[425,34514,34406],{"class":701},[425,34516,34518,34520,34522],{"class":427,"line":34517},208,[425,34519,34418],{"class":701},[425,34521,34352],{"class":435},[425,34523,1165],{"class":701},[425,34525,34527,34529,34532],{"class":427,"line":34526},209,[425,34528,34429],{"class":701},[425,34530,34531],{"class":435},"\"acc\"",[425,34533,1165],{"class":701},[425,34535,34537],{"class":427,"line":34536},210,[425,34538,34539],{"class":701},"    plt.show()\n",[425,34541,34543],{"class":427,"line":34542},211,[425,34544,3400],{"emptyLinePlaceholder":1084},[425,34546,34548],{"class":427,"line":34547},212,[425,34549,34550],{"class":1216},"# 正式开始训练:\n",[425,34552,34554,34556,34558,34560,34562],{"class":427,"line":34553},213,[425,34555,2544],{"class":1155},[425,34557,31975],{"class":691},[425,34559,3949],{"class":1155},[425,34561,31980],{"class":435},[425,34563,4739],{"class":701},[425,34565,34567],{"class":427,"line":34566},214,[425,34568,34569],{"class":1216},"    # 将模型实例化\n",[425,34571,34573,34576,34578],{"class":427,"line":34572},215,[425,34574,34575],{"class":701},"    LeNet",[425,34577,1204],{"class":1155},[425,34579,34580],{"class":701},"LeNet()\n",[425,34582,34584,34587,34589],{"class":427,"line":34583},216,[425,34585,34586],{"class":701},"    train_dataloader,val_dataloader",[425,34588,1204],{"class":1155},[425,34590,34591],{"class":701},"train_val_data_process()\n",[425,34593,34595,34597,34599,34602,34605,34607,34609],{"class":427,"line":34594},217,[425,34596,34148],{"class":701},[425,34598,1204],{"class":1155},[425,34600,34601],{"class":701},"train_model_process(LeNet,train_dataloader,val_dataloader,",[425,34603,34604],{"class":6216},"num_epochs",[425,34606,1204],{"class":1155},[425,34608,1848],{"class":691},[425,34610,1165],{"class":701},[425,34612,34614],{"class":427,"line":34613},218,[425,34615,34616],{"class":701},"    matplot_acc_loss(train_process)\n",[19,34618,34619],{},"画图的补充点学习：",[19,34621,34622],{},[393,34623],{"alt":395,"src":34624},"\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",[972,34626,34627],{"start":710},[450,34628,34629],{},"测试",[416,34631,34633],{"className":31133,"code":34632,"language":31135,"meta":395,"style":395},"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",[422,34634,34635,34641,34651,34663,34673,34678,34688,34698,34702,34707,34716,34733,34745,34762,34773,34789,34794,34805,34816,34827,34834,34838,34843,34853,34858,34875,34883,34887,34892,34901,34910,34914,34919,34924,34929,34936,34941,34953,34963,34973,34978,34982,34987,34996,35001,35017,35022,35027,35032,35046,35051,35065,35069,35074,35089,35094,35106,35110,35115,35127,35132,35140,35145,35150,35160,35165,35174,35179,35184,35188,35193,35198,35214,35222,35227,35232,35291,35297,35302,35313,35321,35329,35333,35338,35342,35347,35355,35360,35376,35381,35391,35401],{"__ignoreMap":395},[425,34636,34637,34639],{"class":427,"line":428},[425,34638,31147],{"class":1155},[425,34640,31150],{"class":701},[425,34642,34643,34645,34647,34649],{"class":427,"line":698},[425,34644,31147],{"class":1155},[425,34646,32170],{"class":701},[425,34648,32138],{"class":1155},[425,34650,32175],{"class":701},[425,34652,34653,34655,34658,34660],{"class":427,"line":710},[425,34654,31492],{"class":1155},[425,34656,34657],{"class":701}," jupyter_client.consoleapp ",[425,34659,31147],{"class":1155},[425,34661,34662],{"class":701}," classes\n",[425,34664,34665,34667,34669,34671],{"class":427,"line":721},[425,34666,31492],{"class":1155},[425,34668,32153],{"class":701},[425,34670,31147],{"class":1155},[425,34672,32158],{"class":701},[425,34674,34675],{"class":427,"line":735},[425,34676,34677],{"class":1216},"# 导入数据集\n",[425,34679,34680,34682,34684,34686],{"class":427,"line":743},[425,34681,31492],{"class":1155},[425,34683,32123],{"class":701},[425,34685,31147],{"class":1155},[425,34687,32128],{"class":701},[425,34689,34690,34692,34694,34696],{"class":427,"line":751},[425,34691,31492],{"class":1155},[425,34693,32669],{"class":701},[425,34695,31147],{"class":1155},[425,34697,32674],{"class":701},[425,34699,34700],{"class":427,"line":759},[425,34701,3400],{"emptyLinePlaceholder":1084},[425,34703,34704],{"class":427,"line":770},[425,34705,34706],{"class":1216},"# 测试数据处理\n",[425,34708,34709,34711,34714],{"class":427,"line":780},[425,34710,32702],{"class":1155},[425,34712,34713],{"class":431}," test_data_process",[425,34715,32708],{"class":701},[425,34717,34718,34721,34723,34725,34727,34729,34731],{"class":427,"line":790},[425,34719,34720],{"class":701},"    test_data",[425,34722,1204],{"class":1155},[425,34724,32210],{"class":701},[425,34726,32213],{"class":6216},[425,34728,1204],{"class":1155},[425,34730,32218],{"class":435},[425,34732,32221],{"class":701},[425,34734,34735,34738,34740,34743],{"class":427,"line":805},[425,34736,34737],{"class":6216},"                           train",[425,34739,1204],{"class":1155},[425,34741,34742],{"class":691},"False",[425,34744,32221],{"class":701},[425,34746,34747,34750,34752,34754,34756,34758,34760],{"class":427,"line":818},[425,34748,34749],{"class":6216},"                           transform",[425,34751,1204],{"class":1155},[425,34753,32248],{"class":701},[425,34755,32251],{"class":6216},[425,34757,1204],{"class":1155},[425,34759,2048],{"class":691},[425,34761,32259],{"class":701},[425,34763,34764,34767,34769,34771],{"class":427,"line":831},[425,34765,34766],{"class":6216},"                           download",[425,34768,1204],{"class":1155},[425,34770,32231],{"class":691},[425,34772,1165],{"class":701},[425,34774,34775,34778,34780,34782,34784,34786],{"class":427,"line":841},[425,34776,34777],{"class":701},"    test_dataloader",[425,34779,1204],{"class":1155},[425,34781,32289],{"class":701},[425,34783,32292],{"class":6216},[425,34785,1204],{"class":1155},[425,34787,34788],{"class":701},"test_data,\n",[425,34790,34791],{"class":427,"line":852},[425,34792,34793],{"class":1216},"                                    # 这里是一张一张进行测试\n",[425,34795,34796,34799,34801,34803],{"class":427,"line":862},[425,34797,34798],{"class":6216},"                                    batch_size",[425,34800,1204],{"class":1155},[425,34802,1367],{"class":691},[425,34804,32221],{"class":701},[425,34806,34807,34810,34812,34814],{"class":427,"line":878},[425,34808,34809],{"class":6216},"                                    shuffle",[425,34811,1204],{"class":1155},[425,34813,32231],{"class":691},[425,34815,32221],{"class":701},[425,34817,34818,34821,34823,34825],{"class":427,"line":914},[425,34819,34820],{"class":6216},"                                    num_workers",[425,34822,1204],{"class":1155},[425,34824,1341],{"class":691},[425,34826,1165],{"class":701},[425,34828,34829,34831],{"class":427,"line":943},[425,34830,5090],{"class":1155},[425,34832,34833],{"class":701}," test_dataloader\n",[425,34835,34836],{"class":427,"line":956},[425,34837,3400],{"emptyLinePlaceholder":1084},[425,34839,34840],{"class":427,"line":964},[425,34841,34842],{"class":1216},"# 定义模型测试函数\n",[425,34844,34845,34847,34850],{"class":427,"line":2733},[425,34846,32702],{"class":1155},[425,34848,34849],{"class":431}," test_model_process",[425,34851,34852],{"class":701},"(model,test_dataloader):\n",[425,34854,34855],{"class":427,"line":2750},[425,34856,34857],{"class":1216},"    # 将模型放到设备当中，先进行判断\n",[425,34859,34860,34862,34864,34866,34868,34870,34872],{"class":427,"line":2755},[425,34861,31992],{"class":701},[425,34863,1204],{"class":1155},[425,34865,31999],{"class":435},[425,34867,2706],{"class":1155},[425,34869,32004],{"class":701},[425,34871,2703],{"class":1155},[425,34873,34874],{"class":435}," \"cpu\"\n",[425,34876,34877,34879,34881],{"class":427,"line":2760},[425,34878,32044],{"class":701},[425,34880,1204],{"class":1155},[425,34882,33044],{"class":701},[425,34884,34885],{"class":427,"line":2765},[425,34886,3400],{"emptyLinePlaceholder":1084},[425,34888,34889],{"class":427,"line":2779},[425,34890,34891],{"class":1216},"    # 设置初始化参数\n",[425,34893,34894,34897,34899],{"class":427,"line":2784},[425,34895,34896],{"class":701},"    test_corrects",[425,34898,1204],{"class":1155},[425,34900,33097],{"class":691},[425,34902,34903,34906,34908],{"class":427,"line":3577},[425,34904,34905],{"class":701},"    test_num",[425,34907,1204],{"class":1155},[425,34909,4085],{"class":691},[425,34911,34912],{"class":427,"line":3591},[425,34913,3400],{"emptyLinePlaceholder":1084},[425,34915,34916],{"class":427,"line":3599},[425,34917,34918],{"class":1216},"    # 进行模型测试\n",[425,34920,34921],{"class":427,"line":3604},[425,34922,34923],{"class":1216},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[425,34925,34926],{"class":427,"line":3610},[425,34927,34928],{"class":1216},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[425,34930,34931,34934],{"class":427,"line":3616},[425,34932,34933],{"class":1155},"    with",[425,34935,33639],{"class":701},[425,34937,34938],{"class":427,"line":3621},[425,34939,34940],{"class":1216},"        # 从数据中进行\n",[425,34942,34943,34945,34948,34950],{"class":427,"line":8948},[425,34944,4403],{"class":1155},[425,34946,34947],{"class":701}," test_data_x,test_data_y ",[425,34949,27034],{"class":1155},[425,34951,34952],{"class":701}," test_dataloader:\n",[425,34954,34955,34958,34960],{"class":427,"line":8972},[425,34956,34957],{"class":701},"            test_data_x",[425,34959,1204],{"class":1155},[425,34961,34962],{"class":701},"test_data_x.to(device)\n",[425,34964,34965,34968,34970],{"class":427,"line":8977},[425,34966,34967],{"class":701},"            test_data_y",[425,34969,1204],{"class":1155},[425,34971,34972],{"class":701},"test_data_y.to(device)\n",[425,34974,34975],{"class":427,"line":8983},[425,34976,34977],{"class":1216},"            # 设置为验证模式\n",[425,34979,34980],{"class":427,"line":9010},[425,34981,33630],{"class":701},[425,34983,34984],{"class":427,"line":9015},[425,34985,34986],{"class":1216},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[425,34988,34989,34991,34993],{"class":427,"line":9021},[425,34990,33415],{"class":701},[425,34992,1204],{"class":1155},[425,34994,34995],{"class":701},"model(test_data_x)\n",[425,34997,34998],{"class":427,"line":9033},[425,34999,35000],{"class":1216},"            # 查找每一行中最大值对应的下标\n",[425,35002,35003,35005,35007,35009,35011,35013,35015],{"class":427,"line":9045},[425,35004,33432],{"class":701},[425,35006,1204],{"class":1155},[425,35008,33437],{"class":701},[425,35010,33440],{"class":6216},[425,35012,1204],{"class":1155},[425,35014,1367],{"class":691},[425,35016,1165],{"class":701},[425,35018,35019],{"class":427,"line":9057},[425,35020,35021],{"class":1216},"            # 计算正确率\n",[425,35023,35024],{"class":427,"line":10715},[425,35025,35026],{"class":1216},"            # .data表示是一个不带梯度信息的tensor\n",[425,35028,35029],{"class":427,"line":10740},[425,35030,35031],{"class":1216},"            # 如果预测正确，则准确度test_corrects加1\n",[425,35033,35034,35037,35039,35041,35043],{"class":427,"line":10763},[425,35035,35036],{"class":701},"            test_corrects",[425,35038,10476],{"class":1155},[425,35040,33542],{"class":701},[425,35042,3949],{"class":1155},[425,35044,35045],{"class":701},"test_data_y.data)\n",[425,35047,35048],{"class":427,"line":10787},[425,35049,35050],{"class":1216},"            # 将所有的测试样本进行累计\n",[425,35052,35053,35056,35058,35061,35063],{"class":427,"line":10792},[425,35054,35055],{"class":701},"            test_num",[425,35057,10476],{"class":1155},[425,35059,35060],{"class":701},"test_data_x.size(",[425,35062,1341],{"class":691},[425,35064,1165],{"class":701},[425,35066,35067],{"class":427,"line":10797},[425,35068,3400],{"emptyLinePlaceholder":1084},[425,35070,35071],{"class":427,"line":10802},[425,35072,35073],{"class":1216},"        # 计算准确度\n",[425,35075,35076,35079,35081,35084,35086],{"class":427,"line":10811},[425,35077,35078],{"class":701},"        test_acc",[425,35080,1204],{"class":1155},[425,35082,35083],{"class":701},"test_corrects.double().item()",[425,35085,1732],{"class":1155},[425,35087,35088],{"class":701},"test_num\n",[425,35090,35091],{"class":427,"line":10816},[425,35092,35093],{"class":1216},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[425,35095,35096,35098,35100,35103],{"class":427,"line":10822},[425,35097,33206],{"class":691},[425,35099,1159],{"class":701},[425,35101,35102],{"class":435},"\"测试的准确率：\"",[425,35104,35105],{"class":701},",test_acc)\n",[425,35107,35108],{"class":427,"line":10843},[425,35109,3400],{"emptyLinePlaceholder":1084},[425,35111,35112],{"class":427,"line":10849},[425,35113,35114],{"class":1216},"# 实现模型的测试功能\n",[425,35116,35117,35119,35121,35123,35125],{"class":427,"line":10863},[425,35118,2544],{"class":1155},[425,35120,31975],{"class":691},[425,35122,3949],{"class":1155},[425,35124,31980],{"class":435},[425,35126,4739],{"class":701},[425,35128,35129],{"class":427,"line":10869},[425,35130,35131],{"class":1216},"    # 加载模型\n",[425,35133,35134,35136,35138],{"class":427,"line":10896},[425,35135,32044],{"class":701},[425,35137,1204],{"class":1155},[425,35139,34580],{"class":701},[425,35141,35142],{"class":427,"line":10905},[425,35143,35144],{"class":1216},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[425,35146,35147],{"class":427,"line":10911},[425,35148,35149],{"class":1216},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[425,35151,35152,35155,35158],{"class":427,"line":10919},[425,35153,35154],{"class":701},"    model.load_state_dict(torch.load(",[425,35156,35157],{"class":435},"'best_model.pth'",[425,35159,31252],{"class":701},[425,35161,35162],{"class":427,"line":10924},[425,35163,35164],{"class":1216},"    # 数据加载\n",[425,35166,35167,35169,35171],{"class":427,"line":17601},[425,35168,34777],{"class":701},[425,35170,1204],{"class":1155},[425,35172,35173],{"class":701},"test_data_process()\n",[425,35175,35176],{"class":427,"line":17607},[425,35177,35178],{"class":1216},"    # 加载模型测试的函数\n",[425,35180,35181],{"class":427,"line":17630},[425,35182,35183],{"class":701},"    test_model_process(model,test_dataloader)\n",[425,35185,35186],{"class":427,"line":17636},[425,35187,3400],{"emptyLinePlaceholder":1084},[425,35189,35190],{"class":427,"line":17659},[425,35191,35192],{"class":1216},"    # 验证集推理实现：\n",[425,35194,35195],{"class":427,"line":17673},[425,35196,35197],{"class":1216},"    # 加载数据加载的更详细一些\n",[425,35199,35200,35202,35204,35206,35208,35210,35212],{"class":427,"line":17693},[425,35201,31992],{"class":701},[425,35203,1204],{"class":1155},[425,35205,31999],{"class":435},[425,35207,2706],{"class":1155},[425,35209,32004],{"class":701},[425,35211,2703],{"class":1155},[425,35213,34874],{"class":435},[425,35215,35216,35218,35220],{"class":427,"line":17699},[425,35217,32044],{"class":701},[425,35219,1204],{"class":1155},[425,35221,33044],{"class":701},[425,35223,35224],{"class":427,"line":17710},[425,35225,35226],{"class":1216},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[425,35228,35229],{"class":427,"line":17733},[425,35230,35231],{"class":1216},"    # 顺序不可改变\n",[425,35233,35234,35237,35239,35241,35244,35246,35249,35251,35254,35256,35259,35261,35264,35266,35269,35271,35274,35276,35279,35281,35284,35286,35289],{"class":427,"line":17755},[425,35235,35236],{"class":701},"    classes",[425,35238,1204],{"class":1155},[425,35240,2037],{"class":701},[425,35242,35243],{"class":435},"'T-shirt\u002Ftop'",[425,35245,1527],{"class":701},[425,35247,35248],{"class":435},"'Trouser'",[425,35250,1527],{"class":701},[425,35252,35253],{"class":435},"'Pullover'",[425,35255,1527],{"class":701},[425,35257,35258],{"class":435},"'Dress'",[425,35260,1527],{"class":701},[425,35262,35263],{"class":435},"'Coat'",[425,35265,1527],{"class":701},[425,35267,35268],{"class":435},"'Sandal'",[425,35270,1527],{"class":701},[425,35272,35273],{"class":435},"'Shirt'",[425,35275,1527],{"class":701},[425,35277,35278],{"class":435},"'Sneaker'",[425,35280,1527],{"class":701},[425,35282,35283],{"class":435},"'Bag'",[425,35285,1527],{"class":701},[425,35287,35288],{"class":435},"'Ankle boot'",[425,35290,34001],{"class":701},[425,35292,35293,35295],{"class":427,"line":17760},[425,35294,34933],{"class":1155},[425,35296,33639],{"class":701},[425,35298,35299],{"class":427,"line":17766},[425,35300,35301],{"class":1216},"        # 将数据和标签都放到设备当中\n",[425,35303,35304,35306,35309,35311],{"class":427,"line":17780},[425,35305,4403],{"class":1155},[425,35307,35308],{"class":701}," b_x,b_y ",[425,35310,27034],{"class":1155},[425,35312,34952],{"class":701},[425,35314,35315,35317,35319],{"class":427,"line":17793},[425,35316,33365],{"class":701},[425,35318,1204],{"class":1155},[425,35320,33370],{"class":701},[425,35322,35323,35325,35327],{"class":427,"line":17798},[425,35324,33380],{"class":701},[425,35326,1204],{"class":1155},[425,35328,33385],{"class":701},[425,35330,35331],{"class":427,"line":17812},[425,35332,3400],{"emptyLinePlaceholder":1084},[425,35334,35335],{"class":427,"line":17817},[425,35336,35337],{"class":1216},"            # 设置模型为验证模式\n",[425,35339,35340],{"class":427,"line":17823},[425,35341,33630],{"class":701},[425,35343,35344],{"class":427,"line":17828},[425,35345,35346],{"class":1216},"            # 模型推理结果\n",[425,35348,35349,35351,35353],{"class":427,"line":17842},[425,35350,33415],{"class":701},[425,35352,1204],{"class":1155},[425,35354,33420],{"class":701},[425,35356,35357],{"class":427,"line":17847},[425,35358,35359],{"class":1216},"            # 获取最大下标，最大下标就是类别号\n",[425,35361,35362,35364,35366,35368,35370,35372,35374],{"class":427,"line":17852},[425,35363,33432],{"class":701},[425,35365,1204],{"class":1155},[425,35367,33437],{"class":701},[425,35369,33440],{"class":6216},[425,35371,1204],{"class":1155},[425,35373,1367],{"class":691},[425,35375,1165],{"class":701},[425,35377,35378],{"class":427,"line":17866},[425,35379,35380],{"class":1216},"            # 取出张量中的数值\n",[425,35382,35383,35386,35388],{"class":427,"line":17878},[425,35384,35385],{"class":701},"            result",[425,35387,1204],{"class":1155},[425,35389,35390],{"class":701},"pre_lab.item()\n",[425,35392,35393,35396,35398],{"class":427,"line":17883},[425,35394,35395],{"class":701},"            label",[425,35397,1204],{"class":1155},[425,35399,35400],{"class":701},"b_y.item()\n",[425,35402,35403,35406,35408,35411,35414,35417,35419,35422],{"class":427,"line":17896},[425,35404,35405],{"class":691},"            print",[425,35407,1159],{"class":701},[425,35409,35410],{"class":435},"\"预测值：\"",[425,35412,35413],{"class":701},",classes[result],",[425,35415,35416],{"class":435},"\"------\"",[425,35418,1527],{"class":701},[425,35420,35421],{"class":435},"\"真实值：\"",[425,35423,35424],{"class":701},",classes[label])\n",[19,35426,35427],{},"（2）AlexNet",[972,35429,35430],{},[450,35431,35432],{},"神经网络构建",[416,35434,35436],{"className":31133,"code":35435,"language":31135,"meta":395,"style":395},"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",[422,35437,35438,35444,35454,35464,35476,35480,35497,35505,35520,35532,35574,35601,35644,35670,35714,35757,35800,35827,35831,35841,35846,35874,35893,35912,35916,35921,35929,35944,35954,35968,35978,35993,36008,36023,36034,36038,36043,36053,36068,36073,36087,36102,36114,36119,36130,36135,36141,36146,36158,36178,36183,36192],{"__ignoreMap":395},[425,35439,35440,35442],{"class":427,"line":428},[425,35441,31147],{"class":1155},[425,35443,31150],{"class":701},[425,35445,35446,35448,35450,35452],{"class":427,"line":698},[425,35447,31492],{"class":1155},[425,35449,31495],{"class":701},[425,35451,31147],{"class":1155},[425,35453,31500],{"class":701},[425,35455,35456,35458,35460,35462],{"class":427,"line":710},[425,35457,31492],{"class":1155},[425,35459,31512],{"class":701},[425,35461,31147],{"class":1155},[425,35463,31517],{"class":701},[425,35465,35466,35468,35471,35473],{"class":427,"line":721},[425,35467,31147],{"class":1155},[425,35469,35470],{"class":701}," torch.nn.functional ",[425,35472,32138],{"class":1155},[425,35474,35475],{"class":701}," F\n",[425,35477,35478],{"class":427,"line":735},[425,35479,3400],{"emptyLinePlaceholder":1084},[425,35481,35482,35484,35487,35489,35491,35493,35495],{"class":427,"line":743},[425,35483,15691],{"class":1155},[425,35485,35486],{"class":431}," AlexNet",[425,35488,1159],{"class":701},[425,35490,31533],{"class":431},[425,35492,1706],{"class":701},[425,35494,31538],{"class":431},[425,35496,31541],{"class":701},[425,35498,35499,35501,35503],{"class":427,"line":751},[425,35500,31556],{"class":1155},[425,35502,31559],{"class":691},[425,35504,31562],{"class":701},[425,35506,35507,35509,35512,35514,35516,35518],{"class":427,"line":759},[425,35508,31572],{"class":691},[425,35510,35511],{"class":701},"(AlexNet,",[425,35513,31578],{"class":691},[425,35515,31581],{"class":701},[425,35517,31584],{"class":691},[425,35519,2976],{"class":701},[425,35521,35522,35524,35527,35529],{"class":427,"line":770},[425,35523,31600],{"class":691},[425,35525,35526],{"class":701},".ReLu",[425,35528,1204],{"class":1155},[425,35530,35531],{"class":701},"nn.ReLU()\n",[425,35533,35534,35536,35538,35540,35542,35544,35546,35548,35550,35552,35554,35556,35558,35560,35562,35564,35566,35568,35570,35572],{"class":427,"line":780},[425,35535,31600],{"class":691},[425,35537,31603],{"class":701},[425,35539,1204],{"class":1155},[425,35541,31608],{"class":701},[425,35543,31611],{"class":6216},[425,35545,1204],{"class":1155},[425,35547,1367],{"class":691},[425,35549,1527],{"class":701},[425,35551,31620],{"class":6216},[425,35553,1204],{"class":1155},[425,35555,1359],{"class":691},[425,35557,1527],{"class":701},[425,35559,31629],{"class":6216},[425,35561,1204],{"class":1155},[425,35563,1620],{"class":691},[425,35565,1527],{"class":701},[425,35567,31684],{"class":6216},[425,35569,1204],{"class":1155},[425,35571,1442],{"class":691},[425,35573,1165],{"class":701},[425,35575,35576,35578,35580,35582,35585,35587,35589,35591,35593,35595,35597,35599],{"class":427,"line":790},[425,35577,31600],{"class":691},[425,35579,31668],{"class":701},[425,35581,1204],{"class":1155},[425,35583,35584],{"class":701},"nn.MaxPool2d(",[425,35586,31629],{"class":6216},[425,35588,1204],{"class":1155},[425,35590,1229],{"class":691},[425,35592,1527],{"class":701},[425,35594,31684],{"class":6216},[425,35596,1204],{"class":1155},[425,35598,1235],{"class":691},[425,35600,1165],{"class":701},[425,35602,35603,35605,35607,35609,35611,35613,35615,35617,35619,35621,35623,35626,35628,35630,35632,35634,35636,35638,35640,35642],{"class":427,"line":805},[425,35604,31600],{"class":691},[425,35606,31697],{"class":701},[425,35608,1204],{"class":1155},[425,35610,31608],{"class":701},[425,35612,31611],{"class":6216},[425,35614,1204],{"class":1155},[425,35616,1359],{"class":691},[425,35618,1527],{"class":701},[425,35620,31620],{"class":6216},[425,35622,1204],{"class":1155},[425,35624,35625],{"class":691},"256",[425,35627,1527],{"class":701},[425,35629,31629],{"class":6216},[425,35631,1204],{"class":1155},[425,35633,1468],{"class":691},[425,35635,1527],{"class":701},[425,35637,31638],{"class":6216},[425,35639,1204],{"class":1155},[425,35641,1235],{"class":691},[425,35643,1165],{"class":701},[425,35645,35646,35648,35650,35652,35654,35656,35658,35660,35662,35664,35666,35668],{"class":427,"line":818},[425,35647,31600],{"class":691},[425,35649,31732],{"class":701},[425,35651,1204],{"class":1155},[425,35653,35584],{"class":701},[425,35655,31629],{"class":6216},[425,35657,1204],{"class":1155},[425,35659,1229],{"class":691},[425,35661,1527],{"class":701},[425,35663,31684],{"class":6216},[425,35665,1204],{"class":1155},[425,35667,1235],{"class":691},[425,35669,1165],{"class":701},[425,35671,35672,35674,35677,35679,35681,35683,35685,35687,35689,35691,35693,35696,35698,35700,35702,35704,35706,35708,35710,35712],{"class":427,"line":831},[425,35673,31600],{"class":691},[425,35675,35676],{"class":701},".c5",[425,35678,1204],{"class":1155},[425,35680,31608],{"class":701},[425,35682,31611],{"class":6216},[425,35684,1204],{"class":1155},[425,35686,35625],{"class":691},[425,35688,1527],{"class":701},[425,35690,31620],{"class":6216},[425,35692,1204],{"class":1155},[425,35694,35695],{"class":691},"384",[425,35697,1527],{"class":701},[425,35699,31629],{"class":6216},[425,35701,1204],{"class":1155},[425,35703,1229],{"class":691},[425,35705,1527],{"class":701},[425,35707,31638],{"class":6216},[425,35709,1204],{"class":1155},[425,35711,1367],{"class":691},[425,35713,1165],{"class":701},[425,35715,35716,35718,35721,35723,35725,35727,35729,35731,35733,35735,35737,35739,35741,35743,35745,35747,35749,35751,35753,35755],{"class":427,"line":841},[425,35717,31600],{"class":691},[425,35719,35720],{"class":701},".c6",[425,35722,1204],{"class":1155},[425,35724,31608],{"class":701},[425,35726,31611],{"class":6216},[425,35728,1204],{"class":1155},[425,35730,35695],{"class":691},[425,35732,1527],{"class":701},[425,35734,31620],{"class":6216},[425,35736,1204],{"class":1155},[425,35738,35695],{"class":691},[425,35740,1527],{"class":701},[425,35742,31629],{"class":6216},[425,35744,1204],{"class":1155},[425,35746,1229],{"class":691},[425,35748,1527],{"class":701},[425,35750,31638],{"class":6216},[425,35752,1204],{"class":1155},[425,35754,1367],{"class":691},[425,35756,1165],{"class":701},[425,35758,35759,35761,35764,35766,35768,35770,35772,35774,35776,35778,35780,35782,35784,35786,35788,35790,35792,35794,35796,35798],{"class":427,"line":852},[425,35760,31600],{"class":691},[425,35762,35763],{"class":701},".c7",[425,35765,1204],{"class":1155},[425,35767,31608],{"class":701},[425,35769,31611],{"class":6216},[425,35771,1204],{"class":1155},[425,35773,35695],{"class":691},[425,35775,1527],{"class":701},[425,35777,31620],{"class":6216},[425,35779,1204],{"class":1155},[425,35781,35625],{"class":691},[425,35783,1527],{"class":701},[425,35785,31629],{"class":6216},[425,35787,1204],{"class":1155},[425,35789,1229],{"class":691},[425,35791,1527],{"class":701},[425,35793,31638],{"class":6216},[425,35795,1204],{"class":1155},[425,35797,1367],{"class":691},[425,35799,1165],{"class":701},[425,35801,35802,35804,35807,35809,35811,35813,35815,35817,35819,35821,35823,35825],{"class":427,"line":862},[425,35803,31600],{"class":691},[425,35805,35806],{"class":701},".s8",[425,35808,1204],{"class":1155},[425,35810,35584],{"class":701},[425,35812,31629],{"class":6216},[425,35814,1204],{"class":1155},[425,35816,1229],{"class":691},[425,35818,1527],{"class":701},[425,35820,31684],{"class":6216},[425,35822,1204],{"class":1155},[425,35824,1235],{"class":691},[425,35826,1165],{"class":701},[425,35828,35829],{"class":427,"line":878},[425,35830,31757],{"class":1216},[425,35832,35833,35835,35837,35839],{"class":427,"line":914},[425,35834,31600],{"class":691},[425,35836,31764],{"class":701},[425,35838,1204],{"class":1155},[425,35840,31769],{"class":701},[425,35842,35843],{"class":427,"line":943},[425,35844,35845],{"class":1216},"       # 定义全连接层\n",[425,35847,35848,35850,35853,35855,35857,35859,35861,35863,35865,35867,35869,35872],{"class":427,"line":956},[425,35849,31600],{"class":691},[425,35851,35852],{"class":701},".f1",[425,35854,1204],{"class":1155},[425,35856,31786],{"class":701},[425,35858,1493],{"class":691},[425,35860,1603],{"class":1155},[425,35862,1493],{"class":691},[425,35864,1603],{"class":1155},[425,35866,35625],{"class":691},[425,35868,1527],{"class":701},[425,35870,35871],{"class":691},"4096",[425,35873,1165],{"class":701},[425,35875,35876,35878,35881,35883,35885,35887,35889,35891],{"class":427,"line":964},[425,35877,31600],{"class":691},[425,35879,35880],{"class":701},".f2",[425,35882,1204],{"class":1155},[425,35884,31786],{"class":701},[425,35886,35871],{"class":691},[425,35888,1527],{"class":701},[425,35890,35871],{"class":691},[425,35892,1165],{"class":701},[425,35894,35895,35897,35900,35902,35904,35906,35908,35910],{"class":427,"line":2733},[425,35896,31600],{"class":691},[425,35898,35899],{"class":701},".f3",[425,35901,1204],{"class":1155},[425,35903,31786],{"class":701},[425,35905,35871],{"class":691},[425,35907,1527],{"class":701},[425,35909,1594],{"class":691},[425,35911,1165],{"class":701},[425,35913,35914],{"class":427,"line":2750},[425,35915,3400],{"emptyLinePlaceholder":1084},[425,35917,35918],{"class":427,"line":2755},[425,35919,35920],{"class":1216},"    # 定义前向传播\n",[425,35922,35923,35925,35927],{"class":427,"line":2760},[425,35924,31556],{"class":1155},[425,35926,31848],{"class":431},[425,35928,31851],{"class":701},[425,35930,35931,35933,35935,35937,35940,35942],{"class":427,"line":2765},[425,35932,31856],{"class":701},[425,35934,1204],{"class":1155},[425,35936,31578],{"class":691},[425,35938,35939],{"class":701},".ReLu(",[425,35941,31578],{"class":691},[425,35943,31868],{"class":701},[425,35945,35946,35948,35950,35952],{"class":427,"line":2779},[425,35947,31856],{"class":701},[425,35949,1204],{"class":1155},[425,35951,31578],{"class":691},[425,35953,31879],{"class":701},[425,35955,35956,35958,35960,35962,35964,35966],{"class":427,"line":2784},[425,35957,31856],{"class":701},[425,35959,1204],{"class":1155},[425,35961,31578],{"class":691},[425,35963,35939],{"class":701},[425,35965,31578],{"class":691},[425,35967,31894],{"class":701},[425,35969,35970,35972,35974,35976],{"class":427,"line":3577},[425,35971,31856],{"class":701},[425,35973,1204],{"class":1155},[425,35975,31578],{"class":691},[425,35977,31905],{"class":701},[425,35979,35980,35982,35984,35986,35988,35990],{"class":427,"line":3591},[425,35981,31856],{"class":701},[425,35983,1204],{"class":1155},[425,35985,31578],{"class":691},[425,35987,35939],{"class":701},[425,35989,31578],{"class":691},[425,35991,35992],{"class":701},".c5(x))\n",[425,35994,35995,35997,35999,36001,36003,36005],{"class":427,"line":3599},[425,35996,31856],{"class":701},[425,35998,1204],{"class":1155},[425,36000,31578],{"class":691},[425,36002,35939],{"class":701},[425,36004,31578],{"class":691},[425,36006,36007],{"class":701},".c6(x))\n",[425,36009,36010,36012,36014,36016,36018,36020],{"class":427,"line":3604},[425,36011,31856],{"class":701},[425,36013,1204],{"class":1155},[425,36015,31578],{"class":691},[425,36017,35939],{"class":701},[425,36019,31578],{"class":691},[425,36021,36022],{"class":701},".c7(x))\n",[425,36024,36025,36027,36029,36031],{"class":427,"line":3610},[425,36026,31856],{"class":701},[425,36028,1204],{"class":1155},[425,36030,31578],{"class":691},[425,36032,36033],{"class":701},".s8(x)\n",[425,36035,36036],{"class":427,"line":3616},[425,36037,3400],{"emptyLinePlaceholder":1084},[425,36039,36040],{"class":427,"line":3621},[425,36041,36042],{"class":1216},"        # 展平加线性全连接层\n",[425,36044,36045,36047,36049,36051],{"class":427,"line":8948},[425,36046,31856],{"class":701},[425,36048,1204],{"class":1155},[425,36050,31578],{"class":691},[425,36052,31916],{"class":701},[425,36054,36055,36057,36059,36061,36063,36065],{"class":427,"line":8972},[425,36056,31856],{"class":701},[425,36058,1204],{"class":1155},[425,36060,31578],{"class":691},[425,36062,35939],{"class":701},[425,36064,31578],{"class":691},[425,36066,36067],{"class":701},".f1(x))\n",[425,36069,36070],{"class":427,"line":8977},[425,36071,36072],{"class":1216},"        # 还需要dropout对神经元随机进行失活\n",[425,36074,36075,36077,36079,36082,36085],{"class":427,"line":8983},[425,36076,31856],{"class":701},[425,36078,1204],{"class":1155},[425,36080,36081],{"class":701},"F.dropout(x,",[425,36083,36084],{"class":691},"0.5",[425,36086,1165],{"class":701},[425,36088,36089,36091,36093,36095,36097,36099],{"class":427,"line":9010},[425,36090,31856],{"class":701},[425,36092,1204],{"class":1155},[425,36094,31578],{"class":691},[425,36096,35939],{"class":701},[425,36098,31578],{"class":691},[425,36100,36101],{"class":701},".f2(x))\n",[425,36103,36104,36106,36108,36110,36112],{"class":427,"line":9015},[425,36105,31856],{"class":701},[425,36107,1204],{"class":1155},[425,36109,36081],{"class":701},[425,36111,36084],{"class":691},[425,36113,1165],{"class":701},[425,36115,36116],{"class":427,"line":9021},[425,36117,36118],{"class":1216},"        # 直接输出\n",[425,36120,36121,36123,36125,36127],{"class":427,"line":9033},[425,36122,31856],{"class":701},[425,36124,1204],{"class":1155},[425,36126,31578],{"class":691},[425,36128,36129],{"class":701},".f3(x)\n",[425,36131,36132],{"class":427,"line":9045},[425,36133,36134],{"class":1216},"        # 前向传播输出\n",[425,36136,36137,36139],{"class":427,"line":9057},[425,36138,15749],{"class":1155},[425,36140,31964],{"class":701},[425,36142,36143],{"class":427,"line":10715},[425,36144,36145],{"class":1216},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[425,36147,36148,36150,36152,36154,36156],{"class":427,"line":10740},[425,36149,2544],{"class":1155},[425,36151,31975],{"class":691},[425,36153,3949],{"class":1155},[425,36155,31980],{"class":435},[425,36157,4739],{"class":701},[425,36159,36160,36162,36164,36166,36168,36170,36172,36174,36176],{"class":427,"line":10763},[425,36161,31992],{"class":701},[425,36163,1204],{"class":1155},[425,36165,31206],{"class":701},[425,36167,31999],{"class":435},[425,36169,2706],{"class":1155},[425,36171,32004],{"class":701},[425,36173,2703],{"class":1155},[425,36175,31231],{"class":435},[425,36177,1165],{"class":701},[425,36179,36180],{"class":427,"line":10787},[425,36181,36182],{"class":1216},"    # 模型实例化，然后将实例化的模型放到设备中\n",[425,36184,36185,36187,36189],{"class":427,"line":10792},[425,36186,32044],{"class":701},[425,36188,1204],{"class":1155},[425,36190,36191],{"class":701},"AlexNet().to(device)\n",[425,36193,36194,36196,36198,36200,36202,36205,36207,36209],{"class":427,"line":10797},[425,36195,32054],{"class":691},[425,36197,32057],{"class":701},[425,36199,1367],{"class":691},[425,36201,1527],{"class":701},[425,36203,36204],{"class":691},"227",[425,36206,1527],{"class":701},[425,36208,36204],{"class":691},[425,36210,32070],{"class":701},[972,36212,36213],{"start":698},[450,36214,32083],{},[416,36216,36218],{"className":31133,"code":36217,"language":31135,"meta":395,"style":395},"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",[422,36219,36220,36226,36232,36242,36248,36258,36268,36278,36288,36298,36302,36313,36323,36327,36331,36335,36343,36355,36365,36381,36391,36423,36437,36447,36457,36461,36471,36485,36495,36505,36515,36521,36525,36529,36533,36537,36541,36549,36569,36573,36577,36581,36585,36589,36605,36609,36613,36621,36625,36629,36637,36641,36645,36649,36657,36661,36665,36669,36673,36681,36685,36693,36697,36705,36709,36717,36721,36729,36733,36737,36745,36749,36753,36757,36769,36793,36807,36811,36815,36819,36827,36831,36839,36843,36851,36855,36863,36867,36875,36879,36887,36891,36903,36907,36915,36919,36927,36931,36935,36939,36943,36951,36955,36971,36975,36983,36987,36991,36995,36999,37003,37007,37011,37027,37031,37043,37047,37059,37063,37075,37079,37087,37091,37099,37103,37107,37112,37118,37122,37131,37135,37152,37156,37165,37169,37187,37200,37205,37218,37222,37226,37234,37238,37242,37250,37254,37262,37266,37274,37278,37282,37324,37366,37370,37374,37390,37394,37410,37414,37418,37426,37430,37434,37446,37484,37489,37494,37503,37507,37521,37531,37537,37543,37549,37555,37559,37563,37569,37573,37577,37585,37589,37607,37611,37615,37619,37635,37639,37643,37647,37651,37655,37675,37695,37699,37703,37707,37715,37723,37727,37743,37763,37783,37787,37791,37799,37807,37811,37815,37819,37831,37835,37845,37853,37870],{"__ignoreMap":395},[425,36221,36222,36224],{"class":427,"line":428},[425,36223,31147],{"class":1155},[425,36225,32577],{"class":701},[425,36227,36228,36230],{"class":427,"line":698},[425,36229,31147],{"class":1155},[425,36231,32584],{"class":701},[425,36233,36234,36236,36238,36240],{"class":427,"line":710},[425,36235,31147],{"class":1155},[425,36237,32595],{"class":701},[425,36239,32138],{"class":1155},[425,36241,32600],{"class":701},[425,36243,36244,36246],{"class":427,"line":721},[425,36245,31147],{"class":1155},[425,36247,31150],{"class":701},[425,36249,36250,36252,36254,36256],{"class":427,"line":735},[425,36251,31492],{"class":1155},[425,36253,32170],{"class":701},[425,36255,31147],{"class":1155},[425,36257,32617],{"class":701},[425,36259,36260,36262,36264,36266],{"class":427,"line":743},[425,36261,31492],{"class":1155},[425,36263,32123],{"class":701},[425,36265,31147],{"class":1155},[425,36267,32128],{"class":701},[425,36269,36270,36272,36274,36276],{"class":427,"line":751},[425,36271,31492],{"class":1155},[425,36273,32153],{"class":701},[425,36275,31147],{"class":1155},[425,36277,32158],{"class":701},[425,36279,36280,36282,36284,36286],{"class":427,"line":759},[425,36281,31147],{"class":1155},[425,36283,32170],{"class":701},[425,36285,32138],{"class":1155},[425,36287,32175],{"class":701},[425,36289,36290,36292,36294,36296],{"class":427,"line":770},[425,36291,31147],{"class":1155},[425,36293,32187],{"class":701},[425,36295,32138],{"class":1155},[425,36297,32192],{"class":701},[425,36299,36300],{"class":427,"line":780},[425,36301,32662],{"class":1216},[425,36303,36304,36306,36308,36310],{"class":427,"line":790},[425,36305,31492],{"class":1155},[425,36307,32669],{"class":701},[425,36309,31147],{"class":1155},[425,36311,36312],{"class":701}," AlexNet\n",[425,36314,36315,36317,36319,36321],{"class":427,"line":805},[425,36316,31492],{"class":1155},[425,36318,31495],{"class":701},[425,36320,31147],{"class":1155},[425,36322,31500],{"class":701},[425,36324,36325],{"class":427,"line":818},[425,36326,3400],{"emptyLinePlaceholder":1084},[425,36328,36329],{"class":427,"line":831},[425,36330,3400],{"emptyLinePlaceholder":1084},[425,36332,36333],{"class":427,"line":841},[425,36334,32697],{"class":1216},[425,36336,36337,36339,36341],{"class":427,"line":852},[425,36338,32702],{"class":1155},[425,36340,32705],{"class":431},[425,36342,32708],{"class":701},[425,36344,36345,36347,36349,36351,36353],{"class":427,"line":862},[425,36346,32713],{"class":701},[425,36348,1204],{"class":1155},[425,36350,32210],{"class":701},[425,36352,32218],{"class":435},[425,36354,32221],{"class":701},[425,36356,36357,36359,36361,36363],{"class":427,"line":878},[425,36358,32726],{"class":6216},[425,36360,1204],{"class":1155},[425,36362,32231],{"class":691},[425,36364,32221],{"class":701},[425,36366,36367,36369,36371,36373,36375,36377,36379],{"class":427,"line":914},[425,36368,32737],{"class":6216},[425,36370,1204],{"class":1155},[425,36372,32248],{"class":701},[425,36374,32251],{"class":6216},[425,36376,1204],{"class":1155},[425,36378,36204],{"class":691},[425,36380,32259],{"class":701},[425,36382,36383,36385,36387,36389],{"class":427,"line":943},[425,36384,32754],{"class":6216},[425,36386,1204],{"class":1155},[425,36388,32231],{"class":691},[425,36390,1165],{"class":701},[425,36392,36393,36395,36397,36399,36401,36403,36405,36407,36409,36411,36413,36415,36417,36419,36421],{"class":427,"line":956},[425,36394,32765],{"class":701},[425,36396,1204],{"class":1155},[425,36398,32770],{"class":701},[425,36400,32773],{"class":691},[425,36402,1159],{"class":701},[425,36404,32778],{"class":691},[425,36406,1603],{"class":1155},[425,36408,8358],{"class":691},[425,36410,32785],{"class":701},[425,36412,32773],{"class":691},[425,36414,1159],{"class":701},[425,36416,32792],{"class":691},[425,36418,1603],{"class":1155},[425,36420,8358],{"class":691},[425,36422,32799],{"class":701},[425,36424,36425,36427,36429,36431,36433,36435],{"class":427,"line":964},[425,36426,32804],{"class":701},[425,36428,1204],{"class":1155},[425,36430,32809],{"class":701},[425,36432,32292],{"class":6216},[425,36434,1204],{"class":1155},[425,36436,32297],{"class":701},[425,36438,36439,36441,36443,36445],{"class":427,"line":2733},[425,36440,32820],{"class":6216},[425,36442,1204],{"class":1155},[425,36444,32825],{"class":691},[425,36446,32221],{"class":701},[425,36448,36449,36451,36453,36455],{"class":427,"line":2750},[425,36450,32832],{"class":6216},[425,36452,1204],{"class":1155},[425,36454,32231],{"class":691},[425,36456,32221],{"class":701},[425,36458,36459],{"class":427,"line":2755},[425,36460,32843],{"class":1216},[425,36462,36463,36465,36467,36469],{"class":427,"line":2760},[425,36464,32848],{"class":6216},[425,36466,1204],{"class":1155},[425,36468,1544],{"class":691},[425,36470,1165],{"class":701},[425,36472,36473,36475,36477,36479,36481,36483],{"class":427,"line":2765},[425,36474,32859],{"class":701},[425,36476,1204],{"class":1155},[425,36478,32289],{"class":701},[425,36480,32292],{"class":6216},[425,36482,1204],{"class":1155},[425,36484,32870],{"class":701},[425,36486,36487,36489,36491,36493],{"class":427,"line":2779},[425,36488,32875],{"class":6216},[425,36490,1204],{"class":1155},[425,36492,32825],{"class":691},[425,36494,32221],{"class":701},[425,36496,36497,36499,36501,36503],{"class":427,"line":2784},[425,36498,32886],{"class":6216},[425,36500,1204],{"class":1155},[425,36502,32231],{"class":691},[425,36504,32221],{"class":701},[425,36506,36507,36509,36511,36513],{"class":427,"line":3577},[425,36508,32897],{"class":6216},[425,36510,1204],{"class":1155},[425,36512,1544],{"class":691},[425,36514,1165],{"class":701},[425,36516,36517,36519],{"class":427,"line":3591},[425,36518,5090],{"class":1155},[425,36520,32910],{"class":701},[425,36522,36523],{"class":427,"line":3599},[425,36524,3400],{"emptyLinePlaceholder":1084},[425,36526,36527],{"class":427,"line":3604},[425,36528,32919],{"class":1216},[425,36530,36531],{"class":427,"line":3610},[425,36532,32924],{"class":1216},[425,36534,36535],{"class":427,"line":3616},[425,36536,3400],{"emptyLinePlaceholder":1084},[425,36538,36539],{"class":427,"line":3621},[425,36540,32933],{"class":1216},[425,36542,36543,36545,36547],{"class":427,"line":8948},[425,36544,32702],{"class":1155},[425,36546,32940],{"class":431},[425,36548,32943],{"class":701},[425,36550,36551,36553,36555,36557,36559,36561,36563,36565,36567],{"class":427,"line":8972},[425,36552,31992],{"class":701},[425,36554,1204],{"class":1155},[425,36556,31206],{"class":701},[425,36558,31999],{"class":435},[425,36560,2706],{"class":1155},[425,36562,32004],{"class":701},[425,36564,2703],{"class":1155},[425,36566,32962],{"class":435},[425,36568,1165],{"class":701},[425,36570,36571],{"class":427,"line":8977},[425,36572,3400],{"emptyLinePlaceholder":1084},[425,36574,36575],{"class":427,"line":8983},[425,36576,3400],{"emptyLinePlaceholder":1084},[425,36578,36579],{"class":427,"line":9010},[425,36580,32977],{"class":1216},[425,36582,36583],{"class":427,"line":9015},[425,36584,32982],{"class":1216},[425,36586,36587],{"class":427,"line":9021},[425,36588,32987],{"class":1216},[425,36590,36591,36593,36595,36597,36599,36601,36603],{"class":427,"line":9033},[425,36592,32992],{"class":701},[425,36594,1204],{"class":1155},[425,36596,32997],{"class":701},[425,36598,33000],{"class":6216},[425,36600,1204],{"class":1155},[425,36602,33005],{"class":691},[425,36604,1165],{"class":701},[425,36606,36607],{"class":427,"line":9045},[425,36608,3400],{"emptyLinePlaceholder":1084},[425,36610,36611],{"class":427,"line":9057},[425,36612,33016],{"class":1216},[425,36614,36615,36617,36619],{"class":427,"line":10715},[425,36616,33021],{"class":701},[425,36618,1204],{"class":1155},[425,36620,33026],{"class":701},[425,36622,36623],{"class":427,"line":10740},[425,36624,3400],{"emptyLinePlaceholder":1084},[425,36626,36627],{"class":427,"line":10763},[425,36628,33035],{"class":1216},[425,36630,36631,36633,36635],{"class":427,"line":10787},[425,36632,32044],{"class":701},[425,36634,1204],{"class":1155},[425,36636,33044],{"class":701},[425,36638,36639],{"class":427,"line":10792},[425,36640,33049],{"class":1216},[425,36642,36643],{"class":427,"line":10797},[425,36644,33054],{"class":1216},[425,36646,36647],{"class":427,"line":10802},[425,36648,33059],{"class":1216},[425,36650,36651,36653,36655],{"class":427,"line":10811},[425,36652,33064],{"class":701},[425,36654,1204],{"class":1155},[425,36656,33069],{"class":701},[425,36658,36659],{"class":427,"line":10816},[425,36660,3400],{"emptyLinePlaceholder":1084},[425,36662,36663],{"class":427,"line":10822},[425,36664,3400],{"emptyLinePlaceholder":1084},[425,36666,36667],{"class":427,"line":10843},[425,36668,33082],{"class":1216},[425,36670,36671],{"class":427,"line":10849},[425,36672,33087],{"class":1216},[425,36674,36675,36677,36679],{"class":427,"line":10863},[425,36676,33092],{"class":701},[425,36678,1204],{"class":1155},[425,36680,33097],{"class":691},[425,36682,36683],{"class":427,"line":10869},[425,36684,33102],{"class":1216},[425,36686,36687,36689,36691],{"class":427,"line":10896},[425,36688,33107],{"class":701},[425,36690,1204],{"class":1155},[425,36692,33112],{"class":701},[425,36694,36695],{"class":427,"line":10905},[425,36696,33117],{"class":1216},[425,36698,36699,36701,36703],{"class":427,"line":10911},[425,36700,33122],{"class":701},[425,36702,1204],{"class":1155},[425,36704,33112],{"class":701},[425,36706,36707],{"class":427,"line":10919},[425,36708,33131],{"class":1216},[425,36710,36711,36713,36715],{"class":427,"line":10924},[425,36712,33136],{"class":701},[425,36714,1204],{"class":1155},[425,36716,33112],{"class":701},[425,36718,36719],{"class":427,"line":17601},[425,36720,33145],{"class":1216},[425,36722,36723,36725,36727],{"class":427,"line":17607},[425,36724,33150],{"class":701},[425,36726,1204],{"class":1155},[425,36728,33112],{"class":701},[425,36730,36731],{"class":427,"line":17630},[425,36732,3400],{"emptyLinePlaceholder":1084},[425,36734,36735],{"class":427,"line":17636},[425,36736,33163],{"class":1216},[425,36738,36739,36741,36743],{"class":427,"line":17659},[425,36740,33168],{"class":701},[425,36742,1204],{"class":1155},[425,36744,33173],{"class":701},[425,36746,36747],{"class":427,"line":17673},[425,36748,3400],{"emptyLinePlaceholder":1084},[425,36750,36751],{"class":427,"line":17693},[425,36752,3400],{"emptyLinePlaceholder":1084},[425,36754,36755],{"class":427,"line":17699},[425,36756,33186],{"class":1216},[425,36758,36759,36761,36763,36765,36767],{"class":427,"line":17710},[425,36760,4201],{"class":1155},[425,36762,33193],{"class":701},[425,36764,27034],{"class":1155},[425,36766,33198],{"class":691},[425,36768,33201],{"class":701},[425,36770,36771,36773,36775,36777,36779,36781,36783,36785,36787,36789,36791],{"class":427,"line":17733},[425,36772,33206],{"class":691},[425,36774,1159],{"class":701},[425,36776,33211],{"class":435},[425,36778,33214],{"class":691},[425,36780,1732],{"class":435},[425,36782,33214],{"class":691},[425,36784,1400],{"class":435},[425,36786,33223],{"class":701},[425,36788,1680],{"class":1155},[425,36790,1367],{"class":691},[425,36792,31252],{"class":701},[425,36794,36795,36797,36799,36801,36803,36805],{"class":427,"line":17755},[425,36796,33206],{"class":691},[425,36798,1159],{"class":701},[425,36800,33238],{"class":435},[425,36802,1603],{"class":1155},[425,36804,1594],{"class":691},[425,36806,1165],{"class":701},[425,36808,36809],{"class":427,"line":17760},[425,36810,3400],{"emptyLinePlaceholder":1084},[425,36812,36813],{"class":427,"line":17766},[425,36814,33253],{"class":1216},[425,36816,36817],{"class":427,"line":17780},[425,36818,33258],{"class":1216},[425,36820,36821,36823,36825],{"class":427,"line":17793},[425,36822,33263],{"class":701},[425,36824,1204],{"class":1155},[425,36826,33097],{"class":691},[425,36828,36829],{"class":427,"line":17798},[425,36830,33272],{"class":1216},[425,36832,36833,36835,36837],{"class":427,"line":17812},[425,36834,33277],{"class":701},[425,36836,1204],{"class":1155},[425,36838,4085],{"class":691},[425,36840,36841],{"class":427,"line":17817},[425,36842,33286],{"class":1216},[425,36844,36845,36847,36849],{"class":427,"line":17823},[425,36846,33291],{"class":701},[425,36848,1204],{"class":1155},[425,36850,33097],{"class":691},[425,36852,36853],{"class":427,"line":17828},[425,36854,33300],{"class":1216},[425,36856,36857,36859,36861],{"class":427,"line":17842},[425,36858,33305],{"class":701},[425,36860,1204],{"class":1155},[425,36862,4085],{"class":691},[425,36864,36865],{"class":427,"line":17847},[425,36866,33314],{"class":1216},[425,36868,36869,36871,36873],{"class":427,"line":17852},[425,36870,33319],{"class":701},[425,36872,1204],{"class":1155},[425,36874,4085],{"class":691},[425,36876,36877],{"class":427,"line":17866},[425,36878,33328],{"class":1216},[425,36880,36881,36883,36885],{"class":427,"line":17878},[425,36882,33333],{"class":701},[425,36884,1204],{"class":1155},[425,36886,4085],{"class":691},[425,36888,36889],{"class":427,"line":17883},[425,36890,33342],{"class":1216},[425,36892,36893,36895,36897,36899,36901],{"class":427,"line":17896},[425,36894,4403],{"class":1155},[425,36896,32356],{"class":701},[425,36898,27034],{"class":1155},[425,36900,32361],{"class":691},[425,36902,33355],{"class":701},[425,36904,36905],{"class":427,"line":17901},[425,36906,33360],{"class":1216},[425,36908,36909,36911,36913],{"class":427,"line":17906},[425,36910,33365],{"class":701},[425,36912,1204],{"class":1155},[425,36914,33370],{"class":701},[425,36916,36917],{"class":427,"line":17911},[425,36918,33375],{"class":1216},[425,36920,36921,36923,36925],{"class":427,"line":17924},[425,36922,33380],{"class":701},[425,36924,1204],{"class":1155},[425,36926,33385],{"class":701},[425,36928,36929],{"class":427,"line":17929},[425,36930,33391],{"class":1216},[425,36932,36933],{"class":427,"line":33388},[425,36934,33397],{"class":701},[425,36936,36937],{"class":427,"line":33394},[425,36938,33403],{"class":1216},[425,36940,36941],{"class":427,"line":33400},[425,36942,33409],{"class":1216},[425,36944,36945,36947,36949],{"class":427,"line":33406},[425,36946,33415],{"class":701},[425,36948,1204],{"class":1155},[425,36950,33420],{"class":701},[425,36952,36953],{"class":427,"line":33412},[425,36954,33426],{"class":1216},[425,36956,36957,36959,36961,36963,36965,36967,36969],{"class":427,"line":33423},[425,36958,33432],{"class":701},[425,36960,1204],{"class":1155},[425,36962,33437],{"class":701},[425,36964,33440],{"class":6216},[425,36966,1204],{"class":1155},[425,36968,1367],{"class":691},[425,36970,1165],{"class":701},[425,36972,36973],{"class":427,"line":33429},[425,36974,33452],{"class":1216},[425,36976,36977,36979,36981],{"class":427,"line":33449},[425,36978,33458],{"class":701},[425,36980,1204],{"class":1155},[425,36982,33463],{"class":701},[425,36984,36985],{"class":427,"line":33455},[425,36986,33469],{"class":1216},[425,36988,36989],{"class":427,"line":33466},[425,36990,33475],{"class":701},[425,36992,36993],{"class":427,"line":33472},[425,36994,33481],{"class":1216},[425,36996,36997],{"class":427,"line":33478},[425,36998,33487],{"class":701},[425,37000,37001],{"class":427,"line":33484},[425,37002,33493],{"class":1216},[425,37004,37005],{"class":427,"line":33490},[425,37006,33499],{"class":701},[425,37008,37009],{"class":427,"line":33496},[425,37010,33505],{"class":1216},[425,37012,37013,37015,37017,37019,37021,37023,37025],{"class":427,"line":33502},[425,37014,33511],{"class":701},[425,37016,10476],{"class":1155},[425,37018,33516],{"class":701},[425,37020,1603],{"class":1155},[425,37022,33521],{"class":701},[425,37024,1341],{"class":691},[425,37026,1165],{"class":701},[425,37028,37029],{"class":427,"line":33508},[425,37030,33531],{"class":1216},[425,37032,37033,37035,37037,37039,37041],{"class":427,"line":33528},[425,37034,33537],{"class":701},[425,37036,10476],{"class":1155},[425,37038,33542],{"class":701},[425,37040,3949],{"class":1155},[425,37042,33547],{"class":701},[425,37044,37045],{"class":427,"line":33534},[425,37046,33553],{"class":1216},[425,37048,37049,37051,37053,37055,37057],{"class":427,"line":33550},[425,37050,33559],{"class":701},[425,37052,10476],{"class":1155},[425,37054,33521],{"class":701},[425,37056,1341],{"class":691},[425,37058,1165],{"class":701},[425,37060,37061],{"class":427,"line":33556},[425,37062,33573],{"class":1216},[425,37064,37065,37067,37069,37071,37073],{"class":427,"line":33570},[425,37066,4403],{"class":1155},[425,37068,33581],{"class":701},[425,37070,27034],{"class":1155},[425,37072,32361],{"class":691},[425,37074,33588],{"class":701},[425,37076,37077],{"class":427,"line":33576},[425,37078,33594],{"class":1216},[425,37080,37081,37083,37085],{"class":427,"line":33591},[425,37082,33365],{"class":701},[425,37084,1204],{"class":1155},[425,37086,33370],{"class":701},[425,37088,37089],{"class":427,"line":33597},[425,37090,33609],{"class":1216},[425,37092,37093,37095,37097],{"class":427,"line":33606},[425,37094,33380],{"class":701},[425,37096,1204],{"class":1155},[425,37098,33385],{"class":701},[425,37100,37101],{"class":427,"line":33612},[425,37102,33624],{"class":1216},[425,37104,37105],{"class":427,"line":33621},[425,37106,33630],{"class":701},[425,37108,37109],{"class":427,"line":33627},[425,37110,37111],{"class":1216},"            # 验证时不计算梯度以节省内存\u002F计算\n",[425,37113,37114,37116],{"class":427,"line":33633},[425,37115,33636],{"class":1155},[425,37117,33639],{"class":701},[425,37119,37120],{"class":427,"line":33642},[425,37121,33645],{"class":1216},[425,37123,37124,37127,37129],{"class":427,"line":33648},[425,37125,37126],{"class":701},"                output",[425,37128,1204],{"class":1155},[425,37130,33420],{"class":701},[425,37132,37133],{"class":427,"line":33659},[425,37134,33662],{"class":1216},[425,37136,37137,37140,37142,37144,37146,37148,37150],{"class":427,"line":33665},[425,37138,37139],{"class":701},"                pre_lab",[425,37141,1204],{"class":1155},[425,37143,33437],{"class":701},[425,37145,33440],{"class":6216},[425,37147,1204],{"class":1155},[425,37149,1367],{"class":691},[425,37151,1165],{"class":701},[425,37153,37154],{"class":427,"line":33684},[425,37155,33687],{"class":1216},[425,37157,37158,37161,37163],{"class":427,"line":33690},[425,37159,37160],{"class":701},"                val_batch_loss",[425,37162,1204],{"class":1155},[425,37164,33463],{"class":701},[425,37166,37167],{"class":427,"line":33701},[425,37168,33704],{"class":1216},[425,37170,37171,37174,37176,37179,37181,37183,37185],{"class":427,"line":33707},[425,37172,37173],{"class":701},"                val_loss",[425,37175,10476],{"class":1155},[425,37177,37178],{"class":701},"val_batch_loss.item()",[425,37180,1603],{"class":1155},[425,37182,33521],{"class":701},[425,37184,1341],{"class":691},[425,37186,1165],{"class":701},[425,37188,37189,37192,37194,37196,37198],{"class":427,"line":33727},[425,37190,37191],{"class":701},"                val_corrects",[425,37193,10476],{"class":1155},[425,37195,33542],{"class":701},[425,37197,3949],{"class":1155},[425,37199,33547],{"class":701},[425,37201,37202],{"class":427,"line":33743},[425,37203,37204],{"class":1216},"            # 当前用于验证的样本数量\n",[425,37206,37207,37210,37212,37214,37216],{"class":427,"line":33749},[425,37208,37209],{"class":701},"            val_num",[425,37211,10476],{"class":1155},[425,37213,33521],{"class":701},[425,37215,1341],{"class":691},[425,37217,1165],{"class":701},[425,37219,37220],{"class":427,"line":33763},[425,37221,33766],{"class":1216},[425,37223,37224],{"class":427,"line":33769},[425,37225,33772],{"class":1216},[425,37227,37228,37230,37232],{"class":427,"line":33775},[425,37229,33778],{"class":701},[425,37231,1732],{"class":1155},[425,37233,33783],{"class":701},[425,37235,37236],{"class":427,"line":33786},[425,37237,33789],{"class":1216},[425,37239,37240],{"class":427,"line":33792},[425,37241,33795],{"class":1216},[425,37243,37244,37246,37248],{"class":427,"line":33798},[425,37245,33801],{"class":701},[425,37247,1732],{"class":1155},[425,37249,33783],{"class":701},[425,37251,37252],{"class":427,"line":33808},[425,37253,33811],{"class":1216},[425,37255,37256,37258,37260],{"class":427,"line":33814},[425,37257,33817],{"class":701},[425,37259,1732],{"class":1155},[425,37261,33822],{"class":701},[425,37263,37264],{"class":427,"line":33825},[425,37265,33828],{"class":1216},[425,37267,37268,37270,37272],{"class":427,"line":33831},[425,37269,33834],{"class":701},[425,37271,1732],{"class":1155},[425,37273,33822],{"class":701},[425,37275,37276],{"class":427,"line":33841},[425,37277,3400],{"emptyLinePlaceholder":1084},[425,37279,37280],{"class":427,"line":33846},[425,37281,33849],{"class":1216},[425,37283,37284,37286,37288,37290,37292,37294,37296,37298,37300,37302,37304,37306,37308,37310,37312,37314,37316,37318,37320,37322],{"class":427,"line":33852},[425,37285,33206],{"class":691},[425,37287,1159],{"class":701},[425,37289,4592],{"class":435},[425,37291,33214],{"class":691},[425,37293,33863],{"class":435},[425,37295,2043],{"class":691},[425,37297,33868],{"class":1155},[425,37299,2093],{"class":691},[425,37301,33873],{"class":435},[425,37303,2043],{"class":691},[425,37305,33868],{"class":1155},[425,37307,2093],{"class":691},[425,37309,4592],{"class":435},[425,37311,33884],{"class":701},[425,37313,1680],{"class":1155},[425,37315,1367],{"class":691},[425,37317,33891],{"class":701},[425,37319,1680],{"class":1155},[425,37321,1367],{"class":691},[425,37323,33898],{"class":701},[425,37325,37326,37328,37330,37332,37334,37336,37338,37340,37342,37344,37346,37348,37350,37352,37354,37356,37358,37360,37362,37364],{"class":427,"line":33901},[425,37327,33206],{"class":691},[425,37329,1159],{"class":701},[425,37331,4592],{"class":435},[425,37333,33214],{"class":691},[425,37335,33912],{"class":435},[425,37337,2043],{"class":691},[425,37339,33868],{"class":1155},[425,37341,2093],{"class":691},[425,37343,33921],{"class":435},[425,37345,2043],{"class":691},[425,37347,33868],{"class":1155},[425,37349,2093],{"class":691},[425,37351,4592],{"class":435},[425,37353,33932],{"class":701},[425,37355,1680],{"class":1155},[425,37357,1367],{"class":691},[425,37359,33939],{"class":701},[425,37361,1680],{"class":1155},[425,37363,1367],{"class":691},[425,37365,33898],{"class":701},[425,37367,37368],{"class":427,"line":33948},[425,37369,3400],{"emptyLinePlaceholder":1084},[425,37371,37372],{"class":427,"line":33953},[425,37373,33956],{"class":1216},[425,37375,37376,37378,37380,37382,37384,37386,37388],{"class":427,"line":33959},[425,37377,3497],{"class":1155},[425,37379,33964],{"class":701},[425,37381,1680],{"class":1155},[425,37383,1367],{"class":691},[425,37385,2087],{"class":701},[425,37387,2107],{"class":1155},[425,37389,33975],{"class":701},[425,37391,37392],{"class":427,"line":33978},[425,37393,33981],{"class":1216},[425,37395,37396,37398,37400,37402,37404,37406,37408],{"class":427,"line":33984},[425,37397,33987],{"class":701},[425,37399,1198],{"class":691},[425,37401,1204],{"class":1155},[425,37403,33994],{"class":701},[425,37405,1680],{"class":1155},[425,37407,1367],{"class":691},[425,37409,34001],{"class":701},[425,37411,37412],{"class":427,"line":34004},[425,37413,34007],{"class":1216},[425,37415,37416],{"class":427,"line":34010},[425,37417,34013],{"class":1216},[425,37419,37420,37422,37424],{"class":427,"line":34016},[425,37421,34019],{"class":701},[425,37423,1204],{"class":1155},[425,37425,33069],{"class":701},[425,37427,37428],{"class":427,"line":34026},[425,37429,3400],{"emptyLinePlaceholder":1084},[425,37431,37432],{"class":427,"line":34031},[425,37433,34034],{"class":1216},[425,37435,37436,37438,37440,37442,37444],{"class":427,"line":34037},[425,37437,34040],{"class":701},[425,37439,1204],{"class":1155},[425,37441,34045],{"class":701},[425,37443,1680],{"class":1155},[425,37445,34050],{"class":701},[425,37447,37448,37450,37452,37454,37456,37458,37460,37462,37464,37466,37468,37470,37472,37474,37476,37478,37480,37482],{"class":427,"line":34053},[425,37449,33206],{"class":691},[425,37451,1159],{"class":701},[425,37453,34060],{"class":435},[425,37455,2043],{"class":691},[425,37457,34065],{"class":1155},[425,37459,2093],{"class":691},[425,37461,1692],{"class":435},[425,37463,2043],{"class":691},[425,37465,34065],{"class":1155},[425,37467,2093],{"class":691},[425,37469,34078],{"class":435},[425,37471,34081],{"class":701},[425,37473,34084],{"class":1155},[425,37475,2054],{"class":691},[425,37477,34089],{"class":701},[425,37479,1477],{"class":1155},[425,37481,2054],{"class":691},[425,37483,31252],{"class":701},[425,37485,37486],{"class":427,"line":34098},[425,37487,37488],{"class":1216},"    # 选择最优参数并保存\n",[425,37490,37491],{"class":427,"line":34104},[425,37492,37493],{"class":1216},"    # 保存最佳模型权重字典\n",[425,37495,37496,37499,37501],{"class":427,"line":34110},[425,37497,37498],{"class":701},"    torch.save(best_model_wts,",[425,37500,34122],{"class":435},[425,37502,1165],{"class":701},[425,37504,37505],{"class":427,"line":34116},[425,37506,34142],{"class":1216},[425,37508,37509,37511,37513,37515,37517,37519],{"class":427,"line":34127},[425,37510,34148],{"class":701},[425,37512,1204],{"class":1155},[425,37514,34153],{"class":701},[425,37516,34156],{"class":6216},[425,37518,1204],{"class":1155},[425,37520,2559],{"class":701},[425,37522,37523,37525,37527,37529],{"class":427,"line":34133},[425,37524,34166],{"class":435},[425,37526,948],{"class":701},[425,37528,34171],{"class":691},[425,37530,34174],{"class":701},[425,37532,37533,37535],{"class":427,"line":34139},[425,37534,34180],{"class":435},[425,37536,34183],{"class":701},[425,37538,37539,37541],{"class":427,"line":34145},[425,37540,34189],{"class":435},[425,37542,34192],{"class":701},[425,37544,37545,37547],{"class":427,"line":34163},[425,37546,34198],{"class":435},[425,37548,34201],{"class":701},[425,37550,37551,37553],{"class":427,"line":34177},[425,37552,34207],{"class":435},[425,37554,34210],{"class":701},[425,37556,37557],{"class":427,"line":34186},[425,37558,34216],{"class":701},[425,37560,37561],{"class":427,"line":34195},[425,37562,34222],{"class":1216},[425,37564,37565,37567],{"class":427,"line":34204},[425,37566,5090],{"class":1155},[425,37568,34230],{"class":701},[425,37570,37571],{"class":427,"line":34213},[425,37572,3400],{"emptyLinePlaceholder":1084},[425,37574,37575],{"class":427,"line":34219},[425,37576,34241],{"class":1216},[425,37578,37579,37581,37583],{"class":427,"line":34225},[425,37580,32702],{"class":1155},[425,37582,34249],{"class":431},[425,37584,34252],{"class":701},[425,37586,37587],{"class":427,"line":34233},[425,37588,34258],{"class":1216},[425,37590,37591,37593,37595,37597,37599,37601,37603,37605],{"class":427,"line":34238},[425,37592,34264],{"class":701},[425,37594,32448],{"class":6216},[425,37596,1204],{"class":1155},[425,37598,1159],{"class":701},[425,37600,1646],{"class":691},[425,37602,1527],{"class":701},[425,37604,1442],{"class":691},[425,37606,31252],{"class":701},[425,37608,37609],{"class":427,"line":34244},[425,37610,34284],{"class":1216},[425,37612,37613],{"class":427,"line":34255},[425,37614,34290],{"class":1216},[425,37616,37617],{"class":427,"line":34261},[425,37618,34296],{"class":1216},[425,37620,37621,37623,37625,37627,37629,37631,37633],{"class":427,"line":34281},[425,37622,32482],{"class":701},[425,37624,1367],{"class":691},[425,37626,1527],{"class":701},[425,37628,1235],{"class":691},[425,37630,1527],{"class":701},[425,37632,1367],{"class":691},[425,37634,1165],{"class":701},[425,37636,37637],{"class":427,"line":34287},[425,37638,34319],{"class":1216},[425,37640,37641],{"class":427,"line":34293},[425,37642,34325],{"class":1216},[425,37644,37645],{"class":427,"line":34299},[425,37646,34331],{"class":1216},[425,37648,37649],{"class":427,"line":34316},[425,37650,34337],{"class":1216},[425,37652,37653],{"class":427,"line":34322},[425,37654,34343],{"class":1216},[425,37656,37657,37659,37661,37663,37665,37667,37669,37671,37673],{"class":427,"line":34328},[425,37658,34349],{"class":701},[425,37660,34352],{"class":435},[425,37662,34355],{"class":701},[425,37664,34358],{"class":435},[425,37666,1527],{"class":701},[425,37668,34363],{"class":6216},[425,37670,1204],{"class":1155},[425,37672,34368],{"class":435},[425,37674,1165],{"class":701},[425,37676,37677,37679,37681,37683,37685,37687,37689,37691,37693],{"class":427,"line":34334},[425,37678,34349],{"class":701},[425,37680,34352],{"class":435},[425,37682,34380],{"class":701},[425,37684,34383],{"class":435},[425,37686,1527],{"class":701},[425,37688,34363],{"class":6216},[425,37690,1204],{"class":1155},[425,37692,34392],{"class":435},[425,37694,1165],{"class":701},[425,37696,37697],{"class":427,"line":34340},[425,37698,34400],{"class":1216},[425,37700,37701],{"class":427,"line":34346},[425,37702,34406],{"class":701},[425,37704,37705],{"class":427,"line":34373},[425,37706,34412],{"class":1216},[425,37708,37709,37711,37713],{"class":427,"line":34397},[425,37710,34418],{"class":701},[425,37712,34421],{"class":435},[425,37714,1165],{"class":701},[425,37716,37717,37719,37721],{"class":427,"line":34403},[425,37718,34429],{"class":701},[425,37720,34432],{"class":435},[425,37722,1165],{"class":701},[425,37724,37725],{"class":427,"line":34409},[425,37726,34440],{"class":1216},[425,37728,37729,37731,37733,37735,37737,37739,37741],{"class":427,"line":34415},[425,37730,32482],{"class":701},[425,37732,1367],{"class":691},[425,37734,1527],{"class":701},[425,37736,1235],{"class":691},[425,37738,1527],{"class":701},[425,37740,1235],{"class":691},[425,37742,1165],{"class":701},[425,37744,37745,37747,37749,37751,37753,37755,37757,37759,37761],{"class":427,"line":34426},[425,37746,34349],{"class":701},[425,37748,34352],{"class":435},[425,37750,34467],{"class":701},[425,37752,34358],{"class":435},[425,37754,1527],{"class":701},[425,37756,34363],{"class":6216},[425,37758,1204],{"class":1155},[425,37760,34478],{"class":435},[425,37762,1165],{"class":701},[425,37764,37765,37767,37769,37771,37773,37775,37777,37779,37781],{"class":427,"line":34437},[425,37766,34349],{"class":701},[425,37768,34352],{"class":435},[425,37770,34490],{"class":701},[425,37772,34383],{"class":435},[425,37774,1527],{"class":701},[425,37776,34363],{"class":6216},[425,37778,1204],{"class":1155},[425,37780,34501],{"class":435},[425,37782,1165],{"class":701},[425,37784,37785],{"class":427,"line":34443},[425,37786,34509],{"class":1216},[425,37788,37789],{"class":427,"line":34460},[425,37790,34406],{"class":701},[425,37792,37793,37795,37797],{"class":427,"line":34483},[425,37794,34418],{"class":701},[425,37796,34352],{"class":435},[425,37798,1165],{"class":701},[425,37800,37801,37803,37805],{"class":427,"line":34506},[425,37802,34429],{"class":701},[425,37804,34531],{"class":435},[425,37806,1165],{"class":701},[425,37808,37809],{"class":427,"line":34512},[425,37810,34539],{"class":701},[425,37812,37813],{"class":427,"line":34517},[425,37814,3400],{"emptyLinePlaceholder":1084},[425,37816,37817],{"class":427,"line":34526},[425,37818,34550],{"class":1216},[425,37820,37821,37823,37825,37827,37829],{"class":427,"line":34536},[425,37822,2544],{"class":1155},[425,37824,31975],{"class":691},[425,37826,3949],{"class":1155},[425,37828,31980],{"class":435},[425,37830,4739],{"class":701},[425,37832,37833],{"class":427,"line":34542},[425,37834,34569],{"class":1216},[425,37836,37837,37840,37842],{"class":427,"line":34547},[425,37838,37839],{"class":701},"    AlexNet",[425,37841,1204],{"class":1155},[425,37843,37844],{"class":701},"AlexNet()\n",[425,37846,37847,37849,37851],{"class":427,"line":34553},[425,37848,34586],{"class":701},[425,37850,1204],{"class":1155},[425,37852,34591],{"class":701},[425,37854,37855,37857,37859,37862,37864,37866,37868],{"class":427,"line":34566},[425,37856,34148],{"class":701},[425,37858,1204],{"class":1155},[425,37860,37861],{"class":701},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[425,37863,34604],{"class":6216},[425,37865,1204],{"class":1155},[425,37867,1848],{"class":691},[425,37869,1165],{"class":701},[425,37871,37872],{"class":427,"line":34572},[425,37873,34616],{"class":701},[972,37875,37876],{"start":710},[450,37877,34629],{},[416,37879,37881],{"className":31133,"code":37880,"language":31135,"meta":395,"style":395},"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",[422,37882,37883,37889,37899,37909,37919,37923,37933,37943,37954,37958,37962,37966,37974,37990,38000,38016,38026,38040,38044,38054,38064,38074,38080,38084,38088,38096,38100,38116,38124,38128,38132,38140,38148,38152,38156,38160,38164,38170,38174,38184,38192,38200,38204,38208,38212,38220,38224,38240,38244,38248,38252,38264,38268,38280,38284,38288,38300,38304,38314,38318,38322,38334,38338,38346,38350,38354,38362,38366,38374,38378,38382,38386,38390,38394,38410,38418,38422,38426,38474,38480,38484,38494,38502,38510,38514,38518,38522,38526,38534,38538,38554,38558,38566,38574],{"__ignoreMap":395},[425,37884,37885,37887],{"class":427,"line":428},[425,37886,31147],{"class":1155},[425,37888,31150],{"class":701},[425,37890,37891,37893,37895,37897],{"class":427,"line":698},[425,37892,31147],{"class":1155},[425,37894,32170],{"class":701},[425,37896,32138],{"class":1155},[425,37898,32175],{"class":701},[425,37900,37901,37903,37905,37907],{"class":427,"line":710},[425,37902,31492],{"class":1155},[425,37904,34657],{"class":701},[425,37906,31147],{"class":1155},[425,37908,34662],{"class":701},[425,37910,37911,37913,37915,37917],{"class":427,"line":721},[425,37912,31492],{"class":1155},[425,37914,32153],{"class":701},[425,37916,31147],{"class":1155},[425,37918,32158],{"class":701},[425,37920,37921],{"class":427,"line":735},[425,37922,34677],{"class":1216},[425,37924,37925,37927,37929,37931],{"class":427,"line":743},[425,37926,31492],{"class":1155},[425,37928,32123],{"class":701},[425,37930,31147],{"class":1155},[425,37932,32128],{"class":701},[425,37934,37935,37937,37939,37941],{"class":427,"line":751},[425,37936,31492],{"class":1155},[425,37938,32669],{"class":701},[425,37940,31147],{"class":1155},[425,37942,36312],{"class":701},[425,37944,37945,37947,37950,37952],{"class":427,"line":759},[425,37946,31492],{"class":1155},[425,37948,37949],{"class":701}," 练习.AlexNet.model ",[425,37951,31147],{"class":1155},[425,37953,36312],{"class":701},[425,37955,37956],{"class":427,"line":770},[425,37957,3400],{"emptyLinePlaceholder":1084},[425,37959,37960],{"class":427,"line":780},[425,37961,3400],{"emptyLinePlaceholder":1084},[425,37963,37964],{"class":427,"line":790},[425,37965,34706],{"class":1216},[425,37967,37968,37970,37972],{"class":427,"line":805},[425,37969,32702],{"class":1155},[425,37971,34713],{"class":431},[425,37973,32708],{"class":701},[425,37975,37976,37978,37980,37982,37984,37986,37988],{"class":427,"line":818},[425,37977,34720],{"class":701},[425,37979,1204],{"class":1155},[425,37981,32210],{"class":701},[425,37983,32213],{"class":6216},[425,37985,1204],{"class":1155},[425,37987,32218],{"class":435},[425,37989,32221],{"class":701},[425,37991,37992,37994,37996,37998],{"class":427,"line":831},[425,37993,34737],{"class":6216},[425,37995,1204],{"class":1155},[425,37997,34742],{"class":691},[425,37999,32221],{"class":701},[425,38001,38002,38004,38006,38008,38010,38012,38014],{"class":427,"line":841},[425,38003,34749],{"class":6216},[425,38005,1204],{"class":1155},[425,38007,32248],{"class":701},[425,38009,32251],{"class":6216},[425,38011,1204],{"class":1155},[425,38013,36204],{"class":691},[425,38015,32259],{"class":701},[425,38017,38018,38020,38022,38024],{"class":427,"line":852},[425,38019,34766],{"class":6216},[425,38021,1204],{"class":1155},[425,38023,32231],{"class":691},[425,38025,1165],{"class":701},[425,38027,38028,38030,38032,38034,38036,38038],{"class":427,"line":862},[425,38029,34777],{"class":701},[425,38031,1204],{"class":1155},[425,38033,32289],{"class":701},[425,38035,32292],{"class":6216},[425,38037,1204],{"class":1155},[425,38039,34788],{"class":701},[425,38041,38042],{"class":427,"line":878},[425,38043,34793],{"class":1216},[425,38045,38046,38048,38050,38052],{"class":427,"line":914},[425,38047,34798],{"class":6216},[425,38049,1204],{"class":1155},[425,38051,1367],{"class":691},[425,38053,32221],{"class":701},[425,38055,38056,38058,38060,38062],{"class":427,"line":943},[425,38057,34809],{"class":6216},[425,38059,1204],{"class":1155},[425,38061,32231],{"class":691},[425,38063,32221],{"class":701},[425,38065,38066,38068,38070,38072],{"class":427,"line":956},[425,38067,34820],{"class":6216},[425,38069,1204],{"class":1155},[425,38071,1341],{"class":691},[425,38073,1165],{"class":701},[425,38075,38076,38078],{"class":427,"line":964},[425,38077,5090],{"class":1155},[425,38079,34833],{"class":701},[425,38081,38082],{"class":427,"line":2733},[425,38083,3400],{"emptyLinePlaceholder":1084},[425,38085,38086],{"class":427,"line":2750},[425,38087,34842],{"class":1216},[425,38089,38090,38092,38094],{"class":427,"line":2755},[425,38091,32702],{"class":1155},[425,38093,34849],{"class":431},[425,38095,34852],{"class":701},[425,38097,38098],{"class":427,"line":2760},[425,38099,34857],{"class":1216},[425,38101,38102,38104,38106,38108,38110,38112,38114],{"class":427,"line":2765},[425,38103,31992],{"class":701},[425,38105,1204],{"class":1155},[425,38107,31999],{"class":435},[425,38109,2706],{"class":1155},[425,38111,32004],{"class":701},[425,38113,2703],{"class":1155},[425,38115,34874],{"class":435},[425,38117,38118,38120,38122],{"class":427,"line":2779},[425,38119,32044],{"class":701},[425,38121,1204],{"class":1155},[425,38123,33044],{"class":701},[425,38125,38126],{"class":427,"line":2784},[425,38127,3400],{"emptyLinePlaceholder":1084},[425,38129,38130],{"class":427,"line":3577},[425,38131,34891],{"class":1216},[425,38133,38134,38136,38138],{"class":427,"line":3591},[425,38135,34896],{"class":701},[425,38137,1204],{"class":1155},[425,38139,33097],{"class":691},[425,38141,38142,38144,38146],{"class":427,"line":3599},[425,38143,34905],{"class":701},[425,38145,1204],{"class":1155},[425,38147,4085],{"class":691},[425,38149,38150],{"class":427,"line":3604},[425,38151,3400],{"emptyLinePlaceholder":1084},[425,38153,38154],{"class":427,"line":3610},[425,38155,34918],{"class":1216},[425,38157,38158],{"class":427,"line":3616},[425,38159,34923],{"class":1216},[425,38161,38162],{"class":427,"line":3621},[425,38163,34928],{"class":1216},[425,38165,38166,38168],{"class":427,"line":8948},[425,38167,34933],{"class":1155},[425,38169,33639],{"class":701},[425,38171,38172],{"class":427,"line":8972},[425,38173,34940],{"class":1216},[425,38175,38176,38178,38180,38182],{"class":427,"line":8977},[425,38177,4403],{"class":1155},[425,38179,34947],{"class":701},[425,38181,27034],{"class":1155},[425,38183,34952],{"class":701},[425,38185,38186,38188,38190],{"class":427,"line":8983},[425,38187,34957],{"class":701},[425,38189,1204],{"class":1155},[425,38191,34962],{"class":701},[425,38193,38194,38196,38198],{"class":427,"line":9010},[425,38195,34967],{"class":701},[425,38197,1204],{"class":1155},[425,38199,34972],{"class":701},[425,38201,38202],{"class":427,"line":9015},[425,38203,34977],{"class":1216},[425,38205,38206],{"class":427,"line":9021},[425,38207,33630],{"class":701},[425,38209,38210],{"class":427,"line":9033},[425,38211,34986],{"class":1216},[425,38213,38214,38216,38218],{"class":427,"line":9045},[425,38215,33415],{"class":701},[425,38217,1204],{"class":1155},[425,38219,34995],{"class":701},[425,38221,38222],{"class":427,"line":9057},[425,38223,35000],{"class":1216},[425,38225,38226,38228,38230,38232,38234,38236,38238],{"class":427,"line":10715},[425,38227,33432],{"class":701},[425,38229,1204],{"class":1155},[425,38231,33437],{"class":701},[425,38233,33440],{"class":6216},[425,38235,1204],{"class":1155},[425,38237,1367],{"class":691},[425,38239,1165],{"class":701},[425,38241,38242],{"class":427,"line":10740},[425,38243,35021],{"class":1216},[425,38245,38246],{"class":427,"line":10763},[425,38247,35026],{"class":1216},[425,38249,38250],{"class":427,"line":10787},[425,38251,35031],{"class":1216},[425,38253,38254,38256,38258,38260,38262],{"class":427,"line":10792},[425,38255,35036],{"class":701},[425,38257,10476],{"class":1155},[425,38259,33542],{"class":701},[425,38261,3949],{"class":1155},[425,38263,35045],{"class":701},[425,38265,38266],{"class":427,"line":10797},[425,38267,35050],{"class":1216},[425,38269,38270,38272,38274,38276,38278],{"class":427,"line":10802},[425,38271,35055],{"class":701},[425,38273,10476],{"class":1155},[425,38275,35060],{"class":701},[425,38277,1341],{"class":691},[425,38279,1165],{"class":701},[425,38281,38282],{"class":427,"line":10811},[425,38283,3400],{"emptyLinePlaceholder":1084},[425,38285,38286],{"class":427,"line":10816},[425,38287,35073],{"class":1216},[425,38289,38290,38292,38294,38296,38298],{"class":427,"line":10822},[425,38291,35078],{"class":701},[425,38293,1204],{"class":1155},[425,38295,35083],{"class":701},[425,38297,1732],{"class":1155},[425,38299,35088],{"class":701},[425,38301,38302],{"class":427,"line":10843},[425,38303,35093],{"class":1216},[425,38305,38306,38308,38310,38312],{"class":427,"line":10849},[425,38307,33206],{"class":691},[425,38309,1159],{"class":701},[425,38311,35102],{"class":435},[425,38313,35105],{"class":701},[425,38315,38316],{"class":427,"line":10863},[425,38317,3400],{"emptyLinePlaceholder":1084},[425,38319,38320],{"class":427,"line":10869},[425,38321,35114],{"class":1216},[425,38323,38324,38326,38328,38330,38332],{"class":427,"line":10896},[425,38325,2544],{"class":1155},[425,38327,31975],{"class":691},[425,38329,3949],{"class":1155},[425,38331,31980],{"class":435},[425,38333,4739],{"class":701},[425,38335,38336],{"class":427,"line":10905},[425,38337,35131],{"class":1216},[425,38339,38340,38342,38344],{"class":427,"line":10911},[425,38341,32044],{"class":701},[425,38343,1204],{"class":1155},[425,38345,37844],{"class":701},[425,38347,38348],{"class":427,"line":10919},[425,38349,35144],{"class":1216},[425,38351,38352],{"class":427,"line":10924},[425,38353,35149],{"class":1216},[425,38355,38356,38358,38360],{"class":427,"line":17601},[425,38357,35154],{"class":701},[425,38359,35157],{"class":435},[425,38361,31252],{"class":701},[425,38363,38364],{"class":427,"line":17607},[425,38365,35164],{"class":1216},[425,38367,38368,38370,38372],{"class":427,"line":17630},[425,38369,34777],{"class":701},[425,38371,1204],{"class":1155},[425,38373,35173],{"class":701},[425,38375,38376],{"class":427,"line":17636},[425,38377,35178],{"class":1216},[425,38379,38380],{"class":427,"line":17659},[425,38381,35183],{"class":701},[425,38383,38384],{"class":427,"line":17673},[425,38385,3400],{"emptyLinePlaceholder":1084},[425,38387,38388],{"class":427,"line":17693},[425,38389,35192],{"class":1216},[425,38391,38392],{"class":427,"line":17699},[425,38393,35197],{"class":1216},[425,38395,38396,38398,38400,38402,38404,38406,38408],{"class":427,"line":17710},[425,38397,31992],{"class":701},[425,38399,1204],{"class":1155},[425,38401,31999],{"class":435},[425,38403,2706],{"class":1155},[425,38405,32004],{"class":701},[425,38407,2703],{"class":1155},[425,38409,34874],{"class":435},[425,38411,38412,38414,38416],{"class":427,"line":17733},[425,38413,32044],{"class":701},[425,38415,1204],{"class":1155},[425,38417,33044],{"class":701},[425,38419,38420],{"class":427,"line":17755},[425,38421,35226],{"class":1216},[425,38423,38424],{"class":427,"line":17760},[425,38425,35231],{"class":1216},[425,38427,38428,38430,38432,38434,38436,38438,38440,38442,38444,38446,38448,38450,38452,38454,38456,38458,38460,38462,38464,38466,38468,38470,38472],{"class":427,"line":17766},[425,38429,35236],{"class":701},[425,38431,1204],{"class":1155},[425,38433,2037],{"class":701},[425,38435,35243],{"class":435},[425,38437,1527],{"class":701},[425,38439,35248],{"class":435},[425,38441,1527],{"class":701},[425,38443,35253],{"class":435},[425,38445,1527],{"class":701},[425,38447,35258],{"class":435},[425,38449,1527],{"class":701},[425,38451,35263],{"class":435},[425,38453,1527],{"class":701},[425,38455,35268],{"class":435},[425,38457,1527],{"class":701},[425,38459,35273],{"class":435},[425,38461,1527],{"class":701},[425,38463,35278],{"class":435},[425,38465,1527],{"class":701},[425,38467,35283],{"class":435},[425,38469,1527],{"class":701},[425,38471,35288],{"class":435},[425,38473,34001],{"class":701},[425,38475,38476,38478],{"class":427,"line":17780},[425,38477,34933],{"class":1155},[425,38479,33639],{"class":701},[425,38481,38482],{"class":427,"line":17793},[425,38483,35301],{"class":1216},[425,38485,38486,38488,38490,38492],{"class":427,"line":17798},[425,38487,4403],{"class":1155},[425,38489,35308],{"class":701},[425,38491,27034],{"class":1155},[425,38493,34952],{"class":701},[425,38495,38496,38498,38500],{"class":427,"line":17812},[425,38497,33365],{"class":701},[425,38499,1204],{"class":1155},[425,38501,33370],{"class":701},[425,38503,38504,38506,38508],{"class":427,"line":17817},[425,38505,33380],{"class":701},[425,38507,1204],{"class":1155},[425,38509,33385],{"class":701},[425,38511,38512],{"class":427,"line":17823},[425,38513,3400],{"emptyLinePlaceholder":1084},[425,38515,38516],{"class":427,"line":17828},[425,38517,35337],{"class":1216},[425,38519,38520],{"class":427,"line":17842},[425,38521,33630],{"class":701},[425,38523,38524],{"class":427,"line":17847},[425,38525,35346],{"class":1216},[425,38527,38528,38530,38532],{"class":427,"line":17852},[425,38529,33415],{"class":701},[425,38531,1204],{"class":1155},[425,38533,33420],{"class":701},[425,38535,38536],{"class":427,"line":17866},[425,38537,35359],{"class":1216},[425,38539,38540,38542,38544,38546,38548,38550,38552],{"class":427,"line":17878},[425,38541,33432],{"class":701},[425,38543,1204],{"class":1155},[425,38545,33437],{"class":701},[425,38547,33440],{"class":6216},[425,38549,1204],{"class":1155},[425,38551,1367],{"class":691},[425,38553,1165],{"class":701},[425,38555,38556],{"class":427,"line":17883},[425,38557,35380],{"class":1216},[425,38559,38560,38562,38564],{"class":427,"line":17896},[425,38561,35385],{"class":701},[425,38563,1204],{"class":1155},[425,38565,35390],{"class":701},[425,38567,38568,38570,38572],{"class":427,"line":17901},[425,38569,35395],{"class":701},[425,38571,1204],{"class":1155},[425,38573,35400],{"class":701},[425,38575,38576,38578,38580,38582,38584,38586,38588,38590],{"class":427,"line":17906},[425,38577,35405],{"class":691},[425,38579,1159],{"class":701},[425,38581,35410],{"class":435},[425,38583,35413],{"class":701},[425,38585,35416],{"class":435},[425,38587,1527],{"class":701},[425,38589,35421],{"class":435},[425,38591,35424],{"class":701},[14,38593,38595],{"id":38594},"_22vgg","2.2.VGG",[22995,38597,38599],{"id":38598},"_221原理","2.2.1.原理",[19,38601,38602],{},[393,38603],{"alt":395,"src":38604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[19,38606,38607],{},[393,38608],{"alt":395,"src":38609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[19,38611,38612],{},[393,38613],{"alt":395,"src":38614},"\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,38616,38617],{},"参数详细描述：",[19,38619,38620],{},[393,38621],{"alt":395,"src":38622},"\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,38624,38625],{},[393,38626],{"alt":395,"src":38627},"\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,38629,38630],{},[393,38631],{"alt":395,"src":38632},"\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,38634,38635],{},[393,38636],{"alt":395,"src":38637},"\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,38639,38640],{},[393,38641],{"alt":395,"src":38642},"\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",[22995,38644,38646],{"id":38645},"_222代码实现","2.2.2.代码实现",[972,38648,38649],{},[450,38650,38651],{},"网络搭建",[416,38653,38655],{"className":31133,"code":38654,"language":31135,"meta":395,"style":395},"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",[422,38656,38657,38663,38675,38685,38695,38699,38716,38724,38743,38748,38753,38765,38803,38808,38844,38848,38877,38882,38887,38898,38934,38938,38974,38978,39006,39010,39015,39026,39062,39066,39102,39106,39142,39146,39174,39178,39183,39194,39231,39235,39271,39275,39311,39315,39343,39347,39352,39363,39399,39403,39439,39443,39479,39483,39511,39515,39520,39531,39536,39541,39546,39567,39571,39583,39587,39599,39603,39607,39612,39617,39632,39637,39647,39652,39667,39672,39691,39696,39705,39710,39720,39725,39730,39744,39749,39763,39771,39775,39779,39787,39798,39809,39820,39831,39842,39853,39859,39863,39868,39881,39901,39907,39916],{"__ignoreMap":395},[425,38658,38659,38661],{"class":427,"line":428},[425,38660,31147],{"class":1155},[425,38662,31150],{"class":701},[425,38664,38665,38667,38670,38672],{"class":427,"line":698},[425,38666,31492],{"class":1155},[425,38668,38669],{"class":701}," sympy.core.sympify ",[425,38671,31147],{"class":1155},[425,38673,38674],{"class":701}," kernS\n",[425,38676,38677,38679,38681,38683],{"class":427,"line":710},[425,38678,31492],{"class":1155},[425,38680,31495],{"class":701},[425,38682,31147],{"class":1155},[425,38684,31500],{"class":701},[425,38686,38687,38689,38691,38693],{"class":427,"line":721},[425,38688,31492],{"class":1155},[425,38690,31512],{"class":701},[425,38692,31147],{"class":1155},[425,38694,31517],{"class":701},[425,38696,38697],{"class":427,"line":735},[425,38698,3400],{"emptyLinePlaceholder":1084},[425,38700,38701,38703,38706,38708,38710,38712,38714],{"class":427,"line":743},[425,38702,15691],{"class":1155},[425,38704,38705],{"class":431}," VGG16",[425,38707,1159],{"class":701},[425,38709,31533],{"class":431},[425,38711,1706],{"class":701},[425,38713,31538],{"class":431},[425,38715,31541],{"class":701},[425,38717,38718,38720,38722],{"class":427,"line":751},[425,38719,31556],{"class":1155},[425,38721,31559],{"class":691},[425,38723,31562],{"class":701},[425,38725,38726,38728,38730,38733,38735,38737,38739,38741],{"class":427,"line":759},[425,38727,31572],{"class":691},[425,38729,1159],{"class":701},[425,38731,38732],{"class":691},"VGG16",[425,38734,13434],{"class":701},[425,38736,31578],{"class":691},[425,38738,31581],{"class":701},[425,38740,31584],{"class":691},[425,38742,2976],{"class":701},[425,38744,38745],{"class":427,"line":770},[425,38746,38747],{"class":1216},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[425,38749,38750],{"class":427,"line":780},[425,38751,38752],{"class":1216},"        # 这里用的是灰度图\n",[425,38754,38755,38757,38760,38762],{"class":427,"line":790},[425,38756,31600],{"class":691},[425,38758,38759],{"class":701},".block1",[425,38761,1204],{"class":1155},[425,38763,38764],{"class":701},"nn.Sequential(\n",[425,38766,38767,38770,38772,38774,38776,38778,38780,38782,38784,38786,38788,38790,38792,38794,38796,38798,38800],{"class":427,"line":805},[425,38768,38769],{"class":701},"            nn.Conv2d(",[425,38771,31611],{"class":6216},[425,38773,1204],{"class":1155},[425,38775,1367],{"class":691},[425,38777,1527],{"class":701},[425,38779,31620],{"class":6216},[425,38781,1204],{"class":1155},[425,38783,1353],{"class":691},[425,38785,1527],{"class":701},[425,38787,31629],{"class":6216},[425,38789,1204],{"class":1155},[425,38791,1229],{"class":691},[425,38793,1527],{"class":701},[425,38795,31638],{"class":6216},[425,38797,1204],{"class":1155},[425,38799,1367],{"class":691},[425,38801,38802],{"class":701},"),\n",[425,38804,38805],{"class":427,"line":818},[425,38806,38807],{"class":701},"            nn.ReLU(),\n",[425,38809,38810,38812,38814,38816,38818,38820,38822,38824,38826,38828,38830,38832,38834,38836,38838,38840,38842],{"class":427,"line":831},[425,38811,38769],{"class":701},[425,38813,31611],{"class":6216},[425,38815,1204],{"class":1155},[425,38817,1353],{"class":691},[425,38819,1527],{"class":701},[425,38821,31620],{"class":6216},[425,38823,1204],{"class":1155},[425,38825,1353],{"class":691},[425,38827,1527],{"class":701},[425,38829,31629],{"class":6216},[425,38831,1204],{"class":1155},[425,38833,1229],{"class":691},[425,38835,1527],{"class":701},[425,38837,31638],{"class":6216},[425,38839,1204],{"class":1155},[425,38841,1367],{"class":691},[425,38843,38802],{"class":701},[425,38845,38846],{"class":427,"line":841},[425,38847,38807],{"class":701},[425,38849,38850,38853,38855,38857,38859,38861,38863,38865,38867,38869,38871,38873,38875],{"class":427,"line":852},[425,38851,38852],{"class":701},"            nn.MaxPool2d(",[425,38854,31629],{"class":6216},[425,38856,1204],{"class":1155},[425,38858,1235],{"class":691},[425,38860,1527],{"class":701},[425,38862,31684],{"class":6216},[425,38864,1204],{"class":1155},[425,38866,1235],{"class":691},[425,38868,1527],{"class":701},[425,38870,31638],{"class":6216},[425,38872,1204],{"class":1155},[425,38874,1341],{"class":691},[425,38876,1165],{"class":701},[425,38878,38879],{"class":427,"line":862},[425,38880,38881],{"class":701},"        )\n",[425,38883,38884],{"class":427,"line":878},[425,38885,38886],{"class":1216},"        # 第二层\n",[425,38888,38889,38891,38894,38896],{"class":427,"line":914},[425,38890,31600],{"class":691},[425,38892,38893],{"class":701},".block2",[425,38895,1204],{"class":1155},[425,38897,38764],{"class":701},[425,38899,38900,38902,38904,38906,38908,38910,38912,38914,38916,38918,38920,38922,38924,38926,38928,38930,38932],{"class":427,"line":943},[425,38901,38769],{"class":701},[425,38903,31611],{"class":6216},[425,38905,1204],{"class":1155},[425,38907,1353],{"class":691},[425,38909,1527],{"class":701},[425,38911,31620],{"class":6216},[425,38913,1204],{"class":1155},[425,38915,32825],{"class":691},[425,38917,1527],{"class":701},[425,38919,31629],{"class":6216},[425,38921,1204],{"class":1155},[425,38923,1229],{"class":691},[425,38925,1527],{"class":701},[425,38927,31638],{"class":6216},[425,38929,1204],{"class":1155},[425,38931,1367],{"class":691},[425,38933,38802],{"class":701},[425,38935,38936],{"class":427,"line":956},[425,38937,38807],{"class":701},[425,38939,38940,38942,38944,38946,38948,38950,38952,38954,38956,38958,38960,38962,38964,38966,38968,38970,38972],{"class":427,"line":964},[425,38941,38769],{"class":701},[425,38943,31611],{"class":6216},[425,38945,1204],{"class":1155},[425,38947,32825],{"class":691},[425,38949,1527],{"class":701},[425,38951,31620],{"class":6216},[425,38953,1204],{"class":1155},[425,38955,32825],{"class":691},[425,38957,1527],{"class":701},[425,38959,31629],{"class":6216},[425,38961,1204],{"class":1155},[425,38963,1229],{"class":691},[425,38965,1527],{"class":701},[425,38967,31638],{"class":6216},[425,38969,1204],{"class":1155},[425,38971,1367],{"class":691},[425,38973,38802],{"class":701},[425,38975,38976],{"class":427,"line":2733},[425,38977,38807],{"class":701},[425,38979,38980,38982,38984,38986,38988,38990,38992,38994,38996,38998,39000,39002,39004],{"class":427,"line":2750},[425,38981,38852],{"class":701},[425,38983,31629],{"class":6216},[425,38985,1204],{"class":1155},[425,38987,1235],{"class":691},[425,38989,1527],{"class":701},[425,38991,31684],{"class":6216},[425,38993,1204],{"class":1155},[425,38995,1235],{"class":691},[425,38997,1527],{"class":701},[425,38999,31638],{"class":6216},[425,39001,1204],{"class":1155},[425,39003,1341],{"class":691},[425,39005,1165],{"class":701},[425,39007,39008],{"class":427,"line":2755},[425,39009,38881],{"class":701},[425,39011,39012],{"class":427,"line":2760},[425,39013,39014],{"class":1216},"        # 第三层\n",[425,39016,39017,39019,39022,39024],{"class":427,"line":2765},[425,39018,31600],{"class":691},[425,39020,39021],{"class":701},".block3",[425,39023,1204],{"class":1155},[425,39025,38764],{"class":701},[425,39027,39028,39030,39032,39034,39036,39038,39040,39042,39044,39046,39048,39050,39052,39054,39056,39058,39060],{"class":427,"line":2779},[425,39029,38769],{"class":701},[425,39031,31611],{"class":6216},[425,39033,1204],{"class":1155},[425,39035,32825],{"class":691},[425,39037,1527],{"class":701},[425,39039,31620],{"class":6216},[425,39041,1204],{"class":1155},[425,39043,35625],{"class":691},[425,39045,1527],{"class":701},[425,39047,31629],{"class":6216},[425,39049,1204],{"class":1155},[425,39051,1229],{"class":691},[425,39053,1527],{"class":701},[425,39055,31638],{"class":6216},[425,39057,1204],{"class":1155},[425,39059,1367],{"class":691},[425,39061,38802],{"class":701},[425,39063,39064],{"class":427,"line":2784},[425,39065,38807],{"class":701},[425,39067,39068,39070,39072,39074,39076,39078,39080,39082,39084,39086,39088,39090,39092,39094,39096,39098,39100],{"class":427,"line":3577},[425,39069,38769],{"class":701},[425,39071,31611],{"class":6216},[425,39073,1204],{"class":1155},[425,39075,35625],{"class":691},[425,39077,1527],{"class":701},[425,39079,31620],{"class":6216},[425,39081,1204],{"class":1155},[425,39083,35625],{"class":691},[425,39085,1527],{"class":701},[425,39087,31629],{"class":6216},[425,39089,1204],{"class":1155},[425,39091,1229],{"class":691},[425,39093,1527],{"class":701},[425,39095,31638],{"class":6216},[425,39097,1204],{"class":1155},[425,39099,1367],{"class":691},[425,39101,38802],{"class":701},[425,39103,39104],{"class":427,"line":3591},[425,39105,38807],{"class":701},[425,39107,39108,39110,39112,39114,39116,39118,39120,39122,39124,39126,39128,39130,39132,39134,39136,39138,39140],{"class":427,"line":3599},[425,39109,38769],{"class":701},[425,39111,31611],{"class":6216},[425,39113,1204],{"class":1155},[425,39115,35625],{"class":691},[425,39117,1527],{"class":701},[425,39119,31620],{"class":6216},[425,39121,1204],{"class":1155},[425,39123,35625],{"class":691},[425,39125,1527],{"class":701},[425,39127,31629],{"class":6216},[425,39129,1204],{"class":1155},[425,39131,1229],{"class":691},[425,39133,1527],{"class":701},[425,39135,31638],{"class":6216},[425,39137,1204],{"class":1155},[425,39139,1367],{"class":691},[425,39141,38802],{"class":701},[425,39143,39144],{"class":427,"line":3604},[425,39145,38807],{"class":701},[425,39147,39148,39150,39152,39154,39156,39158,39160,39162,39164,39166,39168,39170,39172],{"class":427,"line":3610},[425,39149,38852],{"class":701},[425,39151,31629],{"class":6216},[425,39153,1204],{"class":1155},[425,39155,1235],{"class":691},[425,39157,1527],{"class":701},[425,39159,31684],{"class":6216},[425,39161,1204],{"class":1155},[425,39163,1235],{"class":691},[425,39165,1527],{"class":701},[425,39167,31638],{"class":6216},[425,39169,1204],{"class":1155},[425,39171,1341],{"class":691},[425,39173,1165],{"class":701},[425,39175,39176],{"class":427,"line":3616},[425,39177,38881],{"class":701},[425,39179,39180],{"class":427,"line":3621},[425,39181,39182],{"class":1216},"        # 第四层\n",[425,39184,39185,39187,39190,39192],{"class":427,"line":8948},[425,39186,31600],{"class":691},[425,39188,39189],{"class":701},".block4",[425,39191,1204],{"class":1155},[425,39193,38764],{"class":701},[425,39195,39196,39198,39200,39202,39204,39206,39208,39210,39213,39215,39217,39219,39221,39223,39225,39227,39229],{"class":427,"line":8972},[425,39197,38769],{"class":701},[425,39199,31611],{"class":6216},[425,39201,1204],{"class":1155},[425,39203,35625],{"class":691},[425,39205,1527],{"class":701},[425,39207,31620],{"class":6216},[425,39209,1204],{"class":1155},[425,39211,39212],{"class":691},"512",[425,39214,1527],{"class":701},[425,39216,31629],{"class":6216},[425,39218,1204],{"class":1155},[425,39220,1229],{"class":691},[425,39222,1527],{"class":701},[425,39224,31638],{"class":6216},[425,39226,1204],{"class":1155},[425,39228,1367],{"class":691},[425,39230,38802],{"class":701},[425,39232,39233],{"class":427,"line":8977},[425,39234,38807],{"class":701},[425,39236,39237,39239,39241,39243,39245,39247,39249,39251,39253,39255,39257,39259,39261,39263,39265,39267,39269],{"class":427,"line":8983},[425,39238,38769],{"class":701},[425,39240,31611],{"class":6216},[425,39242,1204],{"class":1155},[425,39244,39212],{"class":691},[425,39246,1527],{"class":701},[425,39248,31620],{"class":6216},[425,39250,1204],{"class":1155},[425,39252,39212],{"class":691},[425,39254,1527],{"class":701},[425,39256,31629],{"class":6216},[425,39258,1204],{"class":1155},[425,39260,1229],{"class":691},[425,39262,1527],{"class":701},[425,39264,31638],{"class":6216},[425,39266,1204],{"class":1155},[425,39268,1367],{"class":691},[425,39270,38802],{"class":701},[425,39272,39273],{"class":427,"line":9010},[425,39274,38807],{"class":701},[425,39276,39277,39279,39281,39283,39285,39287,39289,39291,39293,39295,39297,39299,39301,39303,39305,39307,39309],{"class":427,"line":9015},[425,39278,38769],{"class":701},[425,39280,31611],{"class":6216},[425,39282,1204],{"class":1155},[425,39284,39212],{"class":691},[425,39286,1527],{"class":701},[425,39288,31620],{"class":6216},[425,39290,1204],{"class":1155},[425,39292,39212],{"class":691},[425,39294,1527],{"class":701},[425,39296,31629],{"class":6216},[425,39298,1204],{"class":1155},[425,39300,1229],{"class":691},[425,39302,1527],{"class":701},[425,39304,31638],{"class":6216},[425,39306,1204],{"class":1155},[425,39308,1367],{"class":691},[425,39310,38802],{"class":701},[425,39312,39313],{"class":427,"line":9021},[425,39314,38807],{"class":701},[425,39316,39317,39319,39321,39323,39325,39327,39329,39331,39333,39335,39337,39339,39341],{"class":427,"line":9033},[425,39318,38852],{"class":701},[425,39320,31629],{"class":6216},[425,39322,1204],{"class":1155},[425,39324,1235],{"class":691},[425,39326,1527],{"class":701},[425,39328,31684],{"class":6216},[425,39330,1204],{"class":1155},[425,39332,1235],{"class":691},[425,39334,1527],{"class":701},[425,39336,31638],{"class":6216},[425,39338,1204],{"class":1155},[425,39340,1341],{"class":691},[425,39342,1165],{"class":701},[425,39344,39345],{"class":427,"line":9045},[425,39346,38881],{"class":701},[425,39348,39349],{"class":427,"line":9057},[425,39350,39351],{"class":1216},"        # 第五层\n",[425,39353,39354,39356,39359,39361],{"class":427,"line":10715},[425,39355,31600],{"class":691},[425,39357,39358],{"class":701},".block5",[425,39360,1204],{"class":1155},[425,39362,38764],{"class":701},[425,39364,39365,39367,39369,39371,39373,39375,39377,39379,39381,39383,39385,39387,39389,39391,39393,39395,39397],{"class":427,"line":10740},[425,39366,38769],{"class":701},[425,39368,31611],{"class":6216},[425,39370,1204],{"class":1155},[425,39372,39212],{"class":691},[425,39374,1527],{"class":701},[425,39376,31620],{"class":6216},[425,39378,1204],{"class":1155},[425,39380,39212],{"class":691},[425,39382,1527],{"class":701},[425,39384,31629],{"class":6216},[425,39386,1204],{"class":1155},[425,39388,1229],{"class":691},[425,39390,1527],{"class":701},[425,39392,31638],{"class":6216},[425,39394,1204],{"class":1155},[425,39396,1367],{"class":691},[425,39398,38802],{"class":701},[425,39400,39401],{"class":427,"line":10763},[425,39402,38807],{"class":701},[425,39404,39405,39407,39409,39411,39413,39415,39417,39419,39421,39423,39425,39427,39429,39431,39433,39435,39437],{"class":427,"line":10787},[425,39406,38769],{"class":701},[425,39408,31611],{"class":6216},[425,39410,1204],{"class":1155},[425,39412,39212],{"class":691},[425,39414,1527],{"class":701},[425,39416,31620],{"class":6216},[425,39418,1204],{"class":1155},[425,39420,39212],{"class":691},[425,39422,1527],{"class":701},[425,39424,31629],{"class":6216},[425,39426,1204],{"class":1155},[425,39428,1229],{"class":691},[425,39430,1527],{"class":701},[425,39432,31638],{"class":6216},[425,39434,1204],{"class":1155},[425,39436,1367],{"class":691},[425,39438,38802],{"class":701},[425,39440,39441],{"class":427,"line":10792},[425,39442,38807],{"class":701},[425,39444,39445,39447,39449,39451,39453,39455,39457,39459,39461,39463,39465,39467,39469,39471,39473,39475,39477],{"class":427,"line":10797},[425,39446,38769],{"class":701},[425,39448,31611],{"class":6216},[425,39450,1204],{"class":1155},[425,39452,39212],{"class":691},[425,39454,1527],{"class":701},[425,39456,31620],{"class":6216},[425,39458,1204],{"class":1155},[425,39460,39212],{"class":691},[425,39462,1527],{"class":701},[425,39464,31629],{"class":6216},[425,39466,1204],{"class":1155},[425,39468,1229],{"class":691},[425,39470,1527],{"class":701},[425,39472,31638],{"class":6216},[425,39474,1204],{"class":1155},[425,39476,1367],{"class":691},[425,39478,38802],{"class":701},[425,39480,39481],{"class":427,"line":10802},[425,39482,38807],{"class":701},[425,39484,39485,39487,39489,39491,39493,39495,39497,39499,39501,39503,39505,39507,39509],{"class":427,"line":10811},[425,39486,38852],{"class":701},[425,39488,31629],{"class":6216},[425,39490,1204],{"class":1155},[425,39492,1235],{"class":691},[425,39494,1527],{"class":701},[425,39496,31684],{"class":6216},[425,39498,1204],{"class":1155},[425,39500,1235],{"class":691},[425,39502,1527],{"class":701},[425,39504,31638],{"class":6216},[425,39506,1204],{"class":1155},[425,39508,1341],{"class":691},[425,39510,1165],{"class":701},[425,39512,39513],{"class":427,"line":10816},[425,39514,38881],{"class":701},[425,39516,39517],{"class":427,"line":10822},[425,39518,39519],{"class":1216},"        # 全连接层\n",[425,39521,39522,39524,39527,39529],{"class":427,"line":10843},[425,39523,31600],{"class":691},[425,39525,39526],{"class":701},".block6",[425,39528,1204],{"class":1155},[425,39530,38764],{"class":701},[425,39532,39533],{"class":427,"line":10849},[425,39534,39535],{"class":1216},"            # 平展操作\n",[425,39537,39538],{"class":427,"line":10863},[425,39539,39540],{"class":1216},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[425,39542,39543],{"class":427,"line":10869},[425,39544,39545],{"class":701},"            nn.Flatten(),\n",[425,39547,39548,39551,39553,39555,39557,39559,39561,39563,39565],{"class":427,"line":10896},[425,39549,39550],{"class":701},"            nn.Linear(",[425,39552,1518],{"class":691},[425,39554,1603],{"class":1155},[425,39556,1518],{"class":691},[425,39558,1603],{"class":1155},[425,39560,39212],{"class":691},[425,39562,1527],{"class":701},[425,39564,35625],{"class":691},[425,39566,38802],{"class":701},[425,39568,39569],{"class":427,"line":10905},[425,39570,38807],{"class":701},[425,39572,39573,39575,39577,39579,39581],{"class":427,"line":10911},[425,39574,39550],{"class":701},[425,39576,35625],{"class":691},[425,39578,1527],{"class":701},[425,39580,32825],{"class":691},[425,39582,38802],{"class":701},[425,39584,39585],{"class":427,"line":10919},[425,39586,38807],{"class":701},[425,39588,39589,39591,39593,39595,39597],{"class":427,"line":10924},[425,39590,39550],{"class":701},[425,39592,32825],{"class":691},[425,39594,1527],{"class":701},[425,39596,1594],{"class":691},[425,39598,1165],{"class":701},[425,39600,39601],{"class":427,"line":17601},[425,39602,38881],{"class":701},[425,39604,39605],{"class":427,"line":17607},[425,39606,3400],{"emptyLinePlaceholder":1084},[425,39608,39609],{"class":427,"line":17630},[425,39610,39611],{"class":1216},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[425,39613,39614],{"class":427,"line":17636},[425,39615,39616],{"class":1216},"        # 循环遍历模型\n",[425,39618,39619,39621,39624,39626,39629],{"class":427,"line":17659},[425,39620,4403],{"class":1155},[425,39622,39623],{"class":701}," m ",[425,39625,27034],{"class":1155},[425,39627,39628],{"class":691}," self",[425,39630,39631],{"class":701},".modules():\n",[425,39633,39634],{"class":427,"line":17673},[425,39635,39636],{"class":1216},"            # print(m)\n",[425,39638,39639,39641,39644],{"class":427,"line":17693},[425,39640,5642],{"class":1155},[425,39642,39643],{"class":691}," isinstance",[425,39645,39646],{"class":701},"(m,nn.Conv2d):\n",[425,39648,39649],{"class":427,"line":17699},[425,39650,39651],{"class":1216},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[425,39653,39654,39657,39660,39662,39665],{"class":427,"line":17710},[425,39655,39656],{"class":701},"                nn.init.kaiming_normal_(m.weight,",[425,39658,39659],{"class":6216},"nonlinearity",[425,39661,1204],{"class":1155},[425,39663,39664],{"class":435},"'relu'",[425,39666,1165],{"class":701},[425,39668,39669],{"class":427,"line":17733},[425,39670,39671],{"class":1216},"                # 判断b参数是否存在\n",[425,39673,39674,39677,39680,39683,39686,39689],{"class":427,"line":17755},[425,39675,39676],{"class":1155},"                if",[425,39678,39679],{"class":701}," m.bias ",[425,39681,39682],{"class":1155},"is",[425,39684,39685],{"class":1155}," not",[425,39687,39688],{"class":691}," None",[425,39690,4739],{"class":701},[425,39692,39693],{"class":427,"line":17760},[425,39694,39695],{"class":1216},"                    # 如果参数不存在的化初始化b=0\n",[425,39697,39698,39701,39703],{"class":427,"line":17766},[425,39699,39700],{"class":701},"                    nn.init.constant_(m.bias,",[425,39702,1341],{"class":691},[425,39704,1165],{"class":701},[425,39706,39707],{"class":427,"line":17780},[425,39708,39709],{"class":1216},"            # 全连接层初始化\n",[425,39711,39712,39715,39717],{"class":427,"line":17793},[425,39713,39714],{"class":1155},"            elif",[425,39716,39643],{"class":691},[425,39718,39719],{"class":701},"(m,nn.Linear):\n",[425,39721,39722],{"class":427,"line":17798},[425,39723,39724],{"class":1216},"                # 这个初始化方法是利用的是正太分布的方式\n",[425,39726,39727],{"class":427,"line":17812},[425,39728,39729],{"class":1216},"                # 均值为0，方差为0.01\n",[425,39731,39732,39735,39737,39739,39742],{"class":427,"line":17817},[425,39733,39734],{"class":701},"                nn.init.normal_(m.weight,",[425,39736,1341],{"class":691},[425,39738,1527],{"class":701},[425,39740,39741],{"class":691},"0.01",[425,39743,1165],{"class":701},[425,39745,39746],{"class":427,"line":17823},[425,39747,39748],{"class":1216},"                # 初始化b参数\n",[425,39750,39751,39753,39755,39757,39759,39761],{"class":427,"line":17828},[425,39752,39676],{"class":1155},[425,39754,39679],{"class":701},[425,39756,39682],{"class":1155},[425,39758,39685],{"class":1155},[425,39760,39688],{"class":691},[425,39762,4739],{"class":701},[425,39764,39765,39767,39769],{"class":427,"line":17842},[425,39766,39700],{"class":701},[425,39768,1341],{"class":691},[425,39770,1165],{"class":701},[425,39772,39773],{"class":427,"line":17847},[425,39774,3400],{"emptyLinePlaceholder":1084},[425,39776,39777],{"class":427,"line":17852},[425,39778,35920],{"class":1216},[425,39780,39781,39783,39785],{"class":427,"line":17866},[425,39782,31556],{"class":1155},[425,39784,31848],{"class":431},[425,39786,31851],{"class":701},[425,39788,39789,39791,39793,39795],{"class":427,"line":17878},[425,39790,31856],{"class":701},[425,39792,1204],{"class":1155},[425,39794,31578],{"class":691},[425,39796,39797],{"class":701},".block1(x)\n",[425,39799,39800,39802,39804,39806],{"class":427,"line":17883},[425,39801,31856],{"class":701},[425,39803,1204],{"class":1155},[425,39805,31578],{"class":691},[425,39807,39808],{"class":701},".block2(x)\n",[425,39810,39811,39813,39815,39817],{"class":427,"line":17896},[425,39812,31856],{"class":701},[425,39814,1204],{"class":1155},[425,39816,31578],{"class":691},[425,39818,39819],{"class":701},".block3(x)\n",[425,39821,39822,39824,39826,39828],{"class":427,"line":17901},[425,39823,31856],{"class":701},[425,39825,1204],{"class":1155},[425,39827,31578],{"class":691},[425,39829,39830],{"class":701},".block4(x)\n",[425,39832,39833,39835,39837,39839],{"class":427,"line":17906},[425,39834,31856],{"class":701},[425,39836,1204],{"class":1155},[425,39838,31578],{"class":691},[425,39840,39841],{"class":701},".block5(x)\n",[425,39843,39844,39846,39848,39850],{"class":427,"line":17911},[425,39845,31856],{"class":701},[425,39847,1204],{"class":1155},[425,39849,31578],{"class":691},[425,39851,39852],{"class":701},".block6(x)\n",[425,39854,39855,39857],{"class":427,"line":17924},[425,39856,15749],{"class":1155},[425,39858,31964],{"class":701},[425,39860,39861],{"class":427,"line":17929},[425,39862,3400],{"emptyLinePlaceholder":1084},[425,39864,39865],{"class":427,"line":33388},[425,39866,39867],{"class":1216},"# 验证模型\n",[425,39869,39870,39872,39874,39876,39879],{"class":427,"line":33394},[425,39871,2544],{"class":1155},[425,39873,31975],{"class":691},[425,39875,3949],{"class":1155},[425,39877,39878],{"class":435},"'__main__'",[425,39880,4739],{"class":701},[425,39882,39883,39885,39887,39889,39891,39893,39895,39897,39899],{"class":427,"line":33400},[425,39884,31992],{"class":701},[425,39886,1204],{"class":1155},[425,39888,31206],{"class":701},[425,39890,31999],{"class":435},[425,39892,2706],{"class":1155},[425,39894,32004],{"class":701},[425,39896,2703],{"class":1155},[425,39898,31231],{"class":435},[425,39900,1165],{"class":701},[425,39902,39903,39905],{"class":427,"line":33406},[425,39904,32054],{"class":691},[425,39906,31240],{"class":701},[425,39908,39909,39911,39913],{"class":427,"line":33412},[425,39910,32044],{"class":701},[425,39912,1204],{"class":1155},[425,39914,39915],{"class":701},"VGG16().to(device)\n",[425,39917,39918,39920,39922,39924,39926,39928,39930,39932],{"class":427,"line":33423},[425,39919,32054],{"class":691},[425,39921,32057],{"class":701},[425,39923,1367],{"class":691},[425,39925,1527],{"class":701},[425,39927,32256],{"class":691},[425,39929,1527],{"class":701},[425,39931,32256],{"class":691},[425,39933,32070],{"class":701},[972,39935,39936],{"start":698},[450,39937,39938],{},"训练代码",[19,39940,39941],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,39943,39944],{},"解决方式:",[19,39946,39947],{},"①权重初始化",[416,39949,39951],{"className":31133,"code":39950,"language":31135,"meta":395,"style":395},"# 权重初始化,保证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",[422,39952,39953,39958,39963,39975,39980,39988,39993,40006,40011,40025,40030,40039,40044,40053,40058,40063,40076,40081,40095],{"__ignoreMap":395},[425,39954,39955],{"class":427,"line":428},[425,39956,39957],{"class":1216},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[425,39959,39960],{"class":427,"line":698},[425,39961,39962],{"class":1216},"# 循环遍历模型\n",[425,39964,39965,39967,39969,39971,39973],{"class":427,"line":710},[425,39966,4025],{"class":1155},[425,39968,39623],{"class":701},[425,39970,27034],{"class":1155},[425,39972,39628],{"class":691},[425,39974,39631],{"class":701},[425,39976,39977],{"class":427,"line":721},[425,39978,39979],{"class":1216},"    # print(m)\n",[425,39981,39982,39984,39986],{"class":427,"line":735},[425,39983,4101],{"class":1155},[425,39985,39643],{"class":691},[425,39987,39646],{"class":701},[425,39989,39990],{"class":427,"line":743},[425,39991,39992],{"class":1216},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[425,39994,39995,39998,40000,40002,40004],{"class":427,"line":751},[425,39996,39997],{"class":701},"        nn.init.kaiming_normal_(m.weight,",[425,39999,39659],{"class":6216},[425,40001,1204],{"class":1155},[425,40003,39664],{"class":435},[425,40005,1165],{"class":701},[425,40007,40008],{"class":427,"line":759},[425,40009,40010],{"class":1216},"        # 判断b参数是否存在\n",[425,40012,40013,40015,40017,40019,40021,40023],{"class":427,"line":770},[425,40014,3497],{"class":1155},[425,40016,39679],{"class":701},[425,40018,39682],{"class":1155},[425,40020,39685],{"class":1155},[425,40022,39688],{"class":691},[425,40024,4739],{"class":701},[425,40026,40027],{"class":427,"line":780},[425,40028,40029],{"class":1216},"            # 如果参数不存在的化初始化b=0\n",[425,40031,40032,40035,40037],{"class":427,"line":790},[425,40033,40034],{"class":701},"            nn.init.constant_(m.bias,",[425,40036,1341],{"class":691},[425,40038,1165],{"class":701},[425,40040,40041],{"class":427,"line":805},[425,40042,40043],{"class":1216},"    # 全连接层初始化\n",[425,40045,40046,40049,40051],{"class":427,"line":818},[425,40047,40048],{"class":1155},"    elif",[425,40050,39643],{"class":691},[425,40052,39719],{"class":701},[425,40054,40055],{"class":427,"line":831},[425,40056,40057],{"class":1216},"        # 这个初始化方法是利用的是正太分布的方式\n",[425,40059,40060],{"class":427,"line":841},[425,40061,40062],{"class":1216},"        # 均值为0，方差为0.01\n",[425,40064,40065,40068,40070,40072,40074],{"class":427,"line":852},[425,40066,40067],{"class":701},"        nn.init.normal_(m.weight,",[425,40069,1341],{"class":691},[425,40071,1527],{"class":701},[425,40073,39741],{"class":691},[425,40075,1165],{"class":701},[425,40077,40078],{"class":427,"line":862},[425,40079,40080],{"class":1216},"        # 初始化b参数\n",[425,40082,40083,40085,40087,40089,40091,40093],{"class":427,"line":878},[425,40084,3497],{"class":1155},[425,40086,39679],{"class":701},[425,40088,39682],{"class":1155},[425,40090,39685],{"class":1155},[425,40092,39688],{"class":691},[425,40094,4739],{"class":701},[425,40096,40097,40099,40101],{"class":427,"line":914},[425,40098,40034],{"class":701},[425,40100,1341],{"class":691},[425,40102,1165],{"class":701},[19,40104,40105],{},"②尽可能地增加批次",[19,40107,40108],{},"训练完整代码：",[416,40110,40111],{"className":31133,"code":38654,"language":31135,"meta":395,"style":395},[422,40112,40113,40119,40129,40139,40149,40153,40169,40177,40195,40199,40203,40213,40249,40253,40289,40293,40321,40325,40329,40339,40375,40379,40415,40419,40447,40451,40455,40465,40501,40505,40541,40545,40581,40585,40613,40617,40621,40631,40667,40671,40707,40711,40747,40751,40779,40783,40787,40797,40833,40837,40873,40877,40913,40917,40945,40949,40953,40963,40967,40971,40975,40995,40999,41011,41015,41027,41031,41035,41039,41043,41055,41059,41067,41071,41083,41087,41101,41105,41113,41117,41125,41129,41133,41145,41149,41163,41171,41175,41179,41187,41197,41207,41217,41227,41237,41247,41253,41257,41261,41273,41293,41299,41307],{"__ignoreMap":395},[425,40114,40115,40117],{"class":427,"line":428},[425,40116,31147],{"class":1155},[425,40118,31150],{"class":701},[425,40120,40121,40123,40125,40127],{"class":427,"line":698},[425,40122,31492],{"class":1155},[425,40124,38669],{"class":701},[425,40126,31147],{"class":1155},[425,40128,38674],{"class":701},[425,40130,40131,40133,40135,40137],{"class":427,"line":710},[425,40132,31492],{"class":1155},[425,40134,31495],{"class":701},[425,40136,31147],{"class":1155},[425,40138,31500],{"class":701},[425,40140,40141,40143,40145,40147],{"class":427,"line":721},[425,40142,31492],{"class":1155},[425,40144,31512],{"class":701},[425,40146,31147],{"class":1155},[425,40148,31517],{"class":701},[425,40150,40151],{"class":427,"line":735},[425,40152,3400],{"emptyLinePlaceholder":1084},[425,40154,40155,40157,40159,40161,40163,40165,40167],{"class":427,"line":743},[425,40156,15691],{"class":1155},[425,40158,38705],{"class":431},[425,40160,1159],{"class":701},[425,40162,31533],{"class":431},[425,40164,1706],{"class":701},[425,40166,31538],{"class":431},[425,40168,31541],{"class":701},[425,40170,40171,40173,40175],{"class":427,"line":751},[425,40172,31556],{"class":1155},[425,40174,31559],{"class":691},[425,40176,31562],{"class":701},[425,40178,40179,40181,40183,40185,40187,40189,40191,40193],{"class":427,"line":759},[425,40180,31572],{"class":691},[425,40182,1159],{"class":701},[425,40184,38732],{"class":691},[425,40186,13434],{"class":701},[425,40188,31578],{"class":691},[425,40190,31581],{"class":701},[425,40192,31584],{"class":691},[425,40194,2976],{"class":701},[425,40196,40197],{"class":427,"line":770},[425,40198,38747],{"class":1216},[425,40200,40201],{"class":427,"line":780},[425,40202,38752],{"class":1216},[425,40204,40205,40207,40209,40211],{"class":427,"line":790},[425,40206,31600],{"class":691},[425,40208,38759],{"class":701},[425,40210,1204],{"class":1155},[425,40212,38764],{"class":701},[425,40214,40215,40217,40219,40221,40223,40225,40227,40229,40231,40233,40235,40237,40239,40241,40243,40245,40247],{"class":427,"line":805},[425,40216,38769],{"class":701},[425,40218,31611],{"class":6216},[425,40220,1204],{"class":1155},[425,40222,1367],{"class":691},[425,40224,1527],{"class":701},[425,40226,31620],{"class":6216},[425,40228,1204],{"class":1155},[425,40230,1353],{"class":691},[425,40232,1527],{"class":701},[425,40234,31629],{"class":6216},[425,40236,1204],{"class":1155},[425,40238,1229],{"class":691},[425,40240,1527],{"class":701},[425,40242,31638],{"class":6216},[425,40244,1204],{"class":1155},[425,40246,1367],{"class":691},[425,40248,38802],{"class":701},[425,40250,40251],{"class":427,"line":818},[425,40252,38807],{"class":701},[425,40254,40255,40257,40259,40261,40263,40265,40267,40269,40271,40273,40275,40277,40279,40281,40283,40285,40287],{"class":427,"line":831},[425,40256,38769],{"class":701},[425,40258,31611],{"class":6216},[425,40260,1204],{"class":1155},[425,40262,1353],{"class":691},[425,40264,1527],{"class":701},[425,40266,31620],{"class":6216},[425,40268,1204],{"class":1155},[425,40270,1353],{"class":691},[425,40272,1527],{"class":701},[425,40274,31629],{"class":6216},[425,40276,1204],{"class":1155},[425,40278,1229],{"class":691},[425,40280,1527],{"class":701},[425,40282,31638],{"class":6216},[425,40284,1204],{"class":1155},[425,40286,1367],{"class":691},[425,40288,38802],{"class":701},[425,40290,40291],{"class":427,"line":841},[425,40292,38807],{"class":701},[425,40294,40295,40297,40299,40301,40303,40305,40307,40309,40311,40313,40315,40317,40319],{"class":427,"line":852},[425,40296,38852],{"class":701},[425,40298,31629],{"class":6216},[425,40300,1204],{"class":1155},[425,40302,1235],{"class":691},[425,40304,1527],{"class":701},[425,40306,31684],{"class":6216},[425,40308,1204],{"class":1155},[425,40310,1235],{"class":691},[425,40312,1527],{"class":701},[425,40314,31638],{"class":6216},[425,40316,1204],{"class":1155},[425,40318,1341],{"class":691},[425,40320,1165],{"class":701},[425,40322,40323],{"class":427,"line":862},[425,40324,38881],{"class":701},[425,40326,40327],{"class":427,"line":878},[425,40328,38886],{"class":1216},[425,40330,40331,40333,40335,40337],{"class":427,"line":914},[425,40332,31600],{"class":691},[425,40334,38893],{"class":701},[425,40336,1204],{"class":1155},[425,40338,38764],{"class":701},[425,40340,40341,40343,40345,40347,40349,40351,40353,40355,40357,40359,40361,40363,40365,40367,40369,40371,40373],{"class":427,"line":943},[425,40342,38769],{"class":701},[425,40344,31611],{"class":6216},[425,40346,1204],{"class":1155},[425,40348,1353],{"class":691},[425,40350,1527],{"class":701},[425,40352,31620],{"class":6216},[425,40354,1204],{"class":1155},[425,40356,32825],{"class":691},[425,40358,1527],{"class":701},[425,40360,31629],{"class":6216},[425,40362,1204],{"class":1155},[425,40364,1229],{"class":691},[425,40366,1527],{"class":701},[425,40368,31638],{"class":6216},[425,40370,1204],{"class":1155},[425,40372,1367],{"class":691},[425,40374,38802],{"class":701},[425,40376,40377],{"class":427,"line":956},[425,40378,38807],{"class":701},[425,40380,40381,40383,40385,40387,40389,40391,40393,40395,40397,40399,40401,40403,40405,40407,40409,40411,40413],{"class":427,"line":964},[425,40382,38769],{"class":701},[425,40384,31611],{"class":6216},[425,40386,1204],{"class":1155},[425,40388,32825],{"class":691},[425,40390,1527],{"class":701},[425,40392,31620],{"class":6216},[425,40394,1204],{"class":1155},[425,40396,32825],{"class":691},[425,40398,1527],{"class":701},[425,40400,31629],{"class":6216},[425,40402,1204],{"class":1155},[425,40404,1229],{"class":691},[425,40406,1527],{"class":701},[425,40408,31638],{"class":6216},[425,40410,1204],{"class":1155},[425,40412,1367],{"class":691},[425,40414,38802],{"class":701},[425,40416,40417],{"class":427,"line":2733},[425,40418,38807],{"class":701},[425,40420,40421,40423,40425,40427,40429,40431,40433,40435,40437,40439,40441,40443,40445],{"class":427,"line":2750},[425,40422,38852],{"class":701},[425,40424,31629],{"class":6216},[425,40426,1204],{"class":1155},[425,40428,1235],{"class":691},[425,40430,1527],{"class":701},[425,40432,31684],{"class":6216},[425,40434,1204],{"class":1155},[425,40436,1235],{"class":691},[425,40438,1527],{"class":701},[425,40440,31638],{"class":6216},[425,40442,1204],{"class":1155},[425,40444,1341],{"class":691},[425,40446,1165],{"class":701},[425,40448,40449],{"class":427,"line":2755},[425,40450,38881],{"class":701},[425,40452,40453],{"class":427,"line":2760},[425,40454,39014],{"class":1216},[425,40456,40457,40459,40461,40463],{"class":427,"line":2765},[425,40458,31600],{"class":691},[425,40460,39021],{"class":701},[425,40462,1204],{"class":1155},[425,40464,38764],{"class":701},[425,40466,40467,40469,40471,40473,40475,40477,40479,40481,40483,40485,40487,40489,40491,40493,40495,40497,40499],{"class":427,"line":2779},[425,40468,38769],{"class":701},[425,40470,31611],{"class":6216},[425,40472,1204],{"class":1155},[425,40474,32825],{"class":691},[425,40476,1527],{"class":701},[425,40478,31620],{"class":6216},[425,40480,1204],{"class":1155},[425,40482,35625],{"class":691},[425,40484,1527],{"class":701},[425,40486,31629],{"class":6216},[425,40488,1204],{"class":1155},[425,40490,1229],{"class":691},[425,40492,1527],{"class":701},[425,40494,31638],{"class":6216},[425,40496,1204],{"class":1155},[425,40498,1367],{"class":691},[425,40500,38802],{"class":701},[425,40502,40503],{"class":427,"line":2784},[425,40504,38807],{"class":701},[425,40506,40507,40509,40511,40513,40515,40517,40519,40521,40523,40525,40527,40529,40531,40533,40535,40537,40539],{"class":427,"line":3577},[425,40508,38769],{"class":701},[425,40510,31611],{"class":6216},[425,40512,1204],{"class":1155},[425,40514,35625],{"class":691},[425,40516,1527],{"class":701},[425,40518,31620],{"class":6216},[425,40520,1204],{"class":1155},[425,40522,35625],{"class":691},[425,40524,1527],{"class":701},[425,40526,31629],{"class":6216},[425,40528,1204],{"class":1155},[425,40530,1229],{"class":691},[425,40532,1527],{"class":701},[425,40534,31638],{"class":6216},[425,40536,1204],{"class":1155},[425,40538,1367],{"class":691},[425,40540,38802],{"class":701},[425,40542,40543],{"class":427,"line":3591},[425,40544,38807],{"class":701},[425,40546,40547,40549,40551,40553,40555,40557,40559,40561,40563,40565,40567,40569,40571,40573,40575,40577,40579],{"class":427,"line":3599},[425,40548,38769],{"class":701},[425,40550,31611],{"class":6216},[425,40552,1204],{"class":1155},[425,40554,35625],{"class":691},[425,40556,1527],{"class":701},[425,40558,31620],{"class":6216},[425,40560,1204],{"class":1155},[425,40562,35625],{"class":691},[425,40564,1527],{"class":701},[425,40566,31629],{"class":6216},[425,40568,1204],{"class":1155},[425,40570,1229],{"class":691},[425,40572,1527],{"class":701},[425,40574,31638],{"class":6216},[425,40576,1204],{"class":1155},[425,40578,1367],{"class":691},[425,40580,38802],{"class":701},[425,40582,40583],{"class":427,"line":3604},[425,40584,38807],{"class":701},[425,40586,40587,40589,40591,40593,40595,40597,40599,40601,40603,40605,40607,40609,40611],{"class":427,"line":3610},[425,40588,38852],{"class":701},[425,40590,31629],{"class":6216},[425,40592,1204],{"class":1155},[425,40594,1235],{"class":691},[425,40596,1527],{"class":701},[425,40598,31684],{"class":6216},[425,40600,1204],{"class":1155},[425,40602,1235],{"class":691},[425,40604,1527],{"class":701},[425,40606,31638],{"class":6216},[425,40608,1204],{"class":1155},[425,40610,1341],{"class":691},[425,40612,1165],{"class":701},[425,40614,40615],{"class":427,"line":3616},[425,40616,38881],{"class":701},[425,40618,40619],{"class":427,"line":3621},[425,40620,39182],{"class":1216},[425,40622,40623,40625,40627,40629],{"class":427,"line":8948},[425,40624,31600],{"class":691},[425,40626,39189],{"class":701},[425,40628,1204],{"class":1155},[425,40630,38764],{"class":701},[425,40632,40633,40635,40637,40639,40641,40643,40645,40647,40649,40651,40653,40655,40657,40659,40661,40663,40665],{"class":427,"line":8972},[425,40634,38769],{"class":701},[425,40636,31611],{"class":6216},[425,40638,1204],{"class":1155},[425,40640,35625],{"class":691},[425,40642,1527],{"class":701},[425,40644,31620],{"class":6216},[425,40646,1204],{"class":1155},[425,40648,39212],{"class":691},[425,40650,1527],{"class":701},[425,40652,31629],{"class":6216},[425,40654,1204],{"class":1155},[425,40656,1229],{"class":691},[425,40658,1527],{"class":701},[425,40660,31638],{"class":6216},[425,40662,1204],{"class":1155},[425,40664,1367],{"class":691},[425,40666,38802],{"class":701},[425,40668,40669],{"class":427,"line":8977},[425,40670,38807],{"class":701},[425,40672,40673,40675,40677,40679,40681,40683,40685,40687,40689,40691,40693,40695,40697,40699,40701,40703,40705],{"class":427,"line":8983},[425,40674,38769],{"class":701},[425,40676,31611],{"class":6216},[425,40678,1204],{"class":1155},[425,40680,39212],{"class":691},[425,40682,1527],{"class":701},[425,40684,31620],{"class":6216},[425,40686,1204],{"class":1155},[425,40688,39212],{"class":691},[425,40690,1527],{"class":701},[425,40692,31629],{"class":6216},[425,40694,1204],{"class":1155},[425,40696,1229],{"class":691},[425,40698,1527],{"class":701},[425,40700,31638],{"class":6216},[425,40702,1204],{"class":1155},[425,40704,1367],{"class":691},[425,40706,38802],{"class":701},[425,40708,40709],{"class":427,"line":9010},[425,40710,38807],{"class":701},[425,40712,40713,40715,40717,40719,40721,40723,40725,40727,40729,40731,40733,40735,40737,40739,40741,40743,40745],{"class":427,"line":9015},[425,40714,38769],{"class":701},[425,40716,31611],{"class":6216},[425,40718,1204],{"class":1155},[425,40720,39212],{"class":691},[425,40722,1527],{"class":701},[425,40724,31620],{"class":6216},[425,40726,1204],{"class":1155},[425,40728,39212],{"class":691},[425,40730,1527],{"class":701},[425,40732,31629],{"class":6216},[425,40734,1204],{"class":1155},[425,40736,1229],{"class":691},[425,40738,1527],{"class":701},[425,40740,31638],{"class":6216},[425,40742,1204],{"class":1155},[425,40744,1367],{"class":691},[425,40746,38802],{"class":701},[425,40748,40749],{"class":427,"line":9021},[425,40750,38807],{"class":701},[425,40752,40753,40755,40757,40759,40761,40763,40765,40767,40769,40771,40773,40775,40777],{"class":427,"line":9033},[425,40754,38852],{"class":701},[425,40756,31629],{"class":6216},[425,40758,1204],{"class":1155},[425,40760,1235],{"class":691},[425,40762,1527],{"class":701},[425,40764,31684],{"class":6216},[425,40766,1204],{"class":1155},[425,40768,1235],{"class":691},[425,40770,1527],{"class":701},[425,40772,31638],{"class":6216},[425,40774,1204],{"class":1155},[425,40776,1341],{"class":691},[425,40778,1165],{"class":701},[425,40780,40781],{"class":427,"line":9045},[425,40782,38881],{"class":701},[425,40784,40785],{"class":427,"line":9057},[425,40786,39351],{"class":1216},[425,40788,40789,40791,40793,40795],{"class":427,"line":10715},[425,40790,31600],{"class":691},[425,40792,39358],{"class":701},[425,40794,1204],{"class":1155},[425,40796,38764],{"class":701},[425,40798,40799,40801,40803,40805,40807,40809,40811,40813,40815,40817,40819,40821,40823,40825,40827,40829,40831],{"class":427,"line":10740},[425,40800,38769],{"class":701},[425,40802,31611],{"class":6216},[425,40804,1204],{"class":1155},[425,40806,39212],{"class":691},[425,40808,1527],{"class":701},[425,40810,31620],{"class":6216},[425,40812,1204],{"class":1155},[425,40814,39212],{"class":691},[425,40816,1527],{"class":701},[425,40818,31629],{"class":6216},[425,40820,1204],{"class":1155},[425,40822,1229],{"class":691},[425,40824,1527],{"class":701},[425,40826,31638],{"class":6216},[425,40828,1204],{"class":1155},[425,40830,1367],{"class":691},[425,40832,38802],{"class":701},[425,40834,40835],{"class":427,"line":10763},[425,40836,38807],{"class":701},[425,40838,40839,40841,40843,40845,40847,40849,40851,40853,40855,40857,40859,40861,40863,40865,40867,40869,40871],{"class":427,"line":10787},[425,40840,38769],{"class":701},[425,40842,31611],{"class":6216},[425,40844,1204],{"class":1155},[425,40846,39212],{"class":691},[425,40848,1527],{"class":701},[425,40850,31620],{"class":6216},[425,40852,1204],{"class":1155},[425,40854,39212],{"class":691},[425,40856,1527],{"class":701},[425,40858,31629],{"class":6216},[425,40860,1204],{"class":1155},[425,40862,1229],{"class":691},[425,40864,1527],{"class":701},[425,40866,31638],{"class":6216},[425,40868,1204],{"class":1155},[425,40870,1367],{"class":691},[425,40872,38802],{"class":701},[425,40874,40875],{"class":427,"line":10792},[425,40876,38807],{"class":701},[425,40878,40879,40881,40883,40885,40887,40889,40891,40893,40895,40897,40899,40901,40903,40905,40907,40909,40911],{"class":427,"line":10797},[425,40880,38769],{"class":701},[425,40882,31611],{"class":6216},[425,40884,1204],{"class":1155},[425,40886,39212],{"class":691},[425,40888,1527],{"class":701},[425,40890,31620],{"class":6216},[425,40892,1204],{"class":1155},[425,40894,39212],{"class":691},[425,40896,1527],{"class":701},[425,40898,31629],{"class":6216},[425,40900,1204],{"class":1155},[425,40902,1229],{"class":691},[425,40904,1527],{"class":701},[425,40906,31638],{"class":6216},[425,40908,1204],{"class":1155},[425,40910,1367],{"class":691},[425,40912,38802],{"class":701},[425,40914,40915],{"class":427,"line":10802},[425,40916,38807],{"class":701},[425,40918,40919,40921,40923,40925,40927,40929,40931,40933,40935,40937,40939,40941,40943],{"class":427,"line":10811},[425,40920,38852],{"class":701},[425,40922,31629],{"class":6216},[425,40924,1204],{"class":1155},[425,40926,1235],{"class":691},[425,40928,1527],{"class":701},[425,40930,31684],{"class":6216},[425,40932,1204],{"class":1155},[425,40934,1235],{"class":691},[425,40936,1527],{"class":701},[425,40938,31638],{"class":6216},[425,40940,1204],{"class":1155},[425,40942,1341],{"class":691},[425,40944,1165],{"class":701},[425,40946,40947],{"class":427,"line":10816},[425,40948,38881],{"class":701},[425,40950,40951],{"class":427,"line":10822},[425,40952,39519],{"class":1216},[425,40954,40955,40957,40959,40961],{"class":427,"line":10843},[425,40956,31600],{"class":691},[425,40958,39526],{"class":701},[425,40960,1204],{"class":1155},[425,40962,38764],{"class":701},[425,40964,40965],{"class":427,"line":10849},[425,40966,39535],{"class":1216},[425,40968,40969],{"class":427,"line":10863},[425,40970,39540],{"class":1216},[425,40972,40973],{"class":427,"line":10869},[425,40974,39545],{"class":701},[425,40976,40977,40979,40981,40983,40985,40987,40989,40991,40993],{"class":427,"line":10896},[425,40978,39550],{"class":701},[425,40980,1518],{"class":691},[425,40982,1603],{"class":1155},[425,40984,1518],{"class":691},[425,40986,1603],{"class":1155},[425,40988,39212],{"class":691},[425,40990,1527],{"class":701},[425,40992,35625],{"class":691},[425,40994,38802],{"class":701},[425,40996,40997],{"class":427,"line":10905},[425,40998,38807],{"class":701},[425,41000,41001,41003,41005,41007,41009],{"class":427,"line":10911},[425,41002,39550],{"class":701},[425,41004,35625],{"class":691},[425,41006,1527],{"class":701},[425,41008,32825],{"class":691},[425,41010,38802],{"class":701},[425,41012,41013],{"class":427,"line":10919},[425,41014,38807],{"class":701},[425,41016,41017,41019,41021,41023,41025],{"class":427,"line":10924},[425,41018,39550],{"class":701},[425,41020,32825],{"class":691},[425,41022,1527],{"class":701},[425,41024,1594],{"class":691},[425,41026,1165],{"class":701},[425,41028,41029],{"class":427,"line":17601},[425,41030,38881],{"class":701},[425,41032,41033],{"class":427,"line":17607},[425,41034,3400],{"emptyLinePlaceholder":1084},[425,41036,41037],{"class":427,"line":17630},[425,41038,39611],{"class":1216},[425,41040,41041],{"class":427,"line":17636},[425,41042,39616],{"class":1216},[425,41044,41045,41047,41049,41051,41053],{"class":427,"line":17659},[425,41046,4403],{"class":1155},[425,41048,39623],{"class":701},[425,41050,27034],{"class":1155},[425,41052,39628],{"class":691},[425,41054,39631],{"class":701},[425,41056,41057],{"class":427,"line":17673},[425,41058,39636],{"class":1216},[425,41060,41061,41063,41065],{"class":427,"line":17693},[425,41062,5642],{"class":1155},[425,41064,39643],{"class":691},[425,41066,39646],{"class":701},[425,41068,41069],{"class":427,"line":17699},[425,41070,39651],{"class":1216},[425,41072,41073,41075,41077,41079,41081],{"class":427,"line":17710},[425,41074,39656],{"class":701},[425,41076,39659],{"class":6216},[425,41078,1204],{"class":1155},[425,41080,39664],{"class":435},[425,41082,1165],{"class":701},[425,41084,41085],{"class":427,"line":17733},[425,41086,39671],{"class":1216},[425,41088,41089,41091,41093,41095,41097,41099],{"class":427,"line":17755},[425,41090,39676],{"class":1155},[425,41092,39679],{"class":701},[425,41094,39682],{"class":1155},[425,41096,39685],{"class":1155},[425,41098,39688],{"class":691},[425,41100,4739],{"class":701},[425,41102,41103],{"class":427,"line":17760},[425,41104,39695],{"class":1216},[425,41106,41107,41109,41111],{"class":427,"line":17766},[425,41108,39700],{"class":701},[425,41110,1341],{"class":691},[425,41112,1165],{"class":701},[425,41114,41115],{"class":427,"line":17780},[425,41116,39709],{"class":1216},[425,41118,41119,41121,41123],{"class":427,"line":17793},[425,41120,39714],{"class":1155},[425,41122,39643],{"class":691},[425,41124,39719],{"class":701},[425,41126,41127],{"class":427,"line":17798},[425,41128,39724],{"class":1216},[425,41130,41131],{"class":427,"line":17812},[425,41132,39729],{"class":1216},[425,41134,41135,41137,41139,41141,41143],{"class":427,"line":17817},[425,41136,39734],{"class":701},[425,41138,1341],{"class":691},[425,41140,1527],{"class":701},[425,41142,39741],{"class":691},[425,41144,1165],{"class":701},[425,41146,41147],{"class":427,"line":17823},[425,41148,39748],{"class":1216},[425,41150,41151,41153,41155,41157,41159,41161],{"class":427,"line":17828},[425,41152,39676],{"class":1155},[425,41154,39679],{"class":701},[425,41156,39682],{"class":1155},[425,41158,39685],{"class":1155},[425,41160,39688],{"class":691},[425,41162,4739],{"class":701},[425,41164,41165,41167,41169],{"class":427,"line":17842},[425,41166,39700],{"class":701},[425,41168,1341],{"class":691},[425,41170,1165],{"class":701},[425,41172,41173],{"class":427,"line":17847},[425,41174,3400],{"emptyLinePlaceholder":1084},[425,41176,41177],{"class":427,"line":17852},[425,41178,35920],{"class":1216},[425,41180,41181,41183,41185],{"class":427,"line":17866},[425,41182,31556],{"class":1155},[425,41184,31848],{"class":431},[425,41186,31851],{"class":701},[425,41188,41189,41191,41193,41195],{"class":427,"line":17878},[425,41190,31856],{"class":701},[425,41192,1204],{"class":1155},[425,41194,31578],{"class":691},[425,41196,39797],{"class":701},[425,41198,41199,41201,41203,41205],{"class":427,"line":17883},[425,41200,31856],{"class":701},[425,41202,1204],{"class":1155},[425,41204,31578],{"class":691},[425,41206,39808],{"class":701},[425,41208,41209,41211,41213,41215],{"class":427,"line":17896},[425,41210,31856],{"class":701},[425,41212,1204],{"class":1155},[425,41214,31578],{"class":691},[425,41216,39819],{"class":701},[425,41218,41219,41221,41223,41225],{"class":427,"line":17901},[425,41220,31856],{"class":701},[425,41222,1204],{"class":1155},[425,41224,31578],{"class":691},[425,41226,39830],{"class":701},[425,41228,41229,41231,41233,41235],{"class":427,"line":17906},[425,41230,31856],{"class":701},[425,41232,1204],{"class":1155},[425,41234,31578],{"class":691},[425,41236,39841],{"class":701},[425,41238,41239,41241,41243,41245],{"class":427,"line":17911},[425,41240,31856],{"class":701},[425,41242,1204],{"class":1155},[425,41244,31578],{"class":691},[425,41246,39852],{"class":701},[425,41248,41249,41251],{"class":427,"line":17924},[425,41250,15749],{"class":1155},[425,41252,31964],{"class":701},[425,41254,41255],{"class":427,"line":17929},[425,41256,3400],{"emptyLinePlaceholder":1084},[425,41258,41259],{"class":427,"line":33388},[425,41260,39867],{"class":1216},[425,41262,41263,41265,41267,41269,41271],{"class":427,"line":33394},[425,41264,2544],{"class":1155},[425,41266,31975],{"class":691},[425,41268,3949],{"class":1155},[425,41270,39878],{"class":435},[425,41272,4739],{"class":701},[425,41274,41275,41277,41279,41281,41283,41285,41287,41289,41291],{"class":427,"line":33400},[425,41276,31992],{"class":701},[425,41278,1204],{"class":1155},[425,41280,31206],{"class":701},[425,41282,31999],{"class":435},[425,41284,2706],{"class":1155},[425,41286,32004],{"class":701},[425,41288,2703],{"class":1155},[425,41290,31231],{"class":435},[425,41292,1165],{"class":701},[425,41294,41295,41297],{"class":427,"line":33406},[425,41296,32054],{"class":691},[425,41298,31240],{"class":701},[425,41300,41301,41303,41305],{"class":427,"line":33412},[425,41302,32044],{"class":701},[425,41304,1204],{"class":1155},[425,41306,39915],{"class":701},[425,41308,41309,41311,41313,41315,41317,41319,41321,41323],{"class":427,"line":33423},[425,41310,32054],{"class":691},[425,41312,32057],{"class":701},[425,41314,1367],{"class":691},[425,41316,1527],{"class":701},[425,41318,32256],{"class":691},[425,41320,1527],{"class":701},[425,41322,32256],{"class":691},[425,41324,32070],{"class":701},[972,41326,41327],{"start":710},[450,41328,41329],{},"测试代码",[416,41331,41333],{"className":31133,"code":41332,"language":31135,"meta":395,"style":395},"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",[422,41334,41335,41341,41351,41361,41365,41375,41386,41390,41394,41398,41406,41422,41432,41448,41458,41472,41476,41486,41496,41506,41512,41516,41520,41528,41532,41548,41556,41560,41564,41572,41580,41584,41588,41592,41596,41602,41606,41616,41624,41632,41636,41640,41644,41652,41656,41672,41676,41680,41684,41696,41700,41712,41716,41720,41732,41736,41746,41750,41754,41766,41770,41779,41783,41787,41795,41799,41807,41811,41815,41819,41823,41827,41843,41851,41855,41859,41907,41913,41917,41927,41935,41943,41947,41951,41955,41959,41967,41971,41987,41991,41999,42007],{"__ignoreMap":395},[425,41336,41337,41339],{"class":427,"line":428},[425,41338,31147],{"class":1155},[425,41340,31150],{"class":701},[425,41342,41343,41345,41347,41349],{"class":427,"line":698},[425,41344,31147],{"class":1155},[425,41346,32170],{"class":701},[425,41348,32138],{"class":1155},[425,41350,32175],{"class":701},[425,41352,41353,41355,41357,41359],{"class":427,"line":710},[425,41354,31492],{"class":1155},[425,41356,32153],{"class":701},[425,41358,31147],{"class":1155},[425,41360,32158],{"class":701},[425,41362,41363],{"class":427,"line":721},[425,41364,34677],{"class":1216},[425,41366,41367,41369,41371,41373],{"class":427,"line":735},[425,41368,31492],{"class":1155},[425,41370,32123],{"class":701},[425,41372,31147],{"class":1155},[425,41374,32128],{"class":701},[425,41376,41377,41379,41381,41383],{"class":427,"line":743},[425,41378,31492],{"class":1155},[425,41380,32669],{"class":701},[425,41382,31147],{"class":1155},[425,41384,41385],{"class":691}," VGG16\n",[425,41387,41388],{"class":427,"line":751},[425,41389,3400],{"emptyLinePlaceholder":1084},[425,41391,41392],{"class":427,"line":759},[425,41393,3400],{"emptyLinePlaceholder":1084},[425,41395,41396],{"class":427,"line":770},[425,41397,34706],{"class":1216},[425,41399,41400,41402,41404],{"class":427,"line":780},[425,41401,32702],{"class":1155},[425,41403,34713],{"class":431},[425,41405,32708],{"class":701},[425,41407,41408,41410,41412,41414,41416,41418,41420],{"class":427,"line":790},[425,41409,34720],{"class":701},[425,41411,1204],{"class":1155},[425,41413,32210],{"class":701},[425,41415,32213],{"class":6216},[425,41417,1204],{"class":1155},[425,41419,32218],{"class":435},[425,41421,32221],{"class":701},[425,41423,41424,41426,41428,41430],{"class":427,"line":805},[425,41425,34737],{"class":6216},[425,41427,1204],{"class":1155},[425,41429,34742],{"class":691},[425,41431,32221],{"class":701},[425,41433,41434,41436,41438,41440,41442,41444,41446],{"class":427,"line":818},[425,41435,34749],{"class":6216},[425,41437,1204],{"class":1155},[425,41439,32248],{"class":701},[425,41441,32251],{"class":6216},[425,41443,1204],{"class":1155},[425,41445,32256],{"class":691},[425,41447,32259],{"class":701},[425,41449,41450,41452,41454,41456],{"class":427,"line":831},[425,41451,34766],{"class":6216},[425,41453,1204],{"class":1155},[425,41455,32231],{"class":691},[425,41457,1165],{"class":701},[425,41459,41460,41462,41464,41466,41468,41470],{"class":427,"line":841},[425,41461,34777],{"class":701},[425,41463,1204],{"class":1155},[425,41465,32289],{"class":701},[425,41467,32292],{"class":6216},[425,41469,1204],{"class":1155},[425,41471,34788],{"class":701},[425,41473,41474],{"class":427,"line":852},[425,41475,34793],{"class":1216},[425,41477,41478,41480,41482,41484],{"class":427,"line":862},[425,41479,34798],{"class":6216},[425,41481,1204],{"class":1155},[425,41483,1367],{"class":691},[425,41485,32221],{"class":701},[425,41487,41488,41490,41492,41494],{"class":427,"line":878},[425,41489,34809],{"class":6216},[425,41491,1204],{"class":1155},[425,41493,32231],{"class":691},[425,41495,32221],{"class":701},[425,41497,41498,41500,41502,41504],{"class":427,"line":914},[425,41499,34820],{"class":6216},[425,41501,1204],{"class":1155},[425,41503,1341],{"class":691},[425,41505,1165],{"class":701},[425,41507,41508,41510],{"class":427,"line":943},[425,41509,5090],{"class":1155},[425,41511,34833],{"class":701},[425,41513,41514],{"class":427,"line":956},[425,41515,3400],{"emptyLinePlaceholder":1084},[425,41517,41518],{"class":427,"line":964},[425,41519,34842],{"class":1216},[425,41521,41522,41524,41526],{"class":427,"line":2733},[425,41523,32702],{"class":1155},[425,41525,34849],{"class":431},[425,41527,34852],{"class":701},[425,41529,41530],{"class":427,"line":2750},[425,41531,34857],{"class":1216},[425,41533,41534,41536,41538,41540,41542,41544,41546],{"class":427,"line":2755},[425,41535,31992],{"class":701},[425,41537,1204],{"class":1155},[425,41539,31999],{"class":435},[425,41541,2706],{"class":1155},[425,41543,32004],{"class":701},[425,41545,2703],{"class":1155},[425,41547,34874],{"class":435},[425,41549,41550,41552,41554],{"class":427,"line":2760},[425,41551,32044],{"class":701},[425,41553,1204],{"class":1155},[425,41555,33044],{"class":701},[425,41557,41558],{"class":427,"line":2765},[425,41559,3400],{"emptyLinePlaceholder":1084},[425,41561,41562],{"class":427,"line":2779},[425,41563,34891],{"class":1216},[425,41565,41566,41568,41570],{"class":427,"line":2784},[425,41567,34896],{"class":701},[425,41569,1204],{"class":1155},[425,41571,33097],{"class":691},[425,41573,41574,41576,41578],{"class":427,"line":3577},[425,41575,34905],{"class":701},[425,41577,1204],{"class":1155},[425,41579,4085],{"class":691},[425,41581,41582],{"class":427,"line":3591},[425,41583,3400],{"emptyLinePlaceholder":1084},[425,41585,41586],{"class":427,"line":3599},[425,41587,34918],{"class":1216},[425,41589,41590],{"class":427,"line":3604},[425,41591,34923],{"class":1216},[425,41593,41594],{"class":427,"line":3610},[425,41595,34928],{"class":1216},[425,41597,41598,41600],{"class":427,"line":3616},[425,41599,34933],{"class":1155},[425,41601,33639],{"class":701},[425,41603,41604],{"class":427,"line":3621},[425,41605,34940],{"class":1216},[425,41607,41608,41610,41612,41614],{"class":427,"line":8948},[425,41609,4403],{"class":1155},[425,41611,34947],{"class":701},[425,41613,27034],{"class":1155},[425,41615,34952],{"class":701},[425,41617,41618,41620,41622],{"class":427,"line":8972},[425,41619,34957],{"class":701},[425,41621,1204],{"class":1155},[425,41623,34962],{"class":701},[425,41625,41626,41628,41630],{"class":427,"line":8977},[425,41627,34967],{"class":701},[425,41629,1204],{"class":1155},[425,41631,34972],{"class":701},[425,41633,41634],{"class":427,"line":8983},[425,41635,34977],{"class":1216},[425,41637,41638],{"class":427,"line":9010},[425,41639,33630],{"class":701},[425,41641,41642],{"class":427,"line":9015},[425,41643,34986],{"class":1216},[425,41645,41646,41648,41650],{"class":427,"line":9021},[425,41647,33415],{"class":701},[425,41649,1204],{"class":1155},[425,41651,34995],{"class":701},[425,41653,41654],{"class":427,"line":9033},[425,41655,35000],{"class":1216},[425,41657,41658,41660,41662,41664,41666,41668,41670],{"class":427,"line":9045},[425,41659,33432],{"class":701},[425,41661,1204],{"class":1155},[425,41663,33437],{"class":701},[425,41665,33440],{"class":6216},[425,41667,1204],{"class":1155},[425,41669,1367],{"class":691},[425,41671,1165],{"class":701},[425,41673,41674],{"class":427,"line":9057},[425,41675,35021],{"class":1216},[425,41677,41678],{"class":427,"line":10715},[425,41679,35026],{"class":1216},[425,41681,41682],{"class":427,"line":10740},[425,41683,35031],{"class":1216},[425,41685,41686,41688,41690,41692,41694],{"class":427,"line":10763},[425,41687,35036],{"class":701},[425,41689,10476],{"class":1155},[425,41691,33542],{"class":701},[425,41693,3949],{"class":1155},[425,41695,35045],{"class":701},[425,41697,41698],{"class":427,"line":10787},[425,41699,35050],{"class":1216},[425,41701,41702,41704,41706,41708,41710],{"class":427,"line":10792},[425,41703,35055],{"class":701},[425,41705,10476],{"class":1155},[425,41707,35060],{"class":701},[425,41709,1341],{"class":691},[425,41711,1165],{"class":701},[425,41713,41714],{"class":427,"line":10797},[425,41715,3400],{"emptyLinePlaceholder":1084},[425,41717,41718],{"class":427,"line":10802},[425,41719,35073],{"class":1216},[425,41721,41722,41724,41726,41728,41730],{"class":427,"line":10811},[425,41723,35078],{"class":701},[425,41725,1204],{"class":1155},[425,41727,35083],{"class":701},[425,41729,1732],{"class":1155},[425,41731,35088],{"class":701},[425,41733,41734],{"class":427,"line":10816},[425,41735,35093],{"class":1216},[425,41737,41738,41740,41742,41744],{"class":427,"line":10822},[425,41739,33206],{"class":691},[425,41741,1159],{"class":701},[425,41743,35102],{"class":435},[425,41745,35105],{"class":701},[425,41747,41748],{"class":427,"line":10843},[425,41749,3400],{"emptyLinePlaceholder":1084},[425,41751,41752],{"class":427,"line":10849},[425,41753,35114],{"class":1216},[425,41755,41756,41758,41760,41762,41764],{"class":427,"line":10863},[425,41757,2544],{"class":1155},[425,41759,31975],{"class":691},[425,41761,3949],{"class":1155},[425,41763,31980],{"class":435},[425,41765,4739],{"class":701},[425,41767,41768],{"class":427,"line":10869},[425,41769,35131],{"class":1216},[425,41771,41772,41774,41776],{"class":427,"line":10896},[425,41773,32044],{"class":701},[425,41775,1204],{"class":1155},[425,41777,41778],{"class":701},"VGG16()\n",[425,41780,41781],{"class":427,"line":10905},[425,41782,35144],{"class":1216},[425,41784,41785],{"class":427,"line":10911},[425,41786,35149],{"class":1216},[425,41788,41789,41791,41793],{"class":427,"line":10919},[425,41790,35154],{"class":701},[425,41792,35157],{"class":435},[425,41794,31252],{"class":701},[425,41796,41797],{"class":427,"line":10924},[425,41798,35164],{"class":1216},[425,41800,41801,41803,41805],{"class":427,"line":17601},[425,41802,34777],{"class":701},[425,41804,1204],{"class":1155},[425,41806,35173],{"class":701},[425,41808,41809],{"class":427,"line":17607},[425,41810,35178],{"class":1216},[425,41812,41813],{"class":427,"line":17630},[425,41814,35183],{"class":701},[425,41816,41817],{"class":427,"line":17636},[425,41818,3400],{"emptyLinePlaceholder":1084},[425,41820,41821],{"class":427,"line":17659},[425,41822,35192],{"class":1216},[425,41824,41825],{"class":427,"line":17673},[425,41826,35197],{"class":1216},[425,41828,41829,41831,41833,41835,41837,41839,41841],{"class":427,"line":17693},[425,41830,31992],{"class":701},[425,41832,1204],{"class":1155},[425,41834,31999],{"class":435},[425,41836,2706],{"class":1155},[425,41838,32004],{"class":701},[425,41840,2703],{"class":1155},[425,41842,34874],{"class":435},[425,41844,41845,41847,41849],{"class":427,"line":17699},[425,41846,32044],{"class":701},[425,41848,1204],{"class":1155},[425,41850,33044],{"class":701},[425,41852,41853],{"class":427,"line":17710},[425,41854,35226],{"class":1216},[425,41856,41857],{"class":427,"line":17733},[425,41858,35231],{"class":1216},[425,41860,41861,41863,41865,41867,41869,41871,41873,41875,41877,41879,41881,41883,41885,41887,41889,41891,41893,41895,41897,41899,41901,41903,41905],{"class":427,"line":17755},[425,41862,35236],{"class":701},[425,41864,1204],{"class":1155},[425,41866,2037],{"class":701},[425,41868,35243],{"class":435},[425,41870,1527],{"class":701},[425,41872,35248],{"class":435},[425,41874,1527],{"class":701},[425,41876,35253],{"class":435},[425,41878,1527],{"class":701},[425,41880,35258],{"class":435},[425,41882,1527],{"class":701},[425,41884,35263],{"class":435},[425,41886,1527],{"class":701},[425,41888,35268],{"class":435},[425,41890,1527],{"class":701},[425,41892,35273],{"class":435},[425,41894,1527],{"class":701},[425,41896,35278],{"class":435},[425,41898,1527],{"class":701},[425,41900,35283],{"class":435},[425,41902,1527],{"class":701},[425,41904,35288],{"class":435},[425,41906,34001],{"class":701},[425,41908,41909,41911],{"class":427,"line":17760},[425,41910,34933],{"class":1155},[425,41912,33639],{"class":701},[425,41914,41915],{"class":427,"line":17766},[425,41916,35301],{"class":1216},[425,41918,41919,41921,41923,41925],{"class":427,"line":17780},[425,41920,4403],{"class":1155},[425,41922,35308],{"class":701},[425,41924,27034],{"class":1155},[425,41926,34952],{"class":701},[425,41928,41929,41931,41933],{"class":427,"line":17793},[425,41930,33365],{"class":701},[425,41932,1204],{"class":1155},[425,41934,33370],{"class":701},[425,41936,41937,41939,41941],{"class":427,"line":17798},[425,41938,33380],{"class":701},[425,41940,1204],{"class":1155},[425,41942,33385],{"class":701},[425,41944,41945],{"class":427,"line":17812},[425,41946,3400],{"emptyLinePlaceholder":1084},[425,41948,41949],{"class":427,"line":17817},[425,41950,35337],{"class":1216},[425,41952,41953],{"class":427,"line":17823},[425,41954,33630],{"class":701},[425,41956,41957],{"class":427,"line":17828},[425,41958,35346],{"class":1216},[425,41960,41961,41963,41965],{"class":427,"line":17842},[425,41962,33415],{"class":701},[425,41964,1204],{"class":1155},[425,41966,33420],{"class":701},[425,41968,41969],{"class":427,"line":17847},[425,41970,35359],{"class":1216},[425,41972,41973,41975,41977,41979,41981,41983,41985],{"class":427,"line":17852},[425,41974,33432],{"class":701},[425,41976,1204],{"class":1155},[425,41978,33437],{"class":701},[425,41980,33440],{"class":6216},[425,41982,1204],{"class":1155},[425,41984,1367],{"class":691},[425,41986,1165],{"class":701},[425,41988,41989],{"class":427,"line":17866},[425,41990,35380],{"class":1216},[425,41992,41993,41995,41997],{"class":427,"line":17878},[425,41994,35385],{"class":701},[425,41996,1204],{"class":1155},[425,41998,35390],{"class":701},[425,42000,42001,42003,42005],{"class":427,"line":17883},[425,42002,35395],{"class":701},[425,42004,1204],{"class":1155},[425,42006,35400],{"class":701},[425,42008,42009,42011,42013,42015,42017,42019,42021,42023],{"class":427,"line":17896},[425,42010,35405],{"class":691},[425,42012,1159],{"class":701},[425,42014,35410],{"class":435},[425,42016,35413],{"class":701},[425,42018,35416],{"class":435},[425,42020,1527],{"class":701},[425,42022,35421],{"class":435},[425,42024,35424],{"class":701},[14,42026,42028],{"id":42027},"_23googlenet","2.3.GoogLeNet",[22995,42030,42032],{"id":42031},"_231原理","2.3.1.原理",[972,42034,42035],{},[450,42036,42037],{},"网络结构",[19,42039,42040],{},[393,42041],{"alt":395,"src":42042},"\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,42044,42045],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,42047,42048],{},[393,42049],{"alt":395,"src":42050},"\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,42052,42053],{},[393,42054],{"alt":395,"src":42055},"\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,42057,42058],{},[393,42059],{"alt":395,"src":42060},"\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",[972,42062,42063],{"start":698},[450,42064,42065],{},"1x1卷积的优点",[19,42067,42068],{},[393,42069],{"alt":395,"src":42070},"\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",[972,42072,42073],{"start":710},[450,42074,42075],{},"全局平均池化层优点",[19,42077,42078],{},[393,42079],{"alt":395,"src":42080},"\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,42082,42083],{},[393,42084],{"alt":395,"src":42085},"\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",[972,42087,42088],{"start":721},[450,42089,42090],{},"参数详细描述",[19,42092,42093],{},[393,42094],{"alt":395,"src":42095},"\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,42097,42098],{},[393,42099],{"alt":395,"src":42100},"\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,42102,42103],{},[393,42104],{"alt":395,"src":42105},"\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,42107,42108],{},[393,42109],{"alt":395,"src":42110},"\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,42112,42113],{},[393,42114],{"alt":395,"src":42115},"\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,42117,42118],{},[393,42119],{"alt":395,"src":42120},"\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,42122,42123],{},[393,42124],{"alt":395,"src":42125},"\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,42127,42128],{},[393,42129],{"alt":395,"src":42130},"\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,42132,42133],{},[393,42134],{"alt":395,"src":42135},"\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,42137,42138],{},[393,42139],{"alt":395,"src":42140},"\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,42142,42143],{},[393,42144],{"alt":395,"src":42145},"\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,42147,42148],{},[393,42149],{"alt":395,"src":42150},"\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,42152,42153],{},[393,42154],{"alt":395,"src":42155},"\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,42157,42158],{},[393,42159],{"alt":395,"src":42160},"\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,42162,42163],{},[393,42164],{"alt":395,"src":42165},"\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,42167,42168],{},[393,42169],{"alt":395,"src":42170},"\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,42172,42173],{},[393,42174],{"alt":395,"src":42175},"\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,42177,42178],{},[393,42179],{"alt":395,"src":42180},"\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,42182,42183],{},[393,42184],{"alt":395,"src":42185},"\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,42187,42188],{},[393,42189],{"alt":395,"src":42190},"\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,42192,42193],{},[393,42194],{"alt":395,"src":42195},"\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",[22995,42197,42199],{"id":42198},"_232代码实现","2.3.2.代码实现",[972,42201,42202],{},[450,42203,31466],{},[19,42205,42206],{},"根据原理一步一步搭建即可",[416,42208,42210],{"className":31133,"code":42209,"language":31135,"meta":395,"style":395},"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",[422,42211,42212,42218,42228,42238,42242,42259,42268,42283,42293,42298,42331,42336,42373,42420,42425,42461,42508,42513,42518,42553,42585,42589,42597,42613,42637,42662,42683,42688,42703,42707,42711,42716,42733,42738,42747,42762,42773,42817,42821,42849,42853,42864,42892,42896,42933,42937,42965,42969,42980,43016,43048,43076,43080,43091,43125,43157,43189,43222,43256,43284,43288,43299,43332,43364,43378,43382,43395,43399,43404,43416,43424,43446,43451,43456,43461,43466,43471,43476,43490,43498,43507,43520,43535,43544,43548,43556,43567,43578,43589,43600,43611,43617,43621,43626,43638,43658,43667],{"__ignoreMap":395},[425,42213,42214,42216],{"class":427,"line":428},[425,42215,31147],{"class":1155},[425,42217,31150],{"class":701},[425,42219,42220,42222,42224,42226],{"class":427,"line":698},[425,42221,31492],{"class":1155},[425,42223,31495],{"class":701},[425,42225,31147],{"class":1155},[425,42227,31500],{"class":701},[425,42229,42230,42232,42234,42236],{"class":427,"line":710},[425,42231,31492],{"class":1155},[425,42233,31512],{"class":701},[425,42235,31147],{"class":1155},[425,42237,31517],{"class":701},[425,42239,42240],{"class":427,"line":721},[425,42241,3400],{"emptyLinePlaceholder":1084},[425,42243,42244,42246,42249,42251,42253,42255,42257],{"class":427,"line":735},[425,42245,15691],{"class":1155},[425,42247,42248],{"class":431}," Inception",[425,42250,1159],{"class":701},[425,42252,31533],{"class":431},[425,42254,1706],{"class":701},[425,42256,31538],{"class":431},[425,42258,31541],{"class":701},[425,42260,42261,42263,42265],{"class":427,"line":743},[425,42262,31556],{"class":1155},[425,42264,31559],{"class":691},[425,42266,42267],{"class":701},"(self,in_channels,c1,c2,c3,c4):\n",[425,42269,42270,42272,42275,42277,42279,42281],{"class":427,"line":751},[425,42271,31572],{"class":691},[425,42273,42274],{"class":701},"(Inception,",[425,42276,31578],{"class":691},[425,42278,31581],{"class":701},[425,42280,31584],{"class":691},[425,42282,2976],{"class":701},[425,42284,42285,42287,42289,42291],{"class":427,"line":759},[425,42286,31600],{"class":691},[425,42288,35526],{"class":701},[425,42290,1204],{"class":1155},[425,42292,35531],{"class":701},[425,42294,42295],{"class":427,"line":770},[425,42296,42297],{"class":1216},"        # 路线1：定义1*1卷积\n",[425,42299,42300,42302,42305,42307,42309,42311,42313,42316,42318,42320,42323,42325,42327,42329],{"class":427,"line":780},[425,42301,31600],{"class":691},[425,42303,42304],{"class":701},".p1_1",[425,42306,1204],{"class":1155},[425,42308,31608],{"class":701},[425,42310,31611],{"class":6216},[425,42312,1204],{"class":1155},[425,42314,42315],{"class":701},"in_channels,",[425,42317,31620],{"class":6216},[425,42319,1204],{"class":1155},[425,42321,42322],{"class":701},"c1,",[425,42324,31629],{"class":6216},[425,42326,1204],{"class":1155},[425,42328,1367],{"class":691},[425,42330,1165],{"class":701},[425,42332,42333],{"class":427,"line":790},[425,42334,42335],{"class":1216},"        # 路线2：定义1*1卷积和3*3\n",[425,42337,42338,42340,42343,42345,42347,42349,42351,42353,42355,42357,42360,42362,42365,42367,42369,42371],{"class":427,"line":805},[425,42339,31600],{"class":691},[425,42341,42342],{"class":701},".p2_1",[425,42344,1204],{"class":1155},[425,42346,31608],{"class":701},[425,42348,31611],{"class":6216},[425,42350,1204],{"class":1155},[425,42352,42315],{"class":701},[425,42354,31620],{"class":6216},[425,42356,1204],{"class":1155},[425,42358,42359],{"class":701},"c2[",[425,42361,1341],{"class":691},[425,42363,42364],{"class":701},"],",[425,42366,31629],{"class":6216},[425,42368,1204],{"class":1155},[425,42370,1367],{"class":691},[425,42372,1165],{"class":701},[425,42374,42375,42377,42380,42382,42384,42386,42388,42390,42392,42394,42396,42398,42400,42402,42404,42406,42408,42410,42412,42414,42416,42418],{"class":427,"line":818},[425,42376,31600],{"class":691},[425,42378,42379],{"class":701},".p2_2",[425,42381,1204],{"class":1155},[425,42383,31608],{"class":701},[425,42385,31611],{"class":6216},[425,42387,1204],{"class":1155},[425,42389,42359],{"class":701},[425,42391,1341],{"class":691},[425,42393,42364],{"class":701},[425,42395,31620],{"class":6216},[425,42397,1204],{"class":1155},[425,42399,42359],{"class":701},[425,42401,1367],{"class":691},[425,42403,42364],{"class":701},[425,42405,31629],{"class":6216},[425,42407,1204],{"class":1155},[425,42409,1229],{"class":691},[425,42411,1527],{"class":701},[425,42413,31638],{"class":6216},[425,42415,1204],{"class":1155},[425,42417,1367],{"class":691},[425,42419,1165],{"class":701},[425,42421,42422],{"class":427,"line":831},[425,42423,42424],{"class":1216},"        # 路线3：定义1*1卷积和5*5\n",[425,42426,42427,42429,42432,42434,42436,42438,42440,42442,42444,42446,42449,42451,42453,42455,42457,42459],{"class":427,"line":841},[425,42428,31600],{"class":691},[425,42430,42431],{"class":701},".p3_1",[425,42433,1204],{"class":1155},[425,42435,31608],{"class":701},[425,42437,31611],{"class":6216},[425,42439,1204],{"class":1155},[425,42441,42315],{"class":701},[425,42443,31620],{"class":6216},[425,42445,1204],{"class":1155},[425,42447,42448],{"class":701},"c3[",[425,42450,1341],{"class":691},[425,42452,42364],{"class":701},[425,42454,31629],{"class":6216},[425,42456,1204],{"class":1155},[425,42458,1367],{"class":691},[425,42460,1165],{"class":701},[425,42462,42463,42465,42468,42470,42472,42474,42476,42478,42480,42482,42484,42486,42488,42490,42492,42494,42496,42498,42500,42502,42504,42506],{"class":427,"line":852},[425,42464,31600],{"class":691},[425,42466,42467],{"class":701},".p3_2",[425,42469,1204],{"class":1155},[425,42471,31608],{"class":701},[425,42473,31611],{"class":6216},[425,42475,1204],{"class":1155},[425,42477,42448],{"class":701},[425,42479,1341],{"class":691},[425,42481,42364],{"class":701},[425,42483,31620],{"class":6216},[425,42485,1204],{"class":1155},[425,42487,42448],{"class":701},[425,42489,1367],{"class":691},[425,42491,42364],{"class":701},[425,42493,31629],{"class":6216},[425,42495,1204],{"class":1155},[425,42497,1468],{"class":691},[425,42499,1527],{"class":701},[425,42501,31638],{"class":6216},[425,42503,1204],{"class":1155},[425,42505,1235],{"class":691},[425,42507,1165],{"class":701},[425,42509,42510],{"class":427,"line":862},[425,42511,42512],{"class":1216},"        # 路线4：定义3*3最大池化和1*1卷积\n",[425,42514,42515],{"class":427,"line":878},[425,42516,42517],{"class":1216},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[425,42519,42520,42522,42525,42527,42529,42531,42533,42535,42537,42539,42541,42543,42545,42547,42549,42551],{"class":427,"line":914},[425,42521,31600],{"class":691},[425,42523,42524],{"class":701},".p4_1",[425,42526,1204],{"class":1155},[425,42528,35584],{"class":701},[425,42530,31629],{"class":6216},[425,42532,1204],{"class":1155},[425,42534,1229],{"class":691},[425,42536,1527],{"class":701},[425,42538,31684],{"class":6216},[425,42540,1204],{"class":1155},[425,42542,1367],{"class":691},[425,42544,1527],{"class":701},[425,42546,31638],{"class":6216},[425,42548,1204],{"class":1155},[425,42550,1367],{"class":691},[425,42552,1165],{"class":701},[425,42554,42555,42557,42560,42562,42564,42566,42568,42570,42572,42574,42577,42579,42581,42583],{"class":427,"line":943},[425,42556,31600],{"class":691},[425,42558,42559],{"class":701},".p4_2",[425,42561,1204],{"class":1155},[425,42563,31608],{"class":701},[425,42565,31611],{"class":6216},[425,42567,1204],{"class":1155},[425,42569,42315],{"class":701},[425,42571,31620],{"class":6216},[425,42573,1204],{"class":1155},[425,42575,42576],{"class":701},"c4,",[425,42578,31629],{"class":6216},[425,42580,1204],{"class":1155},[425,42582,1367],{"class":691},[425,42584,1165],{"class":701},[425,42586,42587],{"class":427,"line":956},[425,42588,3400],{"emptyLinePlaceholder":1084},[425,42590,42591,42593,42595],{"class":427,"line":964},[425,42592,31556],{"class":1155},[425,42594,31848],{"class":431},[425,42596,31851],{"class":701},[425,42598,42599,42602,42604,42606,42608,42610],{"class":427,"line":2733},[425,42600,42601],{"class":701},"        p1",[425,42603,1204],{"class":1155},[425,42605,31578],{"class":691},[425,42607,35939],{"class":701},[425,42609,31578],{"class":691},[425,42611,42612],{"class":701},".p1_1(x))\n",[425,42614,42615,42617,42619,42621,42623,42625,42628,42630,42632,42634],{"class":427,"line":2750},[425,42616,8085],{"class":701},[425,42618,1204],{"class":1155},[425,42620,31578],{"class":691},[425,42622,35939],{"class":701},[425,42624,31578],{"class":691},[425,42626,42627],{"class":701},".p2_2(",[425,42629,31578],{"class":691},[425,42631,35939],{"class":701},[425,42633,31578],{"class":691},[425,42635,42636],{"class":701},".p2_1(x))))\n",[425,42638,42639,42642,42644,42646,42648,42650,42653,42655,42657,42659],{"class":427,"line":2755},[425,42640,42641],{"class":701},"        p3",[425,42643,1204],{"class":1155},[425,42645,31578],{"class":691},[425,42647,35939],{"class":701},[425,42649,31578],{"class":691},[425,42651,42652],{"class":701},".p3_2(",[425,42654,31578],{"class":691},[425,42656,35939],{"class":701},[425,42658,31578],{"class":691},[425,42660,42661],{"class":701},".p3_1(x))))\n",[425,42663,42664,42667,42669,42671,42673,42675,42678,42680],{"class":427,"line":2760},[425,42665,42666],{"class":701},"        p4",[425,42668,1204],{"class":1155},[425,42670,31578],{"class":691},[425,42672,35939],{"class":701},[425,42674,31578],{"class":691},[425,42676,42677],{"class":701},".p4_2(",[425,42679,31578],{"class":691},[425,42681,42682],{"class":701},".p4_1(x)))\n",[425,42684,42685],{"class":427,"line":2765},[425,42686,42687],{"class":1216},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[425,42689,42690,42692,42695,42697,42699,42701],{"class":427,"line":2779},[425,42691,15749],{"class":1155},[425,42693,42694],{"class":701}," torch.cat((p1,p2,p3,p4),",[425,42696,33440],{"class":6216},[425,42698,1204],{"class":1155},[425,42700,1367],{"class":691},[425,42702,1165],{"class":701},[425,42704,42705],{"class":427,"line":2784},[425,42706,3400],{"emptyLinePlaceholder":1084},[425,42708,42709],{"class":427,"line":3577},[425,42710,3400],{"emptyLinePlaceholder":1084},[425,42712,42713],{"class":427,"line":3591},[425,42714,42715],{"class":1216},"# 搭建GoogLeNet网络\n",[425,42717,42718,42720,42723,42725,42727,42729,42731],{"class":427,"line":3599},[425,42719,15691],{"class":1155},[425,42721,42722],{"class":431}," GoogLeNet",[425,42724,1159],{"class":701},[425,42726,31533],{"class":431},[425,42728,1706],{"class":701},[425,42730,31538],{"class":431},[425,42732,31541],{"class":701},[425,42734,42735],{"class":427,"line":3604},[425,42736,42737],{"class":1216},"    # 必须把Inception导入到里边\n",[425,42739,42740,42742,42744],{"class":427,"line":3610},[425,42741,31556],{"class":1155},[425,42743,31559],{"class":691},[425,42745,42746],{"class":701},"(self,Inception):\n",[425,42748,42749,42751,42754,42756,42758,42760],{"class":427,"line":3616},[425,42750,31572],{"class":691},[425,42752,42753],{"class":701},"(GoogLeNet,",[425,42755,31578],{"class":691},[425,42757,31581],{"class":701},[425,42759,31584],{"class":691},[425,42761,2976],{"class":701},[425,42763,42764,42766,42769,42771],{"class":427,"line":3621},[425,42765,31600],{"class":691},[425,42767,42768],{"class":701},".b1",[425,42770,1204],{"class":1155},[425,42772,38764],{"class":701},[425,42774,42775,42777,42779,42781,42783,42785,42787,42789,42791,42793,42795,42797,42799,42801,42803,42805,42807,42809,42811,42813,42815],{"class":427,"line":8948},[425,42776,38769],{"class":701},[425,42778,31611],{"class":6216},[425,42780,1204],{"class":1155},[425,42782,1367],{"class":691},[425,42784,1527],{"class":701},[425,42786,31620],{"class":6216},[425,42788,1204],{"class":1155},[425,42790,1353],{"class":691},[425,42792,1527],{"class":701},[425,42794,31629],{"class":6216},[425,42796,1204],{"class":1155},[425,42798,1518],{"class":691},[425,42800,1527],{"class":701},[425,42802,31684],{"class":6216},[425,42804,1204],{"class":1155},[425,42806,1235],{"class":691},[425,42808,1527],{"class":701},[425,42810,31638],{"class":6216},[425,42812,1204],{"class":1155},[425,42814,1229],{"class":691},[425,42816,38802],{"class":701},[425,42818,42819],{"class":427,"line":8972},[425,42820,38807],{"class":701},[425,42822,42823,42825,42827,42829,42831,42833,42835,42837,42839,42841,42843,42845,42847],{"class":427,"line":8977},[425,42824,38852],{"class":701},[425,42826,31629],{"class":6216},[425,42828,1204],{"class":1155},[425,42830,1229],{"class":691},[425,42832,1527],{"class":701},[425,42834,31684],{"class":6216},[425,42836,1204],{"class":1155},[425,42838,1235],{"class":691},[425,42840,1527],{"class":701},[425,42842,31638],{"class":6216},[425,42844,1204],{"class":1155},[425,42846,1367],{"class":691},[425,42848,1165],{"class":701},[425,42850,42851],{"class":427,"line":8983},[425,42852,38881],{"class":701},[425,42854,42855,42857,42860,42862],{"class":427,"line":9010},[425,42856,31600],{"class":691},[425,42858,42859],{"class":701},".b2",[425,42861,1204],{"class":1155},[425,42863,38764],{"class":701},[425,42865,42866,42868,42870,42872,42874,42876,42878,42880,42882,42884,42886,42888,42890],{"class":427,"line":9015},[425,42867,38769],{"class":701},[425,42869,31611],{"class":6216},[425,42871,1204],{"class":1155},[425,42873,1353],{"class":691},[425,42875,1527],{"class":701},[425,42877,31620],{"class":6216},[425,42879,1204],{"class":1155},[425,42881,1353],{"class":691},[425,42883,1527],{"class":701},[425,42885,31629],{"class":6216},[425,42887,1204],{"class":1155},[425,42889,1367],{"class":691},[425,42891,38802],{"class":701},[425,42893,42894],{"class":427,"line":9021},[425,42895,38807],{"class":701},[425,42897,42898,42900,42902,42904,42906,42908,42910,42912,42915,42917,42919,42921,42923,42925,42927,42929,42931],{"class":427,"line":9033},[425,42899,38769],{"class":701},[425,42901,31611],{"class":6216},[425,42903,1204],{"class":1155},[425,42905,1353],{"class":691},[425,42907,1527],{"class":701},[425,42909,31620],{"class":6216},[425,42911,1204],{"class":1155},[425,42913,42914],{"class":691},"192",[425,42916,1527],{"class":701},[425,42918,31629],{"class":6216},[425,42920,1204],{"class":1155},[425,42922,1229],{"class":691},[425,42924,1527],{"class":701},[425,42926,31638],{"class":6216},[425,42928,1204],{"class":1155},[425,42930,1367],{"class":691},[425,42932,38802],{"class":701},[425,42934,42935],{"class":427,"line":9045},[425,42936,38807],{"class":701},[425,42938,42939,42941,42943,42945,42947,42949,42951,42953,42955,42957,42959,42961,42963],{"class":427,"line":9057},[425,42940,38852],{"class":701},[425,42942,31629],{"class":6216},[425,42944,1204],{"class":1155},[425,42946,1229],{"class":691},[425,42948,1527],{"class":701},[425,42950,31684],{"class":6216},[425,42952,1204],{"class":1155},[425,42954,1235],{"class":691},[425,42956,1527],{"class":701},[425,42958,31638],{"class":6216},[425,42960,1204],{"class":1155},[425,42962,1367],{"class":691},[425,42964,1165],{"class":701},[425,42966,42967],{"class":427,"line":10715},[425,42968,38881],{"class":701},[425,42970,42971,42973,42976,42978],{"class":427,"line":10740},[425,42972,31600],{"class":691},[425,42974,42975],{"class":701},".b3",[425,42977,1204],{"class":1155},[425,42979,38764],{"class":701},[425,42981,42982,42985,42987,42989,42991,42994,42996,42998,43000,43003,43005,43007,43009,43012,43014],{"class":427,"line":10763},[425,42983,42984],{"class":701},"            Inception(",[425,42986,42914],{"class":691},[425,42988,1527],{"class":701},[425,42990,1353],{"class":691},[425,42992,42993],{"class":701},",(",[425,42995,1359],{"class":691},[425,42997,1527],{"class":701},[425,42999,32825],{"class":691},[425,43001,43002],{"class":701},"),(",[425,43004,1749],{"class":691},[425,43006,1527],{"class":701},[425,43008,1347],{"class":691},[425,43010,43011],{"class":701},"),",[425,43013,1347],{"class":691},[425,43015,38802],{"class":701},[425,43017,43018,43020,43022,43024,43026,43028,43030,43032,43034,43036,43038,43040,43042,43044,43046],{"class":427,"line":10787},[425,43019,42984],{"class":701},[425,43021,35625],{"class":691},[425,43023,1527],{"class":701},[425,43025,32825],{"class":691},[425,43027,42993],{"class":701},[425,43029,32825],{"class":691},[425,43031,1527],{"class":701},[425,43033,42914],{"class":691},[425,43035,43002],{"class":701},[425,43037,1347],{"class":691},[425,43039,1527],{"class":701},[425,43041,1359],{"class":691},[425,43043,43011],{"class":701},[425,43045,1353],{"class":691},[425,43047,38802],{"class":701},[425,43049,43050,43052,43054,43056,43058,43060,43062,43064,43066,43068,43070,43072,43074],{"class":427,"line":10792},[425,43051,38852],{"class":701},[425,43053,31629],{"class":6216},[425,43055,1204],{"class":1155},[425,43057,1229],{"class":691},[425,43059,1527],{"class":701},[425,43061,31684],{"class":6216},[425,43063,1204],{"class":1155},[425,43065,1235],{"class":691},[425,43067,1527],{"class":701},[425,43069,31638],{"class":6216},[425,43071,1204],{"class":1155},[425,43073,1367],{"class":691},[425,43075,1165],{"class":701},[425,43077,43078],{"class":427,"line":10797},[425,43079,38881],{"class":701},[425,43081,43082,43084,43087,43089],{"class":427,"line":10802},[425,43083,31600],{"class":691},[425,43085,43086],{"class":701},".b4",[425,43088,1204],{"class":1155},[425,43090,38764],{"class":701},[425,43092,43093,43095,43098,43100,43102,43104,43106,43108,43111,43113,43115,43117,43119,43121,43123],{"class":427,"line":10811},[425,43094,42984],{"class":701},[425,43096,43097],{"class":691},"480",[425,43099,1527],{"class":701},[425,43101,42914],{"class":691},[425,43103,42993],{"class":701},[425,43105,1359],{"class":691},[425,43107,1527],{"class":701},[425,43109,43110],{"class":691},"208",[425,43112,43002],{"class":701},[425,43114,1749],{"class":691},[425,43116,1527],{"class":701},[425,43118,1755],{"class":691},[425,43120,43011],{"class":701},[425,43122,1353],{"class":691},[425,43124,38802],{"class":701},[425,43126,43127,43129,43131,43133,43135,43137,43139,43141,43143,43145,43147,43149,43151,43153,43155],{"class":427,"line":10816},[425,43128,42984],{"class":701},[425,43130,39212],{"class":691},[425,43132,1527],{"class":701},[425,43134,22045],{"class":691},[425,43136,42993],{"class":701},[425,43138,1766],{"class":691},[425,43140,1527],{"class":701},[425,43142,32256],{"class":691},[425,43144,43002],{"class":701},[425,43146,1948],{"class":691},[425,43148,1527],{"class":701},[425,43150,1353],{"class":691},[425,43152,43011],{"class":701},[425,43154,1353],{"class":691},[425,43156,38802],{"class":701},[425,43158,43159,43161,43163,43165,43167,43169,43171,43173,43175,43177,43179,43181,43183,43185,43187],{"class":427,"line":10822},[425,43160,42984],{"class":701},[425,43162,39212],{"class":691},[425,43164,1527],{"class":701},[425,43166,32825],{"class":691},[425,43168,42993],{"class":701},[425,43170,32825],{"class":691},[425,43172,1527],{"class":701},[425,43174,35625],{"class":691},[425,43176,43002],{"class":701},[425,43178,1948],{"class":691},[425,43180,1527],{"class":701},[425,43182,1353],{"class":691},[425,43184,43011],{"class":701},[425,43186,1353],{"class":691},[425,43188,38802],{"class":701},[425,43190,43191,43193,43195,43197,43199,43201,43203,43205,43208,43210,43212,43214,43216,43218,43220],{"class":427,"line":10843},[425,43192,42984],{"class":701},[425,43194,39212],{"class":691},[425,43196,1527],{"class":701},[425,43198,1766],{"class":691},[425,43200,42993],{"class":701},[425,43202,32825],{"class":691},[425,43204,1527],{"class":701},[425,43206,43207],{"class":691},"288",[425,43209,43002],{"class":701},[425,43211,1347],{"class":691},[425,43213,1527],{"class":701},[425,43215,1353],{"class":691},[425,43217,43011],{"class":701},[425,43219,1353],{"class":691},[425,43221,38802],{"class":701},[425,43223,43224,43226,43229,43231,43233,43235,43237,43239,43242,43244,43246,43248,43250,43252,43254],{"class":427,"line":10849},[425,43225,42984],{"class":701},[425,43227,43228],{"class":691},"528",[425,43230,1527],{"class":701},[425,43232,35625],{"class":691},[425,43234,42993],{"class":701},[425,43236,22045],{"class":691},[425,43238,1527],{"class":701},[425,43240,43241],{"class":691},"320",[425,43243,43002],{"class":701},[425,43245,1347],{"class":691},[425,43247,1527],{"class":701},[425,43249,32825],{"class":691},[425,43251,43011],{"class":701},[425,43253,32825],{"class":691},[425,43255,38802],{"class":701},[425,43257,43258,43260,43262,43264,43266,43268,43270,43272,43274,43276,43278,43280,43282],{"class":427,"line":10863},[425,43259,38852],{"class":701},[425,43261,31629],{"class":6216},[425,43263,1204],{"class":1155},[425,43265,1229],{"class":691},[425,43267,1527],{"class":701},[425,43269,31684],{"class":6216},[425,43271,1204],{"class":1155},[425,43273,1235],{"class":691},[425,43275,1527],{"class":701},[425,43277,31638],{"class":6216},[425,43279,1204],{"class":1155},[425,43281,1367],{"class":691},[425,43283,1165],{"class":701},[425,43285,43286],{"class":427,"line":10869},[425,43287,38881],{"class":701},[425,43289,43290,43292,43295,43297],{"class":427,"line":10896},[425,43291,31600],{"class":691},[425,43293,43294],{"class":701},".b5",[425,43296,1204],{"class":1155},[425,43298,38764],{"class":701},[425,43300,43301,43303,43306,43308,43310,43312,43314,43316,43318,43320,43322,43324,43326,43328,43330],{"class":427,"line":10905},[425,43302,42984],{"class":701},[425,43304,43305],{"class":691},"832",[425,43307,1527],{"class":701},[425,43309,35625],{"class":691},[425,43311,42993],{"class":701},[425,43313,22045],{"class":691},[425,43315,1527],{"class":701},[425,43317,43241],{"class":691},[425,43319,43002],{"class":701},[425,43321,1347],{"class":691},[425,43323,1527],{"class":701},[425,43325,32825],{"class":691},[425,43327,43011],{"class":701},[425,43329,32825],{"class":691},[425,43331,38802],{"class":701},[425,43333,43334,43336,43338,43340,43342,43344,43346,43348,43350,43352,43354,43356,43358,43360,43362],{"class":427,"line":10911},[425,43335,42984],{"class":701},[425,43337,43305],{"class":691},[425,43339,1527],{"class":701},[425,43341,35695],{"class":691},[425,43343,42993],{"class":701},[425,43345,42914],{"class":691},[425,43347,1527],{"class":701},[425,43349,35695],{"class":691},[425,43351,43002],{"class":701},[425,43353,1755],{"class":691},[425,43355,1527],{"class":701},[425,43357,32825],{"class":691},[425,43359,43011],{"class":701},[425,43361,32825],{"class":691},[425,43363,38802],{"class":701},[425,43365,43366,43369,43371,43373,43375],{"class":427,"line":10919},[425,43367,43368],{"class":701},"            nn.AdaptiveAvgPool2d((",[425,43370,1367],{"class":691},[425,43372,1527],{"class":701},[425,43374,1367],{"class":691},[425,43376,43377],{"class":701},")),\n",[425,43379,43380],{"class":427,"line":10924},[425,43381,39545],{"class":701},[425,43383,43384,43386,43389,43391,43393],{"class":427,"line":17601},[425,43385,39550],{"class":701},[425,43387,43388],{"class":691},"1024",[425,43390,1527],{"class":701},[425,43392,1594],{"class":691},[425,43394,1165],{"class":701},[425,43396,43397],{"class":427,"line":17607},[425,43398,38881],{"class":701},[425,43400,43401],{"class":427,"line":17630},[425,43402,43403],{"class":1216},"        # 对模型参数初始化\n",[425,43405,43406,43408,43410,43412,43414],{"class":427,"line":17636},[425,43407,4403],{"class":1155},[425,43409,39623],{"class":701},[425,43411,27034],{"class":1155},[425,43413,39628],{"class":691},[425,43415,39631],{"class":701},[425,43417,43418,43420,43422],{"class":427,"line":17659},[425,43419,5642],{"class":1155},[425,43421,39643],{"class":691},[425,43423,39646],{"class":701},[425,43425,43426,43428,43431,43433,43436,43438,43440,43442,43444],{"class":427,"line":17673},[425,43427,39656],{"class":701},[425,43429,43430],{"class":6216},"mode",[425,43432,1204],{"class":1155},[425,43434,43435],{"class":435},"'fan_out'",[425,43437,1527],{"class":701},[425,43439,39659],{"class":6216},[425,43441,1204],{"class":1155},[425,43443,39664],{"class":435},[425,43445,1165],{"class":701},[425,43447,43448],{"class":427,"line":17693},[425,43449,43450],{"class":1216},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[425,43452,43453],{"class":427,"line":17699},[425,43454,43455],{"class":1216},"                # ② mode = 'fan_out'决定使用的fan值：\n",[425,43457,43458],{"class":427,"line":17710},[425,43459,43460],{"class":1216},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[425,43462,43463],{"class":427,"line":17733},[425,43464,43465],{"class":1216},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[425,43467,43468],{"class":427,"line":17755},[425,43469,43470],{"class":1216},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[425,43472,43473],{"class":427,"line":17760},[425,43474,43475],{"class":1216},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[425,43477,43478,43480,43482,43484,43486,43488],{"class":427,"line":17766},[425,43479,39676],{"class":1155},[425,43481,39679],{"class":701},[425,43483,39682],{"class":1155},[425,43485,39685],{"class":1155},[425,43487,39688],{"class":691},[425,43489,4739],{"class":701},[425,43491,43492,43494,43496],{"class":427,"line":17780},[425,43493,39700],{"class":701},[425,43495,1341],{"class":691},[425,43497,1165],{"class":701},[425,43499,43500,43503,43505],{"class":427,"line":17793},[425,43501,43502],{"class":1155},"                elif",[425,43504,39643],{"class":691},[425,43506,39719],{"class":701},[425,43508,43509,43512,43514,43516,43518],{"class":427,"line":17798},[425,43510,43511],{"class":701},"                    nn.init.normal_(m.weight,",[425,43513,1341],{"class":691},[425,43515,1527],{"class":701},[425,43517,39741],{"class":691},[425,43519,1165],{"class":701},[425,43521,43522,43525,43527,43529,43531,43533],{"class":427,"line":17812},[425,43523,43524],{"class":1155},"                    if",[425,43526,39679],{"class":701},[425,43528,39682],{"class":1155},[425,43530,39685],{"class":1155},[425,43532,39688],{"class":691},[425,43534,4739],{"class":701},[425,43536,43537,43540,43542],{"class":427,"line":17817},[425,43538,43539],{"class":701},"                        nn.init.constant_(m.bias,",[425,43541,1341],{"class":691},[425,43543,1165],{"class":701},[425,43545,43546],{"class":427,"line":17823},[425,43547,35920],{"class":1216},[425,43549,43550,43552,43554],{"class":427,"line":17828},[425,43551,31556],{"class":1155},[425,43553,31848],{"class":431},[425,43555,31851],{"class":701},[425,43557,43558,43560,43562,43564],{"class":427,"line":17842},[425,43559,31856],{"class":701},[425,43561,1204],{"class":1155},[425,43563,31578],{"class":691},[425,43565,43566],{"class":701},".b1(x)\n",[425,43568,43569,43571,43573,43575],{"class":427,"line":17847},[425,43570,31856],{"class":701},[425,43572,1204],{"class":1155},[425,43574,31578],{"class":691},[425,43576,43577],{"class":701},".b2(x)\n",[425,43579,43580,43582,43584,43586],{"class":427,"line":17852},[425,43581,31856],{"class":701},[425,43583,1204],{"class":1155},[425,43585,31578],{"class":691},[425,43587,43588],{"class":701},".b3(x)\n",[425,43590,43591,43593,43595,43597],{"class":427,"line":17866},[425,43592,31856],{"class":701},[425,43594,1204],{"class":1155},[425,43596,31578],{"class":691},[425,43598,43599],{"class":701},".b4(x)\n",[425,43601,43602,43604,43606,43608],{"class":427,"line":17878},[425,43603,31856],{"class":701},[425,43605,1204],{"class":1155},[425,43607,31578],{"class":691},[425,43609,43610],{"class":701},".b5(x)\n",[425,43612,43613,43615],{"class":427,"line":17883},[425,43614,15749],{"class":1155},[425,43616,31964],{"class":701},[425,43618,43619],{"class":427,"line":17896},[425,43620,3400],{"emptyLinePlaceholder":1084},[425,43622,43623],{"class":427,"line":17901},[425,43624,43625],{"class":1216},"# 模型展示\n",[425,43627,43628,43630,43632,43634,43636],{"class":427,"line":17906},[425,43629,2544],{"class":1155},[425,43631,31975],{"class":691},[425,43633,3949],{"class":1155},[425,43635,31980],{"class":435},[425,43637,4739],{"class":701},[425,43639,43640,43642,43644,43646,43648,43650,43652,43654,43656],{"class":427,"line":17911},[425,43641,31992],{"class":701},[425,43643,1204],{"class":1155},[425,43645,31206],{"class":701},[425,43647,31999],{"class":435},[425,43649,2706],{"class":1155},[425,43651,32004],{"class":701},[425,43653,2703],{"class":1155},[425,43655,31231],{"class":435},[425,43657,1165],{"class":701},[425,43659,43660,43662,43664],{"class":427,"line":17924},[425,43661,32044],{"class":701},[425,43663,1204],{"class":1155},[425,43665,43666],{"class":701},"GoogLeNet(Inception).to(device)\n",[425,43668,43669,43671,43673,43675,43677,43679,43681,43683],{"class":427,"line":17929},[425,43670,32054],{"class":691},[425,43672,32057],{"class":701},[425,43674,1367],{"class":691},[425,43676,1527],{"class":701},[425,43678,32256],{"class":691},[425,43680,1527],{"class":701},[425,43682,32256],{"class":691},[425,43684,32070],{"class":701},[972,43686,43687],{"start":698},[450,43688,39938],{},[416,43690,43692],{"className":31133,"code":43691,"language":31135,"meta":395,"style":395},"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",[422,43693,43694,43700,43706,43716,43722,43732,43742,43752,43762,43772,43776,43787,43797,43801,43805,43809,43817,43829,43839,43855,43865,43897,43911,43921,43931,43935,43945,43959,43969,43979,43989,43995,43999,44003,44007,44011,44015,44023,44043,44047,44051,44055,44059,44063,44079,44083,44087,44095,44099,44103,44111,44115,44119,44123,44131,44135,44139,44143,44147,44155,44159,44167,44171,44179,44183,44191,44195,44203,44207,44211,44219,44223,44227,44231,44243,44267,44281,44285,44289,44293,44301,44305,44313,44317,44325,44329,44337,44341,44349,44353,44361,44365,44377,44381,44389,44393,44401,44405,44409,44413,44417,44425,44429,44445,44449,44457,44461,44465,44469,44473,44477,44481,44485,44501,44505,44517,44521,44533,44537,44549,44553,44561,44565,44573,44577,44581,44585,44591,44595,44603,44607,44623,44627,44635,44639,44655,44667,44671,44683,44687,44691,44699,44703,44707,44715,44719,44727,44731,44739,44743,44747,44789,44831,44835,44839,44855,44859,44875,44879,44883,44891,44895,44899,44911,44949,44953,44957,44965,44969,44983,44993,44999,45005,45011,45017,45021,45025,45031,45035,45039,45047,45051,45069,45073,45077,45081,45097,45101,45105,45109,45113,45117,45137,45157,45161,45165,45169,45177,45185,45189,45205,45225,45245,45249,45253,45261,45269,45273,45277,45281,45293,45297,45307,45315,45332],{"__ignoreMap":395},[425,43695,43696,43698],{"class":427,"line":428},[425,43697,31147],{"class":1155},[425,43699,32577],{"class":701},[425,43701,43702,43704],{"class":427,"line":698},[425,43703,31147],{"class":1155},[425,43705,32584],{"class":701},[425,43707,43708,43710,43712,43714],{"class":427,"line":710},[425,43709,31147],{"class":1155},[425,43711,32595],{"class":701},[425,43713,32138],{"class":1155},[425,43715,32600],{"class":701},[425,43717,43718,43720],{"class":427,"line":721},[425,43719,31147],{"class":1155},[425,43721,31150],{"class":701},[425,43723,43724,43726,43728,43730],{"class":427,"line":735},[425,43725,31492],{"class":1155},[425,43727,32170],{"class":701},[425,43729,31147],{"class":1155},[425,43731,32617],{"class":701},[425,43733,43734,43736,43738,43740],{"class":427,"line":743},[425,43735,31492],{"class":1155},[425,43737,32123],{"class":701},[425,43739,31147],{"class":1155},[425,43741,32128],{"class":701},[425,43743,43744,43746,43748,43750],{"class":427,"line":751},[425,43745,31492],{"class":1155},[425,43747,32153],{"class":701},[425,43749,31147],{"class":1155},[425,43751,32158],{"class":701},[425,43753,43754,43756,43758,43760],{"class":427,"line":759},[425,43755,31147],{"class":1155},[425,43757,32170],{"class":701},[425,43759,32138],{"class":1155},[425,43761,32175],{"class":701},[425,43763,43764,43766,43768,43770],{"class":427,"line":770},[425,43765,31147],{"class":1155},[425,43767,32187],{"class":701},[425,43769,32138],{"class":1155},[425,43771,32192],{"class":701},[425,43773,43774],{"class":427,"line":780},[425,43775,32662],{"class":1216},[425,43777,43778,43780,43782,43784],{"class":427,"line":790},[425,43779,31492],{"class":1155},[425,43781,32669],{"class":701},[425,43783,31147],{"class":1155},[425,43785,43786],{"class":701}," GoogLeNet, Inception\n",[425,43788,43789,43791,43793,43795],{"class":427,"line":805},[425,43790,31492],{"class":1155},[425,43792,31495],{"class":701},[425,43794,31147],{"class":1155},[425,43796,31500],{"class":701},[425,43798,43799],{"class":427,"line":818},[425,43800,3400],{"emptyLinePlaceholder":1084},[425,43802,43803],{"class":427,"line":831},[425,43804,3400],{"emptyLinePlaceholder":1084},[425,43806,43807],{"class":427,"line":841},[425,43808,32697],{"class":1216},[425,43810,43811,43813,43815],{"class":427,"line":852},[425,43812,32702],{"class":1155},[425,43814,32705],{"class":431},[425,43816,32708],{"class":701},[425,43818,43819,43821,43823,43825,43827],{"class":427,"line":862},[425,43820,32713],{"class":701},[425,43822,1204],{"class":1155},[425,43824,32210],{"class":701},[425,43826,32218],{"class":435},[425,43828,32221],{"class":701},[425,43830,43831,43833,43835,43837],{"class":427,"line":878},[425,43832,32726],{"class":6216},[425,43834,1204],{"class":1155},[425,43836,32231],{"class":691},[425,43838,32221],{"class":701},[425,43840,43841,43843,43845,43847,43849,43851,43853],{"class":427,"line":914},[425,43842,32737],{"class":6216},[425,43844,1204],{"class":1155},[425,43846,32248],{"class":701},[425,43848,32251],{"class":6216},[425,43850,1204],{"class":1155},[425,43852,36204],{"class":691},[425,43854,32259],{"class":701},[425,43856,43857,43859,43861,43863],{"class":427,"line":943},[425,43858,32754],{"class":6216},[425,43860,1204],{"class":1155},[425,43862,32231],{"class":691},[425,43864,1165],{"class":701},[425,43866,43867,43869,43871,43873,43875,43877,43879,43881,43883,43885,43887,43889,43891,43893,43895],{"class":427,"line":956},[425,43868,32765],{"class":701},[425,43870,1204],{"class":1155},[425,43872,32770],{"class":701},[425,43874,32773],{"class":691},[425,43876,1159],{"class":701},[425,43878,32778],{"class":691},[425,43880,1603],{"class":1155},[425,43882,8358],{"class":691},[425,43884,32785],{"class":701},[425,43886,32773],{"class":691},[425,43888,1159],{"class":701},[425,43890,32792],{"class":691},[425,43892,1603],{"class":1155},[425,43894,8358],{"class":691},[425,43896,32799],{"class":701},[425,43898,43899,43901,43903,43905,43907,43909],{"class":427,"line":964},[425,43900,32804],{"class":701},[425,43902,1204],{"class":1155},[425,43904,32809],{"class":701},[425,43906,32292],{"class":6216},[425,43908,1204],{"class":1155},[425,43910,32297],{"class":701},[425,43912,43913,43915,43917,43919],{"class":427,"line":2733},[425,43914,32820],{"class":6216},[425,43916,1204],{"class":1155},[425,43918,1347],{"class":691},[425,43920,32221],{"class":701},[425,43922,43923,43925,43927,43929],{"class":427,"line":2750},[425,43924,32832],{"class":6216},[425,43926,1204],{"class":1155},[425,43928,32231],{"class":691},[425,43930,32221],{"class":701},[425,43932,43933],{"class":427,"line":2755},[425,43934,32843],{"class":1216},[425,43936,43937,43939,43941,43943],{"class":427,"line":2760},[425,43938,32848],{"class":6216},[425,43940,1204],{"class":1155},[425,43942,1544],{"class":691},[425,43944,1165],{"class":701},[425,43946,43947,43949,43951,43953,43955,43957],{"class":427,"line":2765},[425,43948,32859],{"class":701},[425,43950,1204],{"class":1155},[425,43952,32289],{"class":701},[425,43954,32292],{"class":6216},[425,43956,1204],{"class":1155},[425,43958,32870],{"class":701},[425,43960,43961,43963,43965,43967],{"class":427,"line":2779},[425,43962,32875],{"class":6216},[425,43964,1204],{"class":1155},[425,43966,1347],{"class":691},[425,43968,32221],{"class":701},[425,43970,43971,43973,43975,43977],{"class":427,"line":2784},[425,43972,32886],{"class":6216},[425,43974,1204],{"class":1155},[425,43976,32231],{"class":691},[425,43978,32221],{"class":701},[425,43980,43981,43983,43985,43987],{"class":427,"line":3577},[425,43982,32897],{"class":6216},[425,43984,1204],{"class":1155},[425,43986,1544],{"class":691},[425,43988,1165],{"class":701},[425,43990,43991,43993],{"class":427,"line":3591},[425,43992,5090],{"class":1155},[425,43994,32910],{"class":701},[425,43996,43997],{"class":427,"line":3599},[425,43998,3400],{"emptyLinePlaceholder":1084},[425,44000,44001],{"class":427,"line":3604},[425,44002,32919],{"class":1216},[425,44004,44005],{"class":427,"line":3610},[425,44006,32924],{"class":1216},[425,44008,44009],{"class":427,"line":3616},[425,44010,3400],{"emptyLinePlaceholder":1084},[425,44012,44013],{"class":427,"line":3621},[425,44014,32933],{"class":1216},[425,44016,44017,44019,44021],{"class":427,"line":8948},[425,44018,32702],{"class":1155},[425,44020,32940],{"class":431},[425,44022,32943],{"class":701},[425,44024,44025,44027,44029,44031,44033,44035,44037,44039,44041],{"class":427,"line":8972},[425,44026,31992],{"class":701},[425,44028,1204],{"class":1155},[425,44030,31206],{"class":701},[425,44032,31999],{"class":435},[425,44034,2706],{"class":1155},[425,44036,32004],{"class":701},[425,44038,2703],{"class":1155},[425,44040,32962],{"class":435},[425,44042,1165],{"class":701},[425,44044,44045],{"class":427,"line":8977},[425,44046,3400],{"emptyLinePlaceholder":1084},[425,44048,44049],{"class":427,"line":8983},[425,44050,3400],{"emptyLinePlaceholder":1084},[425,44052,44053],{"class":427,"line":9010},[425,44054,32977],{"class":1216},[425,44056,44057],{"class":427,"line":9015},[425,44058,32982],{"class":1216},[425,44060,44061],{"class":427,"line":9021},[425,44062,32987],{"class":1216},[425,44064,44065,44067,44069,44071,44073,44075,44077],{"class":427,"line":9033},[425,44066,32992],{"class":701},[425,44068,1204],{"class":1155},[425,44070,32997],{"class":701},[425,44072,33000],{"class":6216},[425,44074,1204],{"class":1155},[425,44076,33005],{"class":691},[425,44078,1165],{"class":701},[425,44080,44081],{"class":427,"line":9045},[425,44082,3400],{"emptyLinePlaceholder":1084},[425,44084,44085],{"class":427,"line":9057},[425,44086,33016],{"class":1216},[425,44088,44089,44091,44093],{"class":427,"line":10715},[425,44090,33021],{"class":701},[425,44092,1204],{"class":1155},[425,44094,33026],{"class":701},[425,44096,44097],{"class":427,"line":10740},[425,44098,3400],{"emptyLinePlaceholder":1084},[425,44100,44101],{"class":427,"line":10763},[425,44102,33035],{"class":1216},[425,44104,44105,44107,44109],{"class":427,"line":10787},[425,44106,32044],{"class":701},[425,44108,1204],{"class":1155},[425,44110,33044],{"class":701},[425,44112,44113],{"class":427,"line":10792},[425,44114,33049],{"class":1216},[425,44116,44117],{"class":427,"line":10797},[425,44118,33054],{"class":1216},[425,44120,44121],{"class":427,"line":10802},[425,44122,33059],{"class":1216},[425,44124,44125,44127,44129],{"class":427,"line":10811},[425,44126,33064],{"class":701},[425,44128,1204],{"class":1155},[425,44130,33069],{"class":701},[425,44132,44133],{"class":427,"line":10816},[425,44134,3400],{"emptyLinePlaceholder":1084},[425,44136,44137],{"class":427,"line":10822},[425,44138,3400],{"emptyLinePlaceholder":1084},[425,44140,44141],{"class":427,"line":10843},[425,44142,33082],{"class":1216},[425,44144,44145],{"class":427,"line":10849},[425,44146,33087],{"class":1216},[425,44148,44149,44151,44153],{"class":427,"line":10863},[425,44150,33092],{"class":701},[425,44152,1204],{"class":1155},[425,44154,33097],{"class":691},[425,44156,44157],{"class":427,"line":10869},[425,44158,33102],{"class":1216},[425,44160,44161,44163,44165],{"class":427,"line":10896},[425,44162,33107],{"class":701},[425,44164,1204],{"class":1155},[425,44166,33112],{"class":701},[425,44168,44169],{"class":427,"line":10905},[425,44170,33117],{"class":1216},[425,44172,44173,44175,44177],{"class":427,"line":10911},[425,44174,33122],{"class":701},[425,44176,1204],{"class":1155},[425,44178,33112],{"class":701},[425,44180,44181],{"class":427,"line":10919},[425,44182,33131],{"class":1216},[425,44184,44185,44187,44189],{"class":427,"line":10924},[425,44186,33136],{"class":701},[425,44188,1204],{"class":1155},[425,44190,33112],{"class":701},[425,44192,44193],{"class":427,"line":17601},[425,44194,33145],{"class":1216},[425,44196,44197,44199,44201],{"class":427,"line":17607},[425,44198,33150],{"class":701},[425,44200,1204],{"class":1155},[425,44202,33112],{"class":701},[425,44204,44205],{"class":427,"line":17630},[425,44206,3400],{"emptyLinePlaceholder":1084},[425,44208,44209],{"class":427,"line":17636},[425,44210,33163],{"class":1216},[425,44212,44213,44215,44217],{"class":427,"line":17659},[425,44214,33168],{"class":701},[425,44216,1204],{"class":1155},[425,44218,33173],{"class":701},[425,44220,44221],{"class":427,"line":17673},[425,44222,3400],{"emptyLinePlaceholder":1084},[425,44224,44225],{"class":427,"line":17693},[425,44226,3400],{"emptyLinePlaceholder":1084},[425,44228,44229],{"class":427,"line":17699},[425,44230,33186],{"class":1216},[425,44232,44233,44235,44237,44239,44241],{"class":427,"line":17710},[425,44234,4201],{"class":1155},[425,44236,33193],{"class":701},[425,44238,27034],{"class":1155},[425,44240,33198],{"class":691},[425,44242,33201],{"class":701},[425,44244,44245,44247,44249,44251,44253,44255,44257,44259,44261,44263,44265],{"class":427,"line":17733},[425,44246,33206],{"class":691},[425,44248,1159],{"class":701},[425,44250,33211],{"class":435},[425,44252,33214],{"class":691},[425,44254,1732],{"class":435},[425,44256,33214],{"class":691},[425,44258,1400],{"class":435},[425,44260,33223],{"class":701},[425,44262,1680],{"class":1155},[425,44264,1367],{"class":691},[425,44266,31252],{"class":701},[425,44268,44269,44271,44273,44275,44277,44279],{"class":427,"line":17755},[425,44270,33206],{"class":691},[425,44272,1159],{"class":701},[425,44274,33238],{"class":435},[425,44276,1603],{"class":1155},[425,44278,1594],{"class":691},[425,44280,1165],{"class":701},[425,44282,44283],{"class":427,"line":17760},[425,44284,3400],{"emptyLinePlaceholder":1084},[425,44286,44287],{"class":427,"line":17766},[425,44288,33253],{"class":1216},[425,44290,44291],{"class":427,"line":17780},[425,44292,33258],{"class":1216},[425,44294,44295,44297,44299],{"class":427,"line":17793},[425,44296,33263],{"class":701},[425,44298,1204],{"class":1155},[425,44300,33097],{"class":691},[425,44302,44303],{"class":427,"line":17798},[425,44304,33272],{"class":1216},[425,44306,44307,44309,44311],{"class":427,"line":17812},[425,44308,33277],{"class":701},[425,44310,1204],{"class":1155},[425,44312,4085],{"class":691},[425,44314,44315],{"class":427,"line":17817},[425,44316,33286],{"class":1216},[425,44318,44319,44321,44323],{"class":427,"line":17823},[425,44320,33291],{"class":701},[425,44322,1204],{"class":1155},[425,44324,33097],{"class":691},[425,44326,44327],{"class":427,"line":17828},[425,44328,33300],{"class":1216},[425,44330,44331,44333,44335],{"class":427,"line":17842},[425,44332,33305],{"class":701},[425,44334,1204],{"class":1155},[425,44336,4085],{"class":691},[425,44338,44339],{"class":427,"line":17847},[425,44340,33314],{"class":1216},[425,44342,44343,44345,44347],{"class":427,"line":17852},[425,44344,33319],{"class":701},[425,44346,1204],{"class":1155},[425,44348,4085],{"class":691},[425,44350,44351],{"class":427,"line":17866},[425,44352,33328],{"class":1216},[425,44354,44355,44357,44359],{"class":427,"line":17878},[425,44356,33333],{"class":701},[425,44358,1204],{"class":1155},[425,44360,4085],{"class":691},[425,44362,44363],{"class":427,"line":17883},[425,44364,33342],{"class":1216},[425,44366,44367,44369,44371,44373,44375],{"class":427,"line":17896},[425,44368,4403],{"class":1155},[425,44370,32356],{"class":701},[425,44372,27034],{"class":1155},[425,44374,32361],{"class":691},[425,44376,33355],{"class":701},[425,44378,44379],{"class":427,"line":17901},[425,44380,33360],{"class":1216},[425,44382,44383,44385,44387],{"class":427,"line":17906},[425,44384,33365],{"class":701},[425,44386,1204],{"class":1155},[425,44388,33370],{"class":701},[425,44390,44391],{"class":427,"line":17911},[425,44392,33375],{"class":1216},[425,44394,44395,44397,44399],{"class":427,"line":17924},[425,44396,33380],{"class":701},[425,44398,1204],{"class":1155},[425,44400,33385],{"class":701},[425,44402,44403],{"class":427,"line":17929},[425,44404,33391],{"class":1216},[425,44406,44407],{"class":427,"line":33388},[425,44408,33397],{"class":701},[425,44410,44411],{"class":427,"line":33394},[425,44412,33403],{"class":1216},[425,44414,44415],{"class":427,"line":33400},[425,44416,33409],{"class":1216},[425,44418,44419,44421,44423],{"class":427,"line":33406},[425,44420,33415],{"class":701},[425,44422,1204],{"class":1155},[425,44424,33420],{"class":701},[425,44426,44427],{"class":427,"line":33412},[425,44428,33426],{"class":1216},[425,44430,44431,44433,44435,44437,44439,44441,44443],{"class":427,"line":33423},[425,44432,33432],{"class":701},[425,44434,1204],{"class":1155},[425,44436,33437],{"class":701},[425,44438,33440],{"class":6216},[425,44440,1204],{"class":1155},[425,44442,1367],{"class":691},[425,44444,1165],{"class":701},[425,44446,44447],{"class":427,"line":33429},[425,44448,33452],{"class":1216},[425,44450,44451,44453,44455],{"class":427,"line":33449},[425,44452,33458],{"class":701},[425,44454,1204],{"class":1155},[425,44456,33463],{"class":701},[425,44458,44459],{"class":427,"line":33455},[425,44460,33469],{"class":1216},[425,44462,44463],{"class":427,"line":33466},[425,44464,33475],{"class":701},[425,44466,44467],{"class":427,"line":33472},[425,44468,33481],{"class":1216},[425,44470,44471],{"class":427,"line":33478},[425,44472,33487],{"class":701},[425,44474,44475],{"class":427,"line":33484},[425,44476,33493],{"class":1216},[425,44478,44479],{"class":427,"line":33490},[425,44480,33499],{"class":701},[425,44482,44483],{"class":427,"line":33496},[425,44484,33505],{"class":1216},[425,44486,44487,44489,44491,44493,44495,44497,44499],{"class":427,"line":33502},[425,44488,33511],{"class":701},[425,44490,10476],{"class":1155},[425,44492,33516],{"class":701},[425,44494,1603],{"class":1155},[425,44496,33521],{"class":701},[425,44498,1341],{"class":691},[425,44500,1165],{"class":701},[425,44502,44503],{"class":427,"line":33508},[425,44504,33531],{"class":1216},[425,44506,44507,44509,44511,44513,44515],{"class":427,"line":33528},[425,44508,33537],{"class":701},[425,44510,10476],{"class":1155},[425,44512,33542],{"class":701},[425,44514,3949],{"class":1155},[425,44516,33547],{"class":701},[425,44518,44519],{"class":427,"line":33534},[425,44520,33553],{"class":1216},[425,44522,44523,44525,44527,44529,44531],{"class":427,"line":33550},[425,44524,33559],{"class":701},[425,44526,10476],{"class":1155},[425,44528,33521],{"class":701},[425,44530,1341],{"class":691},[425,44532,1165],{"class":701},[425,44534,44535],{"class":427,"line":33556},[425,44536,33573],{"class":1216},[425,44538,44539,44541,44543,44545,44547],{"class":427,"line":33570},[425,44540,4403],{"class":1155},[425,44542,33581],{"class":701},[425,44544,27034],{"class":1155},[425,44546,32361],{"class":691},[425,44548,33588],{"class":701},[425,44550,44551],{"class":427,"line":33576},[425,44552,33594],{"class":1216},[425,44554,44555,44557,44559],{"class":427,"line":33591},[425,44556,33365],{"class":701},[425,44558,1204],{"class":1155},[425,44560,33370],{"class":701},[425,44562,44563],{"class":427,"line":33597},[425,44564,33609],{"class":1216},[425,44566,44567,44569,44571],{"class":427,"line":33606},[425,44568,33380],{"class":701},[425,44570,1204],{"class":1155},[425,44572,33385],{"class":701},[425,44574,44575],{"class":427,"line":33612},[425,44576,33624],{"class":1216},[425,44578,44579],{"class":427,"line":33621},[425,44580,33630],{"class":701},[425,44582,44583],{"class":427,"line":33627},[425,44584,37111],{"class":1216},[425,44586,44587,44589],{"class":427,"line":33633},[425,44588,33636],{"class":1155},[425,44590,33639],{"class":701},[425,44592,44593],{"class":427,"line":33642},[425,44594,33645],{"class":1216},[425,44596,44597,44599,44601],{"class":427,"line":33648},[425,44598,37126],{"class":701},[425,44600,1204],{"class":1155},[425,44602,33420],{"class":701},[425,44604,44605],{"class":427,"line":33659},[425,44606,33662],{"class":1216},[425,44608,44609,44611,44613,44615,44617,44619,44621],{"class":427,"line":33665},[425,44610,37139],{"class":701},[425,44612,1204],{"class":1155},[425,44614,33437],{"class":701},[425,44616,33440],{"class":6216},[425,44618,1204],{"class":1155},[425,44620,1367],{"class":691},[425,44622,1165],{"class":701},[425,44624,44625],{"class":427,"line":33684},[425,44626,33687],{"class":1216},[425,44628,44629,44631,44633],{"class":427,"line":33690},[425,44630,37160],{"class":701},[425,44632,1204],{"class":1155},[425,44634,33463],{"class":701},[425,44636,44637],{"class":427,"line":33701},[425,44638,33704],{"class":1216},[425,44640,44641,44643,44645,44647,44649,44651,44653],{"class":427,"line":33707},[425,44642,37173],{"class":701},[425,44644,10476],{"class":1155},[425,44646,37178],{"class":701},[425,44648,1603],{"class":1155},[425,44650,33521],{"class":701},[425,44652,1341],{"class":691},[425,44654,1165],{"class":701},[425,44656,44657,44659,44661,44663,44665],{"class":427,"line":33727},[425,44658,37191],{"class":701},[425,44660,10476],{"class":1155},[425,44662,33542],{"class":701},[425,44664,3949],{"class":1155},[425,44666,33547],{"class":701},[425,44668,44669],{"class":427,"line":33743},[425,44670,37204],{"class":1216},[425,44672,44673,44675,44677,44679,44681],{"class":427,"line":33749},[425,44674,37209],{"class":701},[425,44676,10476],{"class":1155},[425,44678,33521],{"class":701},[425,44680,1341],{"class":691},[425,44682,1165],{"class":701},[425,44684,44685],{"class":427,"line":33763},[425,44686,33766],{"class":1216},[425,44688,44689],{"class":427,"line":33769},[425,44690,33772],{"class":1216},[425,44692,44693,44695,44697],{"class":427,"line":33775},[425,44694,33778],{"class":701},[425,44696,1732],{"class":1155},[425,44698,33783],{"class":701},[425,44700,44701],{"class":427,"line":33786},[425,44702,33789],{"class":1216},[425,44704,44705],{"class":427,"line":33792},[425,44706,33795],{"class":1216},[425,44708,44709,44711,44713],{"class":427,"line":33798},[425,44710,33801],{"class":701},[425,44712,1732],{"class":1155},[425,44714,33783],{"class":701},[425,44716,44717],{"class":427,"line":33808},[425,44718,33811],{"class":1216},[425,44720,44721,44723,44725],{"class":427,"line":33814},[425,44722,33817],{"class":701},[425,44724,1732],{"class":1155},[425,44726,33822],{"class":701},[425,44728,44729],{"class":427,"line":33825},[425,44730,33828],{"class":1216},[425,44732,44733,44735,44737],{"class":427,"line":33831},[425,44734,33834],{"class":701},[425,44736,1732],{"class":1155},[425,44738,33822],{"class":701},[425,44740,44741],{"class":427,"line":33841},[425,44742,3400],{"emptyLinePlaceholder":1084},[425,44744,44745],{"class":427,"line":33846},[425,44746,33849],{"class":1216},[425,44748,44749,44751,44753,44755,44757,44759,44761,44763,44765,44767,44769,44771,44773,44775,44777,44779,44781,44783,44785,44787],{"class":427,"line":33852},[425,44750,33206],{"class":691},[425,44752,1159],{"class":701},[425,44754,4592],{"class":435},[425,44756,33214],{"class":691},[425,44758,33863],{"class":435},[425,44760,2043],{"class":691},[425,44762,33868],{"class":1155},[425,44764,2093],{"class":691},[425,44766,33873],{"class":435},[425,44768,2043],{"class":691},[425,44770,33868],{"class":1155},[425,44772,2093],{"class":691},[425,44774,4592],{"class":435},[425,44776,33884],{"class":701},[425,44778,1680],{"class":1155},[425,44780,1367],{"class":691},[425,44782,33891],{"class":701},[425,44784,1680],{"class":1155},[425,44786,1367],{"class":691},[425,44788,33898],{"class":701},[425,44790,44791,44793,44795,44797,44799,44801,44803,44805,44807,44809,44811,44813,44815,44817,44819,44821,44823,44825,44827,44829],{"class":427,"line":33901},[425,44792,33206],{"class":691},[425,44794,1159],{"class":701},[425,44796,4592],{"class":435},[425,44798,33214],{"class":691},[425,44800,33912],{"class":435},[425,44802,2043],{"class":691},[425,44804,33868],{"class":1155},[425,44806,2093],{"class":691},[425,44808,33921],{"class":435},[425,44810,2043],{"class":691},[425,44812,33868],{"class":1155},[425,44814,2093],{"class":691},[425,44816,4592],{"class":435},[425,44818,33932],{"class":701},[425,44820,1680],{"class":1155},[425,44822,1367],{"class":691},[425,44824,33939],{"class":701},[425,44826,1680],{"class":1155},[425,44828,1367],{"class":691},[425,44830,33898],{"class":701},[425,44832,44833],{"class":427,"line":33948},[425,44834,3400],{"emptyLinePlaceholder":1084},[425,44836,44837],{"class":427,"line":33953},[425,44838,33956],{"class":1216},[425,44840,44841,44843,44845,44847,44849,44851,44853],{"class":427,"line":33959},[425,44842,3497],{"class":1155},[425,44844,33964],{"class":701},[425,44846,1680],{"class":1155},[425,44848,1367],{"class":691},[425,44850,2087],{"class":701},[425,44852,2107],{"class":1155},[425,44854,33975],{"class":701},[425,44856,44857],{"class":427,"line":33978},[425,44858,33981],{"class":1216},[425,44860,44861,44863,44865,44867,44869,44871,44873],{"class":427,"line":33984},[425,44862,33987],{"class":701},[425,44864,1198],{"class":691},[425,44866,1204],{"class":1155},[425,44868,33994],{"class":701},[425,44870,1680],{"class":1155},[425,44872,1367],{"class":691},[425,44874,34001],{"class":701},[425,44876,44877],{"class":427,"line":34004},[425,44878,34007],{"class":1216},[425,44880,44881],{"class":427,"line":34010},[425,44882,34013],{"class":1216},[425,44884,44885,44887,44889],{"class":427,"line":34016},[425,44886,34019],{"class":701},[425,44888,1204],{"class":1155},[425,44890,33069],{"class":701},[425,44892,44893],{"class":427,"line":34026},[425,44894,3400],{"emptyLinePlaceholder":1084},[425,44896,44897],{"class":427,"line":34031},[425,44898,34034],{"class":1216},[425,44900,44901,44903,44905,44907,44909],{"class":427,"line":34037},[425,44902,34040],{"class":701},[425,44904,1204],{"class":1155},[425,44906,34045],{"class":701},[425,44908,1680],{"class":1155},[425,44910,34050],{"class":701},[425,44912,44913,44915,44917,44919,44921,44923,44925,44927,44929,44931,44933,44935,44937,44939,44941,44943,44945,44947],{"class":427,"line":34053},[425,44914,33206],{"class":691},[425,44916,1159],{"class":701},[425,44918,34060],{"class":435},[425,44920,2043],{"class":691},[425,44922,34065],{"class":1155},[425,44924,2093],{"class":691},[425,44926,1692],{"class":435},[425,44928,2043],{"class":691},[425,44930,34065],{"class":1155},[425,44932,2093],{"class":691},[425,44934,34078],{"class":435},[425,44936,34081],{"class":701},[425,44938,34084],{"class":1155},[425,44940,2054],{"class":691},[425,44942,34089],{"class":701},[425,44944,1477],{"class":1155},[425,44946,2054],{"class":691},[425,44948,31252],{"class":701},[425,44950,44951],{"class":427,"line":34098},[425,44952,37488],{"class":1216},[425,44954,44955],{"class":427,"line":34104},[425,44956,37493],{"class":1216},[425,44958,44959,44961,44963],{"class":427,"line":34110},[425,44960,37498],{"class":701},[425,44962,34122],{"class":435},[425,44964,1165],{"class":701},[425,44966,44967],{"class":427,"line":34116},[425,44968,34142],{"class":1216},[425,44970,44971,44973,44975,44977,44979,44981],{"class":427,"line":34127},[425,44972,34148],{"class":701},[425,44974,1204],{"class":1155},[425,44976,34153],{"class":701},[425,44978,34156],{"class":6216},[425,44980,1204],{"class":1155},[425,44982,2559],{"class":701},[425,44984,44985,44987,44989,44991],{"class":427,"line":34133},[425,44986,34166],{"class":435},[425,44988,948],{"class":701},[425,44990,34171],{"class":691},[425,44992,34174],{"class":701},[425,44994,44995,44997],{"class":427,"line":34139},[425,44996,34180],{"class":435},[425,44998,34183],{"class":701},[425,45000,45001,45003],{"class":427,"line":34145},[425,45002,34189],{"class":435},[425,45004,34192],{"class":701},[425,45006,45007,45009],{"class":427,"line":34163},[425,45008,34198],{"class":435},[425,45010,34201],{"class":701},[425,45012,45013,45015],{"class":427,"line":34177},[425,45014,34207],{"class":435},[425,45016,34210],{"class":701},[425,45018,45019],{"class":427,"line":34186},[425,45020,34216],{"class":701},[425,45022,45023],{"class":427,"line":34195},[425,45024,34222],{"class":1216},[425,45026,45027,45029],{"class":427,"line":34204},[425,45028,5090],{"class":1155},[425,45030,34230],{"class":701},[425,45032,45033],{"class":427,"line":34213},[425,45034,3400],{"emptyLinePlaceholder":1084},[425,45036,45037],{"class":427,"line":34219},[425,45038,34241],{"class":1216},[425,45040,45041,45043,45045],{"class":427,"line":34225},[425,45042,32702],{"class":1155},[425,45044,34249],{"class":431},[425,45046,34252],{"class":701},[425,45048,45049],{"class":427,"line":34233},[425,45050,34258],{"class":1216},[425,45052,45053,45055,45057,45059,45061,45063,45065,45067],{"class":427,"line":34238},[425,45054,34264],{"class":701},[425,45056,32448],{"class":6216},[425,45058,1204],{"class":1155},[425,45060,1159],{"class":701},[425,45062,1646],{"class":691},[425,45064,1527],{"class":701},[425,45066,1442],{"class":691},[425,45068,31252],{"class":701},[425,45070,45071],{"class":427,"line":34244},[425,45072,34284],{"class":1216},[425,45074,45075],{"class":427,"line":34255},[425,45076,34290],{"class":1216},[425,45078,45079],{"class":427,"line":34261},[425,45080,34296],{"class":1216},[425,45082,45083,45085,45087,45089,45091,45093,45095],{"class":427,"line":34281},[425,45084,32482],{"class":701},[425,45086,1367],{"class":691},[425,45088,1527],{"class":701},[425,45090,1235],{"class":691},[425,45092,1527],{"class":701},[425,45094,1367],{"class":691},[425,45096,1165],{"class":701},[425,45098,45099],{"class":427,"line":34287},[425,45100,34319],{"class":1216},[425,45102,45103],{"class":427,"line":34293},[425,45104,34325],{"class":1216},[425,45106,45107],{"class":427,"line":34299},[425,45108,34331],{"class":1216},[425,45110,45111],{"class":427,"line":34316},[425,45112,34337],{"class":1216},[425,45114,45115],{"class":427,"line":34322},[425,45116,34343],{"class":1216},[425,45118,45119,45121,45123,45125,45127,45129,45131,45133,45135],{"class":427,"line":34328},[425,45120,34349],{"class":701},[425,45122,34352],{"class":435},[425,45124,34355],{"class":701},[425,45126,34358],{"class":435},[425,45128,1527],{"class":701},[425,45130,34363],{"class":6216},[425,45132,1204],{"class":1155},[425,45134,34368],{"class":435},[425,45136,1165],{"class":701},[425,45138,45139,45141,45143,45145,45147,45149,45151,45153,45155],{"class":427,"line":34334},[425,45140,34349],{"class":701},[425,45142,34352],{"class":435},[425,45144,34380],{"class":701},[425,45146,34383],{"class":435},[425,45148,1527],{"class":701},[425,45150,34363],{"class":6216},[425,45152,1204],{"class":1155},[425,45154,34392],{"class":435},[425,45156,1165],{"class":701},[425,45158,45159],{"class":427,"line":34340},[425,45160,34400],{"class":1216},[425,45162,45163],{"class":427,"line":34346},[425,45164,34406],{"class":701},[425,45166,45167],{"class":427,"line":34373},[425,45168,34412],{"class":1216},[425,45170,45171,45173,45175],{"class":427,"line":34397},[425,45172,34418],{"class":701},[425,45174,34421],{"class":435},[425,45176,1165],{"class":701},[425,45178,45179,45181,45183],{"class":427,"line":34403},[425,45180,34429],{"class":701},[425,45182,34432],{"class":435},[425,45184,1165],{"class":701},[425,45186,45187],{"class":427,"line":34409},[425,45188,34440],{"class":1216},[425,45190,45191,45193,45195,45197,45199,45201,45203],{"class":427,"line":34415},[425,45192,32482],{"class":701},[425,45194,1367],{"class":691},[425,45196,1527],{"class":701},[425,45198,1235],{"class":691},[425,45200,1527],{"class":701},[425,45202,1235],{"class":691},[425,45204,1165],{"class":701},[425,45206,45207,45209,45211,45213,45215,45217,45219,45221,45223],{"class":427,"line":34426},[425,45208,34349],{"class":701},[425,45210,34352],{"class":435},[425,45212,34467],{"class":701},[425,45214,34358],{"class":435},[425,45216,1527],{"class":701},[425,45218,34363],{"class":6216},[425,45220,1204],{"class":1155},[425,45222,34478],{"class":435},[425,45224,1165],{"class":701},[425,45226,45227,45229,45231,45233,45235,45237,45239,45241,45243],{"class":427,"line":34437},[425,45228,34349],{"class":701},[425,45230,34352],{"class":435},[425,45232,34490],{"class":701},[425,45234,34383],{"class":435},[425,45236,1527],{"class":701},[425,45238,34363],{"class":6216},[425,45240,1204],{"class":1155},[425,45242,34501],{"class":435},[425,45244,1165],{"class":701},[425,45246,45247],{"class":427,"line":34443},[425,45248,34509],{"class":1216},[425,45250,45251],{"class":427,"line":34460},[425,45252,34406],{"class":701},[425,45254,45255,45257,45259],{"class":427,"line":34483},[425,45256,34418],{"class":701},[425,45258,34352],{"class":435},[425,45260,1165],{"class":701},[425,45262,45263,45265,45267],{"class":427,"line":34506},[425,45264,34429],{"class":701},[425,45266,34531],{"class":435},[425,45268,1165],{"class":701},[425,45270,45271],{"class":427,"line":34512},[425,45272,34539],{"class":701},[425,45274,45275],{"class":427,"line":34517},[425,45276,3400],{"emptyLinePlaceholder":1084},[425,45278,45279],{"class":427,"line":34526},[425,45280,34550],{"class":1216},[425,45282,45283,45285,45287,45289,45291],{"class":427,"line":34536},[425,45284,2544],{"class":1155},[425,45286,31975],{"class":691},[425,45288,3949],{"class":1155},[425,45290,31980],{"class":435},[425,45292,4739],{"class":701},[425,45294,45295],{"class":427,"line":34542},[425,45296,34569],{"class":1216},[425,45298,45299,45302,45304],{"class":427,"line":34547},[425,45300,45301],{"class":701},"    GoogLeNet",[425,45303,1204],{"class":1155},[425,45305,45306],{"class":701},"GoogLeNet(Inception)\n",[425,45308,45309,45311,45313],{"class":427,"line":34553},[425,45310,34586],{"class":701},[425,45312,1204],{"class":1155},[425,45314,34591],{"class":701},[425,45316,45317,45319,45321,45324,45326,45328,45330],{"class":427,"line":34566},[425,45318,34148],{"class":701},[425,45320,1204],{"class":1155},[425,45322,45323],{"class":701},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[425,45325,34604],{"class":6216},[425,45327,1204],{"class":1155},[425,45329,2098],{"class":691},[425,45331,1165],{"class":701},[425,45333,45334],{"class":427,"line":34572},[425,45335,34616],{"class":701},[972,45337,45338],{"start":710},[450,45339,41329],{},[416,45341,45343],{"className":31133,"code":45342,"language":31135,"meta":395,"style":395},"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",[422,45344,45345,45351,45361,45371,45375,45385,45396,45400,45404,45408,45416,45432,45442,45458,45468,45482,45486,45496,45506,45516,45522,45526,45530,45538,45542,45558,45566,45570,45574,45582,45590,45594,45598,45602,45606,45612,45616,45626,45634,45642,45646,45650,45654,45662,45666,45682,45686,45690,45694,45706,45710,45722,45726,45730,45742,45746,45756,45760,45764,45776,45780,45788,45792,45796,45804,45808,45816,45820,45824,45828,45832,45836,45852,45860,45864,45868,45916,45922,45926,45936,45944,45952,45956,45960,45964,45968,45976,45980,45996,46000,46008,46016],{"__ignoreMap":395},[425,45346,45347,45349],{"class":427,"line":428},[425,45348,31147],{"class":1155},[425,45350,31150],{"class":701},[425,45352,45353,45355,45357,45359],{"class":427,"line":698},[425,45354,31147],{"class":1155},[425,45356,32170],{"class":701},[425,45358,32138],{"class":1155},[425,45360,32175],{"class":701},[425,45362,45363,45365,45367,45369],{"class":427,"line":710},[425,45364,31492],{"class":1155},[425,45366,32153],{"class":701},[425,45368,31147],{"class":1155},[425,45370,32158],{"class":701},[425,45372,45373],{"class":427,"line":721},[425,45374,34677],{"class":1216},[425,45376,45377,45379,45381,45383],{"class":427,"line":735},[425,45378,31492],{"class":1155},[425,45380,32123],{"class":701},[425,45382,31147],{"class":1155},[425,45384,32128],{"class":701},[425,45386,45387,45389,45391,45393],{"class":427,"line":743},[425,45388,31492],{"class":1155},[425,45390,32669],{"class":701},[425,45392,31147],{"class":1155},[425,45394,45395],{"class":701}," GoogLeNet,Inception\n",[425,45397,45398],{"class":427,"line":751},[425,45399,3400],{"emptyLinePlaceholder":1084},[425,45401,45402],{"class":427,"line":759},[425,45403,3400],{"emptyLinePlaceholder":1084},[425,45405,45406],{"class":427,"line":770},[425,45407,34706],{"class":1216},[425,45409,45410,45412,45414],{"class":427,"line":780},[425,45411,32702],{"class":1155},[425,45413,34713],{"class":431},[425,45415,32708],{"class":701},[425,45417,45418,45420,45422,45424,45426,45428,45430],{"class":427,"line":790},[425,45419,34720],{"class":701},[425,45421,1204],{"class":1155},[425,45423,32210],{"class":701},[425,45425,32213],{"class":6216},[425,45427,1204],{"class":1155},[425,45429,32218],{"class":435},[425,45431,32221],{"class":701},[425,45433,45434,45436,45438,45440],{"class":427,"line":805},[425,45435,34737],{"class":6216},[425,45437,1204],{"class":1155},[425,45439,34742],{"class":691},[425,45441,32221],{"class":701},[425,45443,45444,45446,45448,45450,45452,45454,45456],{"class":427,"line":818},[425,45445,34749],{"class":6216},[425,45447,1204],{"class":1155},[425,45449,32248],{"class":701},[425,45451,32251],{"class":6216},[425,45453,1204],{"class":1155},[425,45455,36204],{"class":691},[425,45457,32259],{"class":701},[425,45459,45460,45462,45464,45466],{"class":427,"line":831},[425,45461,34766],{"class":6216},[425,45463,1204],{"class":1155},[425,45465,32231],{"class":691},[425,45467,1165],{"class":701},[425,45469,45470,45472,45474,45476,45478,45480],{"class":427,"line":841},[425,45471,34777],{"class":701},[425,45473,1204],{"class":1155},[425,45475,32289],{"class":701},[425,45477,32292],{"class":6216},[425,45479,1204],{"class":1155},[425,45481,34788],{"class":701},[425,45483,45484],{"class":427,"line":852},[425,45485,34793],{"class":1216},[425,45487,45488,45490,45492,45494],{"class":427,"line":862},[425,45489,34798],{"class":6216},[425,45491,1204],{"class":1155},[425,45493,1367],{"class":691},[425,45495,32221],{"class":701},[425,45497,45498,45500,45502,45504],{"class":427,"line":878},[425,45499,34809],{"class":6216},[425,45501,1204],{"class":1155},[425,45503,32231],{"class":691},[425,45505,32221],{"class":701},[425,45507,45508,45510,45512,45514],{"class":427,"line":914},[425,45509,34820],{"class":6216},[425,45511,1204],{"class":1155},[425,45513,1341],{"class":691},[425,45515,1165],{"class":701},[425,45517,45518,45520],{"class":427,"line":943},[425,45519,5090],{"class":1155},[425,45521,34833],{"class":701},[425,45523,45524],{"class":427,"line":956},[425,45525,3400],{"emptyLinePlaceholder":1084},[425,45527,45528],{"class":427,"line":964},[425,45529,34842],{"class":1216},[425,45531,45532,45534,45536],{"class":427,"line":2733},[425,45533,32702],{"class":1155},[425,45535,34849],{"class":431},[425,45537,34852],{"class":701},[425,45539,45540],{"class":427,"line":2750},[425,45541,34857],{"class":1216},[425,45543,45544,45546,45548,45550,45552,45554,45556],{"class":427,"line":2755},[425,45545,31992],{"class":701},[425,45547,1204],{"class":1155},[425,45549,31999],{"class":435},[425,45551,2706],{"class":1155},[425,45553,32004],{"class":701},[425,45555,2703],{"class":1155},[425,45557,34874],{"class":435},[425,45559,45560,45562,45564],{"class":427,"line":2760},[425,45561,32044],{"class":701},[425,45563,1204],{"class":1155},[425,45565,33044],{"class":701},[425,45567,45568],{"class":427,"line":2765},[425,45569,3400],{"emptyLinePlaceholder":1084},[425,45571,45572],{"class":427,"line":2779},[425,45573,34891],{"class":1216},[425,45575,45576,45578,45580],{"class":427,"line":2784},[425,45577,34896],{"class":701},[425,45579,1204],{"class":1155},[425,45581,33097],{"class":691},[425,45583,45584,45586,45588],{"class":427,"line":3577},[425,45585,34905],{"class":701},[425,45587,1204],{"class":1155},[425,45589,4085],{"class":691},[425,45591,45592],{"class":427,"line":3591},[425,45593,3400],{"emptyLinePlaceholder":1084},[425,45595,45596],{"class":427,"line":3599},[425,45597,34918],{"class":1216},[425,45599,45600],{"class":427,"line":3604},[425,45601,34923],{"class":1216},[425,45603,45604],{"class":427,"line":3610},[425,45605,34928],{"class":1216},[425,45607,45608,45610],{"class":427,"line":3616},[425,45609,34933],{"class":1155},[425,45611,33639],{"class":701},[425,45613,45614],{"class":427,"line":3621},[425,45615,34940],{"class":1216},[425,45617,45618,45620,45622,45624],{"class":427,"line":8948},[425,45619,4403],{"class":1155},[425,45621,34947],{"class":701},[425,45623,27034],{"class":1155},[425,45625,34952],{"class":701},[425,45627,45628,45630,45632],{"class":427,"line":8972},[425,45629,34957],{"class":701},[425,45631,1204],{"class":1155},[425,45633,34962],{"class":701},[425,45635,45636,45638,45640],{"class":427,"line":8977},[425,45637,34967],{"class":701},[425,45639,1204],{"class":1155},[425,45641,34972],{"class":701},[425,45643,45644],{"class":427,"line":8983},[425,45645,34977],{"class":1216},[425,45647,45648],{"class":427,"line":9010},[425,45649,33630],{"class":701},[425,45651,45652],{"class":427,"line":9015},[425,45653,34986],{"class":1216},[425,45655,45656,45658,45660],{"class":427,"line":9021},[425,45657,33415],{"class":701},[425,45659,1204],{"class":1155},[425,45661,34995],{"class":701},[425,45663,45664],{"class":427,"line":9033},[425,45665,35000],{"class":1216},[425,45667,45668,45670,45672,45674,45676,45678,45680],{"class":427,"line":9045},[425,45669,33432],{"class":701},[425,45671,1204],{"class":1155},[425,45673,33437],{"class":701},[425,45675,33440],{"class":6216},[425,45677,1204],{"class":1155},[425,45679,1367],{"class":691},[425,45681,1165],{"class":701},[425,45683,45684],{"class":427,"line":9057},[425,45685,35021],{"class":1216},[425,45687,45688],{"class":427,"line":10715},[425,45689,35026],{"class":1216},[425,45691,45692],{"class":427,"line":10740},[425,45693,35031],{"class":1216},[425,45695,45696,45698,45700,45702,45704],{"class":427,"line":10763},[425,45697,35036],{"class":701},[425,45699,10476],{"class":1155},[425,45701,33542],{"class":701},[425,45703,3949],{"class":1155},[425,45705,35045],{"class":701},[425,45707,45708],{"class":427,"line":10787},[425,45709,35050],{"class":1216},[425,45711,45712,45714,45716,45718,45720],{"class":427,"line":10792},[425,45713,35055],{"class":701},[425,45715,10476],{"class":1155},[425,45717,35060],{"class":701},[425,45719,1341],{"class":691},[425,45721,1165],{"class":701},[425,45723,45724],{"class":427,"line":10797},[425,45725,3400],{"emptyLinePlaceholder":1084},[425,45727,45728],{"class":427,"line":10802},[425,45729,35073],{"class":1216},[425,45731,45732,45734,45736,45738,45740],{"class":427,"line":10811},[425,45733,35078],{"class":701},[425,45735,1204],{"class":1155},[425,45737,35083],{"class":701},[425,45739,1732],{"class":1155},[425,45741,35088],{"class":701},[425,45743,45744],{"class":427,"line":10816},[425,45745,35093],{"class":1216},[425,45747,45748,45750,45752,45754],{"class":427,"line":10822},[425,45749,33206],{"class":691},[425,45751,1159],{"class":701},[425,45753,35102],{"class":435},[425,45755,35105],{"class":701},[425,45757,45758],{"class":427,"line":10843},[425,45759,3400],{"emptyLinePlaceholder":1084},[425,45761,45762],{"class":427,"line":10849},[425,45763,35114],{"class":1216},[425,45765,45766,45768,45770,45772,45774],{"class":427,"line":10863},[425,45767,2544],{"class":1155},[425,45769,31975],{"class":691},[425,45771,3949],{"class":1155},[425,45773,31980],{"class":435},[425,45775,4739],{"class":701},[425,45777,45778],{"class":427,"line":10869},[425,45779,35131],{"class":1216},[425,45781,45782,45784,45786],{"class":427,"line":10896},[425,45783,32044],{"class":701},[425,45785,1204],{"class":1155},[425,45787,45306],{"class":701},[425,45789,45790],{"class":427,"line":10905},[425,45791,35144],{"class":1216},[425,45793,45794],{"class":427,"line":10911},[425,45795,35149],{"class":1216},[425,45797,45798,45800,45802],{"class":427,"line":10919},[425,45799,35154],{"class":701},[425,45801,35157],{"class":435},[425,45803,31252],{"class":701},[425,45805,45806],{"class":427,"line":10924},[425,45807,35164],{"class":1216},[425,45809,45810,45812,45814],{"class":427,"line":17601},[425,45811,34777],{"class":701},[425,45813,1204],{"class":1155},[425,45815,35173],{"class":701},[425,45817,45818],{"class":427,"line":17607},[425,45819,35178],{"class":1216},[425,45821,45822],{"class":427,"line":17630},[425,45823,35183],{"class":701},[425,45825,45826],{"class":427,"line":17636},[425,45827,3400],{"emptyLinePlaceholder":1084},[425,45829,45830],{"class":427,"line":17659},[425,45831,35192],{"class":1216},[425,45833,45834],{"class":427,"line":17673},[425,45835,35197],{"class":1216},[425,45837,45838,45840,45842,45844,45846,45848,45850],{"class":427,"line":17693},[425,45839,31992],{"class":701},[425,45841,1204],{"class":1155},[425,45843,31999],{"class":435},[425,45845,2706],{"class":1155},[425,45847,32004],{"class":701},[425,45849,2703],{"class":1155},[425,45851,34874],{"class":435},[425,45853,45854,45856,45858],{"class":427,"line":17699},[425,45855,32044],{"class":701},[425,45857,1204],{"class":1155},[425,45859,33044],{"class":701},[425,45861,45862],{"class":427,"line":17710},[425,45863,35226],{"class":1216},[425,45865,45866],{"class":427,"line":17733},[425,45867,35231],{"class":1216},[425,45869,45870,45872,45874,45876,45878,45880,45882,45884,45886,45888,45890,45892,45894,45896,45898,45900,45902,45904,45906,45908,45910,45912,45914],{"class":427,"line":17755},[425,45871,35236],{"class":701},[425,45873,1204],{"class":1155},[425,45875,2037],{"class":701},[425,45877,35243],{"class":435},[425,45879,1527],{"class":701},[425,45881,35248],{"class":435},[425,45883,1527],{"class":701},[425,45885,35253],{"class":435},[425,45887,1527],{"class":701},[425,45889,35258],{"class":435},[425,45891,1527],{"class":701},[425,45893,35263],{"class":435},[425,45895,1527],{"class":701},[425,45897,35268],{"class":435},[425,45899,1527],{"class":701},[425,45901,35273],{"class":435},[425,45903,1527],{"class":701},[425,45905,35278],{"class":435},[425,45907,1527],{"class":701},[425,45909,35283],{"class":435},[425,45911,1527],{"class":701},[425,45913,35288],{"class":435},[425,45915,34001],{"class":701},[425,45917,45918,45920],{"class":427,"line":17760},[425,45919,34933],{"class":1155},[425,45921,33639],{"class":701},[425,45923,45924],{"class":427,"line":17766},[425,45925,35301],{"class":1216},[425,45927,45928,45930,45932,45934],{"class":427,"line":17780},[425,45929,4403],{"class":1155},[425,45931,35308],{"class":701},[425,45933,27034],{"class":1155},[425,45935,34952],{"class":701},[425,45937,45938,45940,45942],{"class":427,"line":17793},[425,45939,33365],{"class":701},[425,45941,1204],{"class":1155},[425,45943,33370],{"class":701},[425,45945,45946,45948,45950],{"class":427,"line":17798},[425,45947,33380],{"class":701},[425,45949,1204],{"class":1155},[425,45951,33385],{"class":701},[425,45953,45954],{"class":427,"line":17812},[425,45955,3400],{"emptyLinePlaceholder":1084},[425,45957,45958],{"class":427,"line":17817},[425,45959,35337],{"class":1216},[425,45961,45962],{"class":427,"line":17823},[425,45963,33630],{"class":701},[425,45965,45966],{"class":427,"line":17828},[425,45967,35346],{"class":1216},[425,45969,45970,45972,45974],{"class":427,"line":17842},[425,45971,33415],{"class":701},[425,45973,1204],{"class":1155},[425,45975,33420],{"class":701},[425,45977,45978],{"class":427,"line":17847},[425,45979,35359],{"class":1216},[425,45981,45982,45984,45986,45988,45990,45992,45994],{"class":427,"line":17852},[425,45983,33432],{"class":701},[425,45985,1204],{"class":1155},[425,45987,33437],{"class":701},[425,45989,33440],{"class":6216},[425,45991,1204],{"class":1155},[425,45993,1367],{"class":691},[425,45995,1165],{"class":701},[425,45997,45998],{"class":427,"line":17866},[425,45999,35380],{"class":1216},[425,46001,46002,46004,46006],{"class":427,"line":17878},[425,46003,35385],{"class":701},[425,46005,1204],{"class":1155},[425,46007,35390],{"class":701},[425,46009,46010,46012,46014],{"class":427,"line":17883},[425,46011,35395],{"class":701},[425,46013,1204],{"class":1155},[425,46015,35400],{"class":701},[425,46017,46018,46020,46022,46024,46026,46028,46030,46032],{"class":427,"line":17896},[425,46019,35405],{"class":691},[425,46021,1159],{"class":701},[425,46023,35410],{"class":435},[425,46025,35413],{"class":701},[425,46027,35416],{"class":435},[425,46029,1527],{"class":701},[425,46031,35421],{"class":435},[425,46033,35424],{"class":701},[14,46035,46037],{"id":46036},"_24训练自己的数据集","2.4.训练自己的数据集",[19,46039,46040],{},"猫狗分类任务",[19,46042,46043],{},"划分数据集和验证集",[416,46045,46047],{"className":31133,"code":46046,"language":31135,"meta":395,"style":395},"# 创建脚本，用于划分数据集和验证集\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",[422,46048,46049,46054,46061,46066,46077,46084,46088,46098,46112,46121,46125,46130,46140,46160,46164,46169,46179,46190,46203,46207,46212,46221,46231,46242,46246,46251,46261,46265,46270,46275,46280,46285,46290,46294,46304,46331,46344,46356,46383,46388,46393,46407,46412,46424,46439,46454,46462,46466,46471,46477,46489,46502,46507,46512,46517,46567,46573,46577],{"__ignoreMap":395},[425,46050,46051],{"class":427,"line":428},[425,46052,46053],{"class":1216},"# 创建脚本，用于划分数据集和验证集\n",[425,46055,46056,46058],{"class":427,"line":698},[425,46057,31147],{"class":1155},[425,46059,46060],{"class":701}," os\n",[425,46062,46063],{"class":427,"line":710},[425,46064,46065],{"class":1216},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[425,46067,46068,46070,46073,46075],{"class":427,"line":721},[425,46069,31492],{"class":1155},[425,46071,46072],{"class":701}," shutil ",[425,46074,31147],{"class":1155},[425,46076,32577],{"class":701},[425,46078,46079,46081],{"class":427,"line":735},[425,46080,31147],{"class":1155},[425,46082,46083],{"class":701}," random\n",[425,46085,46086],{"class":427,"line":743},[425,46087,3400],{"emptyLinePlaceholder":1084},[425,46089,46090,46092,46095],{"class":427,"line":751},[425,46091,32702],{"class":1155},[425,46093,46094],{"class":431}," mkfile",[425,46096,46097],{"class":701},"(file):\n",[425,46099,46100,46102,46104,46107,46110],{"class":427,"line":759},[425,46101,4101],{"class":1155},[425,46103,39685],{"class":1155},[425,46105,46106],{"class":701}," os.path.exists(",[425,46108,46109],{"class":6216},"file",[425,46111,31541],{"class":701},[425,46113,46114,46117,46119],{"class":427,"line":770},[425,46115,46116],{"class":701},"        os.makedirs(",[425,46118,46109],{"class":6216},[425,46120,1165],{"class":701},[425,46122,46123],{"class":427,"line":780},[425,46124,3400],{"emptyLinePlaceholder":1084},[425,46126,46127],{"class":427,"line":790},[425,46128,46129],{"class":1216},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[425,46131,46132,46135,46137],{"class":427,"line":805},[425,46133,46134],{"class":701},"file_path",[425,46136,1204],{"class":1155},[425,46138,46139],{"class":435},"'data_cat_dog'\n",[425,46141,46142,46145,46147,46150,46152,46155,46157],{"class":427,"line":818},[425,46143,46144],{"class":701},"flower_class",[425,46146,1204],{"class":1155},[425,46148,46149],{"class":701},"[cla ",[425,46151,4025],{"class":1155},[425,46153,46154],{"class":701}," cla ",[425,46156,27034],{"class":1155},[425,46158,46159],{"class":701}," os.listdir(file_path)]\n",[425,46161,46162],{"class":427,"line":831},[425,46163,3400],{"emptyLinePlaceholder":1084},[425,46165,46166],{"class":427,"line":841},[425,46167,46168],{"class":1216},"# 创建训练集train文件夹\n",[425,46170,46171,46174,46177],{"class":427,"line":852},[425,46172,46173],{"class":701},"mkfile(",[425,46175,46176],{"class":435},"'data\u002Ftrain'",[425,46178,1165],{"class":701},[425,46180,46181,46183,46185,46187],{"class":427,"line":862},[425,46182,4025],{"class":1155},[425,46184,46154],{"class":701},[425,46186,27034],{"class":1155},[425,46188,46189],{"class":701}," flower_class:\n",[425,46191,46192,46195,46198,46200],{"class":427,"line":878},[425,46193,46194],{"class":701},"    mkfile(",[425,46196,46197],{"class":435},"'data\u002Ftrain\u002F'",[425,46199,1629],{"class":1155},[425,46201,46202],{"class":701},"cla)\n",[425,46204,46205],{"class":427,"line":914},[425,46206,3400],{"emptyLinePlaceholder":1084},[425,46208,46209],{"class":427,"line":943},[425,46210,46211],{"class":1216},"# 创建验证集val文件夹\n",[425,46213,46214,46216,46219],{"class":427,"line":956},[425,46215,46173],{"class":701},[425,46217,46218],{"class":435},"'data\u002Ftest'",[425,46220,1165],{"class":701},[425,46222,46223,46225,46227,46229],{"class":427,"line":964},[425,46224,4025],{"class":1155},[425,46226,46154],{"class":701},[425,46228,27034],{"class":1155},[425,46230,46189],{"class":701},[425,46232,46233,46235,46238,46240],{"class":427,"line":2733},[425,46234,46194],{"class":701},[425,46236,46237],{"class":435},"'data\u002Ftest\u002F'",[425,46239,1629],{"class":1155},[425,46241,46202],{"class":701},[425,46243,46244],{"class":427,"line":2750},[425,46245,3400],{"emptyLinePlaceholder":1084},[425,46247,46248],{"class":427,"line":2755},[425,46249,46250],{"class":1216},"# 划分比例，训练集：测试集=9：1\n",[425,46252,46253,46256,46258],{"class":427,"line":2760},[425,46254,46255],{"class":701},"split_rate",[425,46257,1204],{"class":1155},[425,46259,46260],{"class":691},"0.1\n",[425,46262,46263],{"class":427,"line":2765},[425,46264,3400],{"emptyLinePlaceholder":1084},[425,46266,46267],{"class":427,"line":2779},[425,46268,46269],{"class":1216},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[425,46271,46272],{"class":427,"line":2784},[425,46273,46274],{"class":1216},"# cla_path：当前类别的原始图片路径\n",[425,46276,46277],{"class":427,"line":3577},[425,46278,46279],{"class":1216},"# images：当前类别下所有图片的文件名列表\n",[425,46281,46282],{"class":427,"line":3591},[425,46283,46284],{"class":1216},"# num：该类别图片总数\n",[425,46286,46287],{"class":427,"line":3599},[425,46288,46289],{"class":1216},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[425,46291,46292],{"class":427,"line":3604},[425,46293,3400],{"emptyLinePlaceholder":1084},[425,46295,46296,46298,46300,46302],{"class":427,"line":3610},[425,46297,4025],{"class":1155},[425,46299,46154],{"class":701},[425,46301,27034],{"class":1155},[425,46303,46189],{"class":701},[425,46305,46306,46309,46311,46314,46316,46319,46322,46324,46326,46328],{"class":427,"line":3616},[425,46307,46308],{"class":701},"    cla_path ",[425,46310,1204],{"class":1155},[425,46312,46313],{"class":701}," file_path ",[425,46315,1629],{"class":1155},[425,46317,46318],{"class":435}," '\u002F'",[425,46320,46321],{"class":1155}," +",[425,46323,46154],{"class":701},[425,46325,1629],{"class":1155},[425,46327,46318],{"class":435},[425,46329,46330],{"class":1216},"  # 某一类别的子目录\n",[425,46332,46333,46336,46338,46341],{"class":427,"line":3621},[425,46334,46335],{"class":701},"    images ",[425,46337,1204],{"class":1155},[425,46339,46340],{"class":701}," os.listdir(cla_path)  ",[425,46342,46343],{"class":1216},"# iamges 列表存储了该目录下所有图像的名称\n",[425,46345,46346,46349,46351,46353],{"class":427,"line":8948},[425,46347,46348],{"class":701},"    num ",[425,46350,1204],{"class":1155},[425,46352,8331],{"class":691},[425,46354,46355],{"class":701},"(images)\n",[425,46357,46358,46361,46363,46366,46368,46370,46372,46375,46377,46380],{"class":427,"line":8972},[425,46359,46360],{"class":701},"    eval_index ",[425,46362,1204],{"class":1155},[425,46364,46365],{"class":701}," random.sample(images, ",[425,46367,1641],{"class":6216},[425,46369,1204],{"class":1155},[425,46371,1162],{"class":691},[425,46373,46374],{"class":701},"(num ",[425,46376,1603],{"class":1155},[425,46378,46379],{"class":701}," split_rate))  ",[425,46381,46382],{"class":1216},"# 从images列表中随机抽取 k 个图像名称\n",[425,46384,46385],{"class":427,"line":8977},[425,46386,46387],{"class":1216},"    # 遍历该类别下的所有图片\n",[425,46389,46390],{"class":427,"line":8983},[425,46391,46392],{"class":1216},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[425,46394,46395,46397,46400,46402,46404],{"class":427,"line":9010},[425,46396,4201],{"class":1155},[425,46398,46399],{"class":701}," index, image ",[425,46401,27034],{"class":1155},[425,46403,32361],{"class":691},[425,46405,46406],{"class":701},"(images):\n",[425,46408,46409],{"class":427,"line":9015},[425,46410,46411],{"class":1216},"        # eval_index 中保存验证集val的图像名称\n",[425,46413,46414,46416,46419,46421],{"class":427,"line":9021},[425,46415,3497],{"class":1155},[425,46417,46418],{"class":701}," image ",[425,46420,27034],{"class":1155},[425,46422,46423],{"class":701}," eval_index:\n",[425,46425,46426,46429,46431,46434,46436],{"class":427,"line":9033},[425,46427,46428],{"class":701},"            image_path ",[425,46430,1204],{"class":1155},[425,46432,46433],{"class":701}," cla_path ",[425,46435,1629],{"class":1155},[425,46437,46438],{"class":701}," image\n",[425,46440,46441,46444,46446,46449,46451],{"class":427,"line":9045},[425,46442,46443],{"class":701},"            new_path ",[425,46445,1204],{"class":1155},[425,46447,46448],{"class":435}," 'data\u002Ftest\u002F'",[425,46450,46321],{"class":1155},[425,46452,46453],{"class":701}," cla\n",[425,46455,46456,46459],{"class":427,"line":9057},[425,46457,46458],{"class":701},"            copy(image_path, new_path)  ",[425,46460,46461],{"class":1216},"# 将选中的图像复制到新路径\n",[425,46463,46464],{"class":427,"line":10715},[425,46465,3400],{"emptyLinePlaceholder":1084},[425,46467,46468],{"class":427,"line":10740},[425,46469,46470],{"class":1216},"        # 其余的图像保存在训练集train中\n",[425,46472,46473,46475],{"class":427,"line":10763},[425,46474,3534],{"class":1155},[425,46476,4739],{"class":701},[425,46478,46479,46481,46483,46485,46487],{"class":427,"line":10787},[425,46480,46428],{"class":701},[425,46482,1204],{"class":1155},[425,46484,46433],{"class":701},[425,46486,1629],{"class":1155},[425,46488,46438],{"class":701},[425,46490,46491,46493,46495,46498,46500],{"class":427,"line":10792},[425,46492,46443],{"class":701},[425,46494,1204],{"class":1155},[425,46496,46497],{"class":435}," 'data\u002Ftrain\u002F'",[425,46499,46321],{"class":1155},[425,46501,46453],{"class":701},[425,46503,46504],{"class":427,"line":10797},[425,46505,46506],{"class":701},"            copy(image_path, new_path)\n",[425,46508,46509],{"class":427,"line":10802},[425,46510,46511],{"class":1216},"            # 打印进度条信息\n",[425,46513,46514],{"class":427,"line":10811},[425,46515,46516],{"class":1216},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[425,46518,46519,46521,46523,46525,46528,46530,46532,46535,46537,46539,46541,46544,46547,46549,46551,46554,46557,46559,46561,46564],{"class":427,"line":10816},[425,46520,33206],{"class":691},[425,46522,1159],{"class":701},[425,46524,1400],{"class":435},[425,46526,46527],{"class":691},"\\r",[425,46529,2037],{"class":435},[425,46531,33214],{"class":691},[425,46533,46534],{"class":435},"] processing [",[425,46536,33214],{"class":691},[425,46538,1732],{"class":435},[425,46540,33214],{"class":691},[425,46542,46543],{"class":435},"]\"",[425,46545,46546],{"class":701},".format(cla, index ",[425,46548,1629],{"class":1155},[425,46550,26109],{"class":691},[425,46552,46553],{"class":701},", num), ",[425,46555,46556],{"class":6216},"end",[425,46558,1204],{"class":1155},[425,46560,8652],{"class":435},[425,46562,46563],{"class":701},")  ",[425,46565,46566],{"class":1216},"# processing bar\n",[425,46568,46569,46571],{"class":427,"line":10822},[425,46570,32054],{"class":691},[425,46572,2976],{"class":701},[425,46574,46575],{"class":427,"line":10843},[425,46576,3400],{"emptyLinePlaceholder":1084},[425,46578,46579,46581,46583,46586],{"class":427,"line":10849},[425,46580,31170],{"class":691},[425,46582,1159],{"class":701},[425,46584,46585],{"class":435},"\"processing done!\"",[425,46587,1165],{"class":701},[19,46589,46590],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22995,46592,46594],{"id":46593},"_242模型代码","2.4.2.模型代码",[19,46596,46597],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[416,46599,46601],{"className":31133,"code":46600,"language":31135,"meta":395,"style":395},"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",[422,46602,46603,46609,46619,46629,46633,46649,46657,46671,46681,46685,46715,46719,46753,46799,46803,46837,46883,46887,46891,46925,46955,46959,46967,46981,47003,47025,47043,47047,47061,47065,47069,47085,47089,47097,47111,47121,47165,47169,47197,47201,47211,47239,47243,47279,47283,47311,47315,47325,47357,47389,47417,47421,47431,47463,47495,47527,47559,47591,47619,47623,47633,47665,47697,47709,47713,47725,47729,47733,47745,47753,47773,47777,47781,47785,47789,47793,47797,47811,47819,47827,47839,47853,47861,47865,47873,47883,47893,47903,47913,47923,47929,47933,47937,47949,47969,47977],{"__ignoreMap":395},[425,46604,46605,46607],{"class":427,"line":428},[425,46606,31147],{"class":1155},[425,46608,31150],{"class":701},[425,46610,46611,46613,46615,46617],{"class":427,"line":698},[425,46612,31492],{"class":1155},[425,46614,31495],{"class":701},[425,46616,31147],{"class":1155},[425,46618,31500],{"class":701},[425,46620,46621,46623,46625,46627],{"class":427,"line":710},[425,46622,31492],{"class":1155},[425,46624,31512],{"class":701},[425,46626,31147],{"class":1155},[425,46628,31517],{"class":701},[425,46630,46631],{"class":427,"line":721},[425,46632,3400],{"emptyLinePlaceholder":1084},[425,46634,46635,46637,46639,46641,46643,46645,46647],{"class":427,"line":735},[425,46636,15691],{"class":1155},[425,46638,42248],{"class":431},[425,46640,1159],{"class":701},[425,46642,31533],{"class":431},[425,46644,1706],{"class":701},[425,46646,31538],{"class":431},[425,46648,31541],{"class":701},[425,46650,46651,46653,46655],{"class":427,"line":743},[425,46652,31556],{"class":1155},[425,46654,31559],{"class":691},[425,46656,42267],{"class":701},[425,46658,46659,46661,46663,46665,46667,46669],{"class":427,"line":751},[425,46660,31572],{"class":691},[425,46662,42274],{"class":701},[425,46664,31578],{"class":691},[425,46666,31581],{"class":701},[425,46668,31584],{"class":691},[425,46670,2976],{"class":701},[425,46672,46673,46675,46677,46679],{"class":427,"line":759},[425,46674,31600],{"class":691},[425,46676,35526],{"class":701},[425,46678,1204],{"class":1155},[425,46680,35531],{"class":701},[425,46682,46683],{"class":427,"line":770},[425,46684,42297],{"class":1216},[425,46686,46687,46689,46691,46693,46695,46697,46699,46701,46703,46705,46707,46709,46711,46713],{"class":427,"line":780},[425,46688,31600],{"class":691},[425,46690,42304],{"class":701},[425,46692,1204],{"class":1155},[425,46694,31608],{"class":701},[425,46696,31611],{"class":6216},[425,46698,1204],{"class":1155},[425,46700,42315],{"class":701},[425,46702,31620],{"class":6216},[425,46704,1204],{"class":1155},[425,46706,42322],{"class":701},[425,46708,31629],{"class":6216},[425,46710,1204],{"class":1155},[425,46712,1367],{"class":691},[425,46714,1165],{"class":701},[425,46716,46717],{"class":427,"line":790},[425,46718,42335],{"class":1216},[425,46720,46721,46723,46725,46727,46729,46731,46733,46735,46737,46739,46741,46743,46745,46747,46749,46751],{"class":427,"line":805},[425,46722,31600],{"class":691},[425,46724,42342],{"class":701},[425,46726,1204],{"class":1155},[425,46728,31608],{"class":701},[425,46730,31611],{"class":6216},[425,46732,1204],{"class":1155},[425,46734,42315],{"class":701},[425,46736,31620],{"class":6216},[425,46738,1204],{"class":1155},[425,46740,42359],{"class":701},[425,46742,1341],{"class":691},[425,46744,42364],{"class":701},[425,46746,31629],{"class":6216},[425,46748,1204],{"class":1155},[425,46750,1367],{"class":691},[425,46752,1165],{"class":701},[425,46754,46755,46757,46759,46761,46763,46765,46767,46769,46771,46773,46775,46777,46779,46781,46783,46785,46787,46789,46791,46793,46795,46797],{"class":427,"line":818},[425,46756,31600],{"class":691},[425,46758,42379],{"class":701},[425,46760,1204],{"class":1155},[425,46762,31608],{"class":701},[425,46764,31611],{"class":6216},[425,46766,1204],{"class":1155},[425,46768,42359],{"class":701},[425,46770,1341],{"class":691},[425,46772,42364],{"class":701},[425,46774,31620],{"class":6216},[425,46776,1204],{"class":1155},[425,46778,42359],{"class":701},[425,46780,1367],{"class":691},[425,46782,42364],{"class":701},[425,46784,31629],{"class":6216},[425,46786,1204],{"class":1155},[425,46788,1229],{"class":691},[425,46790,1527],{"class":701},[425,46792,31638],{"class":6216},[425,46794,1204],{"class":1155},[425,46796,1367],{"class":691},[425,46798,1165],{"class":701},[425,46800,46801],{"class":427,"line":831},[425,46802,42424],{"class":1216},[425,46804,46805,46807,46809,46811,46813,46815,46817,46819,46821,46823,46825,46827,46829,46831,46833,46835],{"class":427,"line":841},[425,46806,31600],{"class":691},[425,46808,42431],{"class":701},[425,46810,1204],{"class":1155},[425,46812,31608],{"class":701},[425,46814,31611],{"class":6216},[425,46816,1204],{"class":1155},[425,46818,42315],{"class":701},[425,46820,31620],{"class":6216},[425,46822,1204],{"class":1155},[425,46824,42448],{"class":701},[425,46826,1341],{"class":691},[425,46828,42364],{"class":701},[425,46830,31629],{"class":6216},[425,46832,1204],{"class":1155},[425,46834,1367],{"class":691},[425,46836,1165],{"class":701},[425,46838,46839,46841,46843,46845,46847,46849,46851,46853,46855,46857,46859,46861,46863,46865,46867,46869,46871,46873,46875,46877,46879,46881],{"class":427,"line":852},[425,46840,31600],{"class":691},[425,46842,42467],{"class":701},[425,46844,1204],{"class":1155},[425,46846,31608],{"class":701},[425,46848,31611],{"class":6216},[425,46850,1204],{"class":1155},[425,46852,42448],{"class":701},[425,46854,1341],{"class":691},[425,46856,42364],{"class":701},[425,46858,31620],{"class":6216},[425,46860,1204],{"class":1155},[425,46862,42448],{"class":701},[425,46864,1367],{"class":691},[425,46866,42364],{"class":701},[425,46868,31629],{"class":6216},[425,46870,1204],{"class":1155},[425,46872,1468],{"class":691},[425,46874,1527],{"class":701},[425,46876,31638],{"class":6216},[425,46878,1204],{"class":1155},[425,46880,1235],{"class":691},[425,46882,1165],{"class":701},[425,46884,46885],{"class":427,"line":862},[425,46886,42512],{"class":1216},[425,46888,46889],{"class":427,"line":878},[425,46890,42517],{"class":1216},[425,46892,46893,46895,46897,46899,46901,46903,46905,46907,46909,46911,46913,46915,46917,46919,46921,46923],{"class":427,"line":914},[425,46894,31600],{"class":691},[425,46896,42524],{"class":701},[425,46898,1204],{"class":1155},[425,46900,35584],{"class":701},[425,46902,31629],{"class":6216},[425,46904,1204],{"class":1155},[425,46906,1229],{"class":691},[425,46908,1527],{"class":701},[425,46910,31684],{"class":6216},[425,46912,1204],{"class":1155},[425,46914,1367],{"class":691},[425,46916,1527],{"class":701},[425,46918,31638],{"class":6216},[425,46920,1204],{"class":1155},[425,46922,1367],{"class":691},[425,46924,1165],{"class":701},[425,46926,46927,46929,46931,46933,46935,46937,46939,46941,46943,46945,46947,46949,46951,46953],{"class":427,"line":943},[425,46928,31600],{"class":691},[425,46930,42559],{"class":701},[425,46932,1204],{"class":1155},[425,46934,31608],{"class":701},[425,46936,31611],{"class":6216},[425,46938,1204],{"class":1155},[425,46940,42315],{"class":701},[425,46942,31620],{"class":6216},[425,46944,1204],{"class":1155},[425,46946,42576],{"class":701},[425,46948,31629],{"class":6216},[425,46950,1204],{"class":1155},[425,46952,1367],{"class":691},[425,46954,1165],{"class":701},[425,46956,46957],{"class":427,"line":956},[425,46958,3400],{"emptyLinePlaceholder":1084},[425,46960,46961,46963,46965],{"class":427,"line":964},[425,46962,31556],{"class":1155},[425,46964,31848],{"class":431},[425,46966,31851],{"class":701},[425,46968,46969,46971,46973,46975,46977,46979],{"class":427,"line":2733},[425,46970,42601],{"class":701},[425,46972,1204],{"class":1155},[425,46974,31578],{"class":691},[425,46976,35939],{"class":701},[425,46978,31578],{"class":691},[425,46980,42612],{"class":701},[425,46982,46983,46985,46987,46989,46991,46993,46995,46997,46999,47001],{"class":427,"line":2750},[425,46984,8085],{"class":701},[425,46986,1204],{"class":1155},[425,46988,31578],{"class":691},[425,46990,35939],{"class":701},[425,46992,31578],{"class":691},[425,46994,42627],{"class":701},[425,46996,31578],{"class":691},[425,46998,35939],{"class":701},[425,47000,31578],{"class":691},[425,47002,42636],{"class":701},[425,47004,47005,47007,47009,47011,47013,47015,47017,47019,47021,47023],{"class":427,"line":2755},[425,47006,42641],{"class":701},[425,47008,1204],{"class":1155},[425,47010,31578],{"class":691},[425,47012,35939],{"class":701},[425,47014,31578],{"class":691},[425,47016,42652],{"class":701},[425,47018,31578],{"class":691},[425,47020,35939],{"class":701},[425,47022,31578],{"class":691},[425,47024,42661],{"class":701},[425,47026,47027,47029,47031,47033,47035,47037,47039,47041],{"class":427,"line":2760},[425,47028,42666],{"class":701},[425,47030,1204],{"class":1155},[425,47032,31578],{"class":691},[425,47034,35939],{"class":701},[425,47036,31578],{"class":691},[425,47038,42677],{"class":701},[425,47040,31578],{"class":691},[425,47042,42682],{"class":701},[425,47044,47045],{"class":427,"line":2765},[425,47046,42687],{"class":1216},[425,47048,47049,47051,47053,47055,47057,47059],{"class":427,"line":2779},[425,47050,15749],{"class":1155},[425,47052,42694],{"class":701},[425,47054,33440],{"class":6216},[425,47056,1204],{"class":1155},[425,47058,1367],{"class":691},[425,47060,1165],{"class":701},[425,47062,47063],{"class":427,"line":2784},[425,47064,3400],{"emptyLinePlaceholder":1084},[425,47066,47067],{"class":427,"line":3577},[425,47068,42715],{"class":1216},[425,47070,47071,47073,47075,47077,47079,47081,47083],{"class":427,"line":3591},[425,47072,15691],{"class":1155},[425,47074,42722],{"class":431},[425,47076,1159],{"class":701},[425,47078,31533],{"class":431},[425,47080,1706],{"class":701},[425,47082,31538],{"class":431},[425,47084,31541],{"class":701},[425,47086,47087],{"class":427,"line":3599},[425,47088,42737],{"class":1216},[425,47090,47091,47093,47095],{"class":427,"line":3604},[425,47092,31556],{"class":1155},[425,47094,31559],{"class":691},[425,47096,42746],{"class":701},[425,47098,47099,47101,47103,47105,47107,47109],{"class":427,"line":3610},[425,47100,31572],{"class":691},[425,47102,42753],{"class":701},[425,47104,31578],{"class":691},[425,47106,31581],{"class":701},[425,47108,31584],{"class":691},[425,47110,2976],{"class":701},[425,47112,47113,47115,47117,47119],{"class":427,"line":3616},[425,47114,31600],{"class":691},[425,47116,42768],{"class":701},[425,47118,1204],{"class":1155},[425,47120,38764],{"class":701},[425,47122,47123,47125,47127,47129,47131,47133,47135,47137,47139,47141,47143,47145,47147,47149,47151,47153,47155,47157,47159,47161,47163],{"class":427,"line":3621},[425,47124,38769],{"class":701},[425,47126,31611],{"class":6216},[425,47128,1204],{"class":1155},[425,47130,1229],{"class":691},[425,47132,1527],{"class":701},[425,47134,31620],{"class":6216},[425,47136,1204],{"class":1155},[425,47138,1353],{"class":691},[425,47140,1527],{"class":701},[425,47142,31629],{"class":6216},[425,47144,1204],{"class":1155},[425,47146,1518],{"class":691},[425,47148,1527],{"class":701},[425,47150,31684],{"class":6216},[425,47152,1204],{"class":1155},[425,47154,1235],{"class":691},[425,47156,1527],{"class":701},[425,47158,31638],{"class":6216},[425,47160,1204],{"class":1155},[425,47162,1229],{"class":691},[425,47164,38802],{"class":701},[425,47166,47167],{"class":427,"line":8948},[425,47168,38807],{"class":701},[425,47170,47171,47173,47175,47177,47179,47181,47183,47185,47187,47189,47191,47193,47195],{"class":427,"line":8972},[425,47172,38852],{"class":701},[425,47174,31629],{"class":6216},[425,47176,1204],{"class":1155},[425,47178,1229],{"class":691},[425,47180,1527],{"class":701},[425,47182,31684],{"class":6216},[425,47184,1204],{"class":1155},[425,47186,1235],{"class":691},[425,47188,1527],{"class":701},[425,47190,31638],{"class":6216},[425,47192,1204],{"class":1155},[425,47194,1367],{"class":691},[425,47196,1165],{"class":701},[425,47198,47199],{"class":427,"line":8977},[425,47200,38881],{"class":701},[425,47202,47203,47205,47207,47209],{"class":427,"line":8983},[425,47204,31600],{"class":691},[425,47206,42859],{"class":701},[425,47208,1204],{"class":1155},[425,47210,38764],{"class":701},[425,47212,47213,47215,47217,47219,47221,47223,47225,47227,47229,47231,47233,47235,47237],{"class":427,"line":9010},[425,47214,38769],{"class":701},[425,47216,31611],{"class":6216},[425,47218,1204],{"class":1155},[425,47220,1353],{"class":691},[425,47222,1527],{"class":701},[425,47224,31620],{"class":6216},[425,47226,1204],{"class":1155},[425,47228,1353],{"class":691},[425,47230,1527],{"class":701},[425,47232,31629],{"class":6216},[425,47234,1204],{"class":1155},[425,47236,1367],{"class":691},[425,47238,38802],{"class":701},[425,47240,47241],{"class":427,"line":9015},[425,47242,38807],{"class":701},[425,47244,47245,47247,47249,47251,47253,47255,47257,47259,47261,47263,47265,47267,47269,47271,47273,47275,47277],{"class":427,"line":9021},[425,47246,38769],{"class":701},[425,47248,31611],{"class":6216},[425,47250,1204],{"class":1155},[425,47252,1353],{"class":691},[425,47254,1527],{"class":701},[425,47256,31620],{"class":6216},[425,47258,1204],{"class":1155},[425,47260,42914],{"class":691},[425,47262,1527],{"class":701},[425,47264,31629],{"class":6216},[425,47266,1204],{"class":1155},[425,47268,1229],{"class":691},[425,47270,1527],{"class":701},[425,47272,31638],{"class":6216},[425,47274,1204],{"class":1155},[425,47276,1367],{"class":691},[425,47278,38802],{"class":701},[425,47280,47281],{"class":427,"line":9033},[425,47282,38807],{"class":701},[425,47284,47285,47287,47289,47291,47293,47295,47297,47299,47301,47303,47305,47307,47309],{"class":427,"line":9045},[425,47286,38852],{"class":701},[425,47288,31629],{"class":6216},[425,47290,1204],{"class":1155},[425,47292,1229],{"class":691},[425,47294,1527],{"class":701},[425,47296,31684],{"class":6216},[425,47298,1204],{"class":1155},[425,47300,1235],{"class":691},[425,47302,1527],{"class":701},[425,47304,31638],{"class":6216},[425,47306,1204],{"class":1155},[425,47308,1367],{"class":691},[425,47310,1165],{"class":701},[425,47312,47313],{"class":427,"line":9057},[425,47314,38881],{"class":701},[425,47316,47317,47319,47321,47323],{"class":427,"line":10715},[425,47318,31600],{"class":691},[425,47320,42975],{"class":701},[425,47322,1204],{"class":1155},[425,47324,38764],{"class":701},[425,47326,47327,47329,47331,47333,47335,47337,47339,47341,47343,47345,47347,47349,47351,47353,47355],{"class":427,"line":10740},[425,47328,42984],{"class":701},[425,47330,42914],{"class":691},[425,47332,1527],{"class":701},[425,47334,1353],{"class":691},[425,47336,42993],{"class":701},[425,47338,1359],{"class":691},[425,47340,1527],{"class":701},[425,47342,32825],{"class":691},[425,47344,43002],{"class":701},[425,47346,1749],{"class":691},[425,47348,1527],{"class":701},[425,47350,1347],{"class":691},[425,47352,43011],{"class":701},[425,47354,1347],{"class":691},[425,47356,38802],{"class":701},[425,47358,47359,47361,47363,47365,47367,47369,47371,47373,47375,47377,47379,47381,47383,47385,47387],{"class":427,"line":10763},[425,47360,42984],{"class":701},[425,47362,35625],{"class":691},[425,47364,1527],{"class":701},[425,47366,32825],{"class":691},[425,47368,42993],{"class":701},[425,47370,32825],{"class":691},[425,47372,1527],{"class":701},[425,47374,42914],{"class":691},[425,47376,43002],{"class":701},[425,47378,1347],{"class":691},[425,47380,1527],{"class":701},[425,47382,1359],{"class":691},[425,47384,43011],{"class":701},[425,47386,1353],{"class":691},[425,47388,38802],{"class":701},[425,47390,47391,47393,47395,47397,47399,47401,47403,47405,47407,47409,47411,47413,47415],{"class":427,"line":10787},[425,47392,38852],{"class":701},[425,47394,31629],{"class":6216},[425,47396,1204],{"class":1155},[425,47398,1229],{"class":691},[425,47400,1527],{"class":701},[425,47402,31684],{"class":6216},[425,47404,1204],{"class":1155},[425,47406,1235],{"class":691},[425,47408,1527],{"class":701},[425,47410,31638],{"class":6216},[425,47412,1204],{"class":1155},[425,47414,1367],{"class":691},[425,47416,1165],{"class":701},[425,47418,47419],{"class":427,"line":10792},[425,47420,38881],{"class":701},[425,47422,47423,47425,47427,47429],{"class":427,"line":10797},[425,47424,31600],{"class":691},[425,47426,43086],{"class":701},[425,47428,1204],{"class":1155},[425,47430,38764],{"class":701},[425,47432,47433,47435,47437,47439,47441,47443,47445,47447,47449,47451,47453,47455,47457,47459,47461],{"class":427,"line":10802},[425,47434,42984],{"class":701},[425,47436,43097],{"class":691},[425,47438,1527],{"class":701},[425,47440,42914],{"class":691},[425,47442,42993],{"class":701},[425,47444,1359],{"class":691},[425,47446,1527],{"class":701},[425,47448,43110],{"class":691},[425,47450,43002],{"class":701},[425,47452,1749],{"class":691},[425,47454,1527],{"class":701},[425,47456,1755],{"class":691},[425,47458,43011],{"class":701},[425,47460,1353],{"class":691},[425,47462,38802],{"class":701},[425,47464,47465,47467,47469,47471,47473,47475,47477,47479,47481,47483,47485,47487,47489,47491,47493],{"class":427,"line":10811},[425,47466,42984],{"class":701},[425,47468,39212],{"class":691},[425,47470,1527],{"class":701},[425,47472,22045],{"class":691},[425,47474,42993],{"class":701},[425,47476,1766],{"class":691},[425,47478,1527],{"class":701},[425,47480,32256],{"class":691},[425,47482,43002],{"class":701},[425,47484,1948],{"class":691},[425,47486,1527],{"class":701},[425,47488,1353],{"class":691},[425,47490,43011],{"class":701},[425,47492,1353],{"class":691},[425,47494,38802],{"class":701},[425,47496,47497,47499,47501,47503,47505,47507,47509,47511,47513,47515,47517,47519,47521,47523,47525],{"class":427,"line":10816},[425,47498,42984],{"class":701},[425,47500,39212],{"class":691},[425,47502,1527],{"class":701},[425,47504,32825],{"class":691},[425,47506,42993],{"class":701},[425,47508,32825],{"class":691},[425,47510,1527],{"class":701},[425,47512,35625],{"class":691},[425,47514,43002],{"class":701},[425,47516,1948],{"class":691},[425,47518,1527],{"class":701},[425,47520,1353],{"class":691},[425,47522,43011],{"class":701},[425,47524,1353],{"class":691},[425,47526,38802],{"class":701},[425,47528,47529,47531,47533,47535,47537,47539,47541,47543,47545,47547,47549,47551,47553,47555,47557],{"class":427,"line":10822},[425,47530,42984],{"class":701},[425,47532,39212],{"class":691},[425,47534,1527],{"class":701},[425,47536,1766],{"class":691},[425,47538,42993],{"class":701},[425,47540,32825],{"class":691},[425,47542,1527],{"class":701},[425,47544,43207],{"class":691},[425,47546,43002],{"class":701},[425,47548,1347],{"class":691},[425,47550,1527],{"class":701},[425,47552,1353],{"class":691},[425,47554,43011],{"class":701},[425,47556,1353],{"class":691},[425,47558,38802],{"class":701},[425,47560,47561,47563,47565,47567,47569,47571,47573,47575,47577,47579,47581,47583,47585,47587,47589],{"class":427,"line":10843},[425,47562,42984],{"class":701},[425,47564,43228],{"class":691},[425,47566,1527],{"class":701},[425,47568,35625],{"class":691},[425,47570,42993],{"class":701},[425,47572,22045],{"class":691},[425,47574,1527],{"class":701},[425,47576,43241],{"class":691},[425,47578,43002],{"class":701},[425,47580,1347],{"class":691},[425,47582,1527],{"class":701},[425,47584,32825],{"class":691},[425,47586,43011],{"class":701},[425,47588,32825],{"class":691},[425,47590,38802],{"class":701},[425,47592,47593,47595,47597,47599,47601,47603,47605,47607,47609,47611,47613,47615,47617],{"class":427,"line":10849},[425,47594,38852],{"class":701},[425,47596,31629],{"class":6216},[425,47598,1204],{"class":1155},[425,47600,1229],{"class":691},[425,47602,1527],{"class":701},[425,47604,31684],{"class":6216},[425,47606,1204],{"class":1155},[425,47608,1235],{"class":691},[425,47610,1527],{"class":701},[425,47612,31638],{"class":6216},[425,47614,1204],{"class":1155},[425,47616,1367],{"class":691},[425,47618,1165],{"class":701},[425,47620,47621],{"class":427,"line":10863},[425,47622,38881],{"class":701},[425,47624,47625,47627,47629,47631],{"class":427,"line":10869},[425,47626,31600],{"class":691},[425,47628,43294],{"class":701},[425,47630,1204],{"class":1155},[425,47632,38764],{"class":701},[425,47634,47635,47637,47639,47641,47643,47645,47647,47649,47651,47653,47655,47657,47659,47661,47663],{"class":427,"line":10896},[425,47636,42984],{"class":701},[425,47638,43305],{"class":691},[425,47640,1527],{"class":701},[425,47642,35625],{"class":691},[425,47644,42993],{"class":701},[425,47646,22045],{"class":691},[425,47648,1527],{"class":701},[425,47650,43241],{"class":691},[425,47652,43002],{"class":701},[425,47654,1347],{"class":691},[425,47656,1527],{"class":701},[425,47658,32825],{"class":691},[425,47660,43011],{"class":701},[425,47662,32825],{"class":691},[425,47664,38802],{"class":701},[425,47666,47667,47669,47671,47673,47675,47677,47679,47681,47683,47685,47687,47689,47691,47693,47695],{"class":427,"line":10905},[425,47668,42984],{"class":701},[425,47670,43305],{"class":691},[425,47672,1527],{"class":701},[425,47674,35695],{"class":691},[425,47676,42993],{"class":701},[425,47678,42914],{"class":691},[425,47680,1527],{"class":701},[425,47682,35695],{"class":691},[425,47684,43002],{"class":701},[425,47686,1755],{"class":691},[425,47688,1527],{"class":701},[425,47690,32825],{"class":691},[425,47692,43011],{"class":701},[425,47694,32825],{"class":691},[425,47696,38802],{"class":701},[425,47698,47699,47701,47703,47705,47707],{"class":427,"line":10911},[425,47700,43368],{"class":701},[425,47702,1367],{"class":691},[425,47704,1527],{"class":701},[425,47706,1367],{"class":691},[425,47708,43377],{"class":701},[425,47710,47711],{"class":427,"line":10919},[425,47712,39545],{"class":701},[425,47714,47715,47717,47719,47721,47723],{"class":427,"line":10924},[425,47716,39550],{"class":701},[425,47718,43388],{"class":691},[425,47720,1527],{"class":701},[425,47722,1235],{"class":691},[425,47724,1165],{"class":701},[425,47726,47727],{"class":427,"line":17601},[425,47728,38881],{"class":701},[425,47730,47731],{"class":427,"line":17607},[425,47732,43403],{"class":1216},[425,47734,47735,47737,47739,47741,47743],{"class":427,"line":17630},[425,47736,4403],{"class":1155},[425,47738,39623],{"class":701},[425,47740,27034],{"class":1155},[425,47742,39628],{"class":691},[425,47744,39631],{"class":701},[425,47746,47747,47749,47751],{"class":427,"line":17636},[425,47748,5642],{"class":1155},[425,47750,39643],{"class":691},[425,47752,39646],{"class":701},[425,47754,47755,47757,47759,47761,47763,47765,47767,47769,47771],{"class":427,"line":17659},[425,47756,39656],{"class":701},[425,47758,43430],{"class":6216},[425,47760,1204],{"class":1155},[425,47762,43435],{"class":435},[425,47764,1527],{"class":701},[425,47766,39659],{"class":6216},[425,47768,1204],{"class":1155},[425,47770,39664],{"class":435},[425,47772,1165],{"class":701},[425,47774,47775],{"class":427,"line":17673},[425,47776,43450],{"class":1216},[425,47778,47779],{"class":427,"line":17693},[425,47780,43455],{"class":1216},[425,47782,47783],{"class":427,"line":17699},[425,47784,43460],{"class":1216},[425,47786,47787],{"class":427,"line":17710},[425,47788,43465],{"class":1216},[425,47790,47791],{"class":427,"line":17733},[425,47792,43470],{"class":1216},[425,47794,47795],{"class":427,"line":17755},[425,47796,43475],{"class":1216},[425,47798,47799,47801,47803,47805,47807,47809],{"class":427,"line":17760},[425,47800,39676],{"class":1155},[425,47802,39679],{"class":701},[425,47804,39682],{"class":1155},[425,47806,39685],{"class":1155},[425,47808,39688],{"class":691},[425,47810,4739],{"class":701},[425,47812,47813,47815,47817],{"class":427,"line":17766},[425,47814,39700],{"class":701},[425,47816,1341],{"class":691},[425,47818,1165],{"class":701},[425,47820,47821,47823,47825],{"class":427,"line":17780},[425,47822,43502],{"class":1155},[425,47824,39643],{"class":691},[425,47826,39719],{"class":701},[425,47828,47829,47831,47833,47835,47837],{"class":427,"line":17793},[425,47830,43511],{"class":701},[425,47832,1341],{"class":691},[425,47834,1527],{"class":701},[425,47836,39741],{"class":691},[425,47838,1165],{"class":701},[425,47840,47841,47843,47845,47847,47849,47851],{"class":427,"line":17798},[425,47842,43524],{"class":1155},[425,47844,39679],{"class":701},[425,47846,39682],{"class":1155},[425,47848,39685],{"class":1155},[425,47850,39688],{"class":691},[425,47852,4739],{"class":701},[425,47854,47855,47857,47859],{"class":427,"line":17812},[425,47856,43539],{"class":701},[425,47858,1341],{"class":691},[425,47860,1165],{"class":701},[425,47862,47863],{"class":427,"line":17817},[425,47864,35920],{"class":1216},[425,47866,47867,47869,47871],{"class":427,"line":17823},[425,47868,31556],{"class":1155},[425,47870,31848],{"class":431},[425,47872,31851],{"class":701},[425,47874,47875,47877,47879,47881],{"class":427,"line":17828},[425,47876,31856],{"class":701},[425,47878,1204],{"class":1155},[425,47880,31578],{"class":691},[425,47882,43566],{"class":701},[425,47884,47885,47887,47889,47891],{"class":427,"line":17842},[425,47886,31856],{"class":701},[425,47888,1204],{"class":1155},[425,47890,31578],{"class":691},[425,47892,43577],{"class":701},[425,47894,47895,47897,47899,47901],{"class":427,"line":17847},[425,47896,31856],{"class":701},[425,47898,1204],{"class":1155},[425,47900,31578],{"class":691},[425,47902,43588],{"class":701},[425,47904,47905,47907,47909,47911],{"class":427,"line":17852},[425,47906,31856],{"class":701},[425,47908,1204],{"class":1155},[425,47910,31578],{"class":691},[425,47912,43599],{"class":701},[425,47914,47915,47917,47919,47921],{"class":427,"line":17866},[425,47916,31856],{"class":701},[425,47918,1204],{"class":1155},[425,47920,31578],{"class":691},[425,47922,43610],{"class":701},[425,47924,47925,47927],{"class":427,"line":17878},[425,47926,15749],{"class":1155},[425,47928,31964],{"class":701},[425,47930,47931],{"class":427,"line":17883},[425,47932,3400],{"emptyLinePlaceholder":1084},[425,47934,47935],{"class":427,"line":17896},[425,47936,43625],{"class":1216},[425,47938,47939,47941,47943,47945,47947],{"class":427,"line":17901},[425,47940,2544],{"class":1155},[425,47942,31975],{"class":691},[425,47944,3949],{"class":1155},[425,47946,31980],{"class":435},[425,47948,4739],{"class":701},[425,47950,47951,47953,47955,47957,47959,47961,47963,47965,47967],{"class":427,"line":17906},[425,47952,31992],{"class":701},[425,47954,1204],{"class":1155},[425,47956,31206],{"class":701},[425,47958,31999],{"class":435},[425,47960,2706],{"class":1155},[425,47962,32004],{"class":701},[425,47964,2703],{"class":1155},[425,47966,31231],{"class":435},[425,47968,1165],{"class":701},[425,47970,47971,47973,47975],{"class":427,"line":17911},[425,47972,32044],{"class":701},[425,47974,1204],{"class":1155},[425,47976,43666],{"class":701},[425,47978,47979,47981,47983,47985,47987,47989,47991,47993],{"class":427,"line":17924},[425,47980,32054],{"class":691},[425,47982,32057],{"class":701},[425,47984,1367],{"class":691},[425,47986,1527],{"class":701},[425,47988,32256],{"class":691},[425,47990,1527],{"class":701},[425,47992,32256],{"class":691},[425,47994,32070],{"class":701},[22995,47996,47998],{"id":47997},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,48000,48001],{},"计算图片的均值与方差，用于训练中归一化处理操作",[416,48003,48005],{"className":31133,"code":48004,"language":31135,"meta":395,"style":395},"# 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",[422,48006,48007,48012,48025,48030,48036,48041,48051,48055,48060,48070,48074,48079,48089,48106,48110,48115,48127,48139,48170,48179,48189,48199,48203,48208,48223,48227,48232,48237,48242,48252,48257,48282,48286,48291,48306,48310,48323,48327,48332,48337,48342,48347,48352,48362,48372,48395,48403,48411,48419,48423,48435,48439,48444,48448,48452,48459,48479,48503,48510,48524,48529,48534,48538,48552,48556,48568],{"__ignoreMap":395},[425,48008,48009],{"class":427,"line":428},[425,48010,48011],{"class":1216},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[425,48013,48014,48016,48019,48022],{"class":427,"line":698},[425,48015,31492],{"class":1155},[425,48017,48018],{"class":691}," PIL",[425,48020,48021],{"class":1155}," import",[425,48023,48024],{"class":701}," Image\n",[425,48026,48027],{"class":427,"line":710},[425,48028,48029],{"class":1216},"# os 用来处理文件夹和文件路径\n",[425,48031,48032,48034],{"class":427,"line":721},[425,48033,31147],{"class":1155},[425,48035,46060],{"class":701},[425,48037,48038],{"class":427,"line":735},[425,48039,48040],{"class":1216},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[425,48042,48043,48045,48047,48049],{"class":427,"line":743},[425,48044,31147],{"class":1155},[425,48046,32135],{"class":701},[425,48048,32138],{"class":1155},[425,48050,32141],{"class":701},[425,48052,48053],{"class":427,"line":751},[425,48054,3400],{"emptyLinePlaceholder":1084},[425,48056,48057],{"class":427,"line":759},[425,48058,48059],{"class":1216},"# 文件夹路径，包含所有图片文件\n",[425,48061,48062,48065,48067],{"class":427,"line":770},[425,48063,48064],{"class":701},"folder_path ",[425,48066,1204],{"class":1155},[425,48068,48069],{"class":435}," 'data_cat_dog'\n",[425,48071,48072],{"class":427,"line":780},[425,48073,3400],{"emptyLinePlaceholder":1084},[425,48075,48076],{"class":427,"line":790},[425,48077,48078],{"class":1216},"# 初始化累积变量\n",[425,48080,48081,48084,48086],{"class":427,"line":805},[425,48082,48083],{"class":701},"total_pixels ",[425,48085,1204],{"class":1155},[425,48087,48088],{"class":691}," 0\n",[425,48090,48091,48094,48096,48099,48101,48103],{"class":427,"line":818},[425,48092,48093],{"class":701},"sum_normalized_pixel_values ",[425,48095,1204],{"class":1155},[425,48097,48098],{"class":701}," np.zeros(",[425,48100,1229],{"class":691},[425,48102,46563],{"class":701},[425,48104,48105],{"class":1216},"# 如果是RGB图像，需要三个通道的均值和方差\n",[425,48107,48108],{"class":427,"line":831},[425,48109,3400],{"emptyLinePlaceholder":1084},[425,48111,48112],{"class":427,"line":841},[425,48113,48114],{"class":1216},"# 遍历文件夹中的图片文件\n",[425,48116,48117,48119,48122,48124],{"class":427,"line":852},[425,48118,4025],{"class":1155},[425,48120,48121],{"class":701}," root, dirs, files ",[425,48123,27034],{"class":1155},[425,48125,48126],{"class":701}," os.walk(folder_path):\n",[425,48128,48129,48131,48134,48136],{"class":427,"line":862},[425,48130,4201],{"class":1155},[425,48132,48133],{"class":701}," filename ",[425,48135,27034],{"class":1155},[425,48137,48138],{"class":701}," files:\n",[425,48140,48141,48143,48146,48149,48151,48154,48156,48159,48161,48164,48167],{"class":427,"line":878},[425,48142,3497],{"class":1155},[425,48144,48145],{"class":701}," filename.endswith((",[425,48147,48148],{"class":435},"'.jpg'",[425,48150,13434],{"class":701},[425,48152,48153],{"class":435},"'.jpeg'",[425,48155,13434],{"class":701},[425,48157,48158],{"class":435},"'.png'",[425,48160,13434],{"class":701},[425,48162,48163],{"class":435},"'.bmp'",[425,48165,48166],{"class":701},")):  ",[425,48168,48169],{"class":1216},"# 可根据实际情况添加其他格式\n",[425,48171,48172,48174,48176],{"class":427,"line":914},[425,48173,46428],{"class":701},[425,48175,1204],{"class":1155},[425,48177,48178],{"class":701}," os.path.join(root, filename)\n",[425,48180,48181,48184,48186],{"class":427,"line":943},[425,48182,48183],{"class":701},"            image ",[425,48185,1204],{"class":1155},[425,48187,48188],{"class":701}," Image.open(image_path)\n",[425,48190,48191,48194,48196],{"class":427,"line":956},[425,48192,48193],{"class":701},"            image_array ",[425,48195,1204],{"class":1155},[425,48197,48198],{"class":701}," np.array(image)\n",[425,48200,48201],{"class":427,"line":964},[425,48202,3400],{"emptyLinePlaceholder":1084},[425,48204,48205],{"class":427,"line":2733},[425,48206,48207],{"class":1216},"            # 归一化像素值到0-1之间\n",[425,48209,48210,48213,48215,48218,48220],{"class":427,"line":2750},[425,48211,48212],{"class":701},"            normalized_image_array ",[425,48214,1204],{"class":1155},[425,48216,48217],{"class":701}," image_array ",[425,48219,1732],{"class":1155},[425,48221,48222],{"class":691}," 255.0\n",[425,48224,48225],{"class":427,"line":2755},[425,48226,3400],{"emptyLinePlaceholder":1084},[425,48228,48229],{"class":427,"line":2760},[425,48230,48231],{"class":1216},"            # print(image_path)\n",[425,48233,48234],{"class":427,"line":2765},[425,48235,48236],{"class":1216},"            # print(normalized_image_array.shape)\n",[425,48238,48239],{"class":427,"line":2779},[425,48240,48241],{"class":1216},"            # 累积归一化后的像素值和像素数量\n",[425,48243,48244,48247,48249],{"class":427,"line":2784},[425,48245,48246],{"class":701},"            total_pixels ",[425,48248,10476],{"class":1155},[425,48250,48251],{"class":701}," normalized_image_array.size\n",[425,48253,48254],{"class":427,"line":3577},[425,48255,48256],{"class":1216},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[425,48258,48259,48262,48264,48267,48270,48272,48274,48276,48278,48280],{"class":427,"line":3591},[425,48260,48261],{"class":701},"            sum_normalized_pixel_values ",[425,48263,10476],{"class":1155},[425,48265,48266],{"class":701}," np.sum(normalized_image_array, ",[425,48268,48269],{"class":6216},"axis",[425,48271,1204],{"class":1155},[425,48273,1159],{"class":701},[425,48275,1341],{"class":691},[425,48277,13434],{"class":701},[425,48279,1367],{"class":691},[425,48281,31252],{"class":701},[425,48283,48284],{"class":427,"line":3599},[425,48285,3400],{"emptyLinePlaceholder":1084},[425,48287,48288],{"class":427,"line":3604},[425,48289,48290],{"class":1216},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[425,48292,48293,48296,48298,48301,48303],{"class":427,"line":3610},[425,48294,48295],{"class":701},"mean ",[425,48297,1204],{"class":1155},[425,48299,48300],{"class":701}," sum_normalized_pixel_values ",[425,48302,1732],{"class":1155},[425,48304,48305],{"class":701}," total_pixels\n",[425,48307,48308],{"class":427,"line":3616},[425,48309,3400],{"emptyLinePlaceholder":1084},[425,48311,48312,48315,48317,48319,48321],{"class":427,"line":3621},[425,48313,48314],{"class":701},"sum_squared_diff ",[425,48316,1204],{"class":1155},[425,48318,48098],{"class":701},[425,48320,1229],{"class":691},[425,48322,1165],{"class":701},[425,48324,48325],{"class":427,"line":8948},[425,48326,3400],{"emptyLinePlaceholder":1084},[425,48328,48329],{"class":427,"line":8972},[425,48330,48331],{"class":1216},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[425,48333,48334],{"class":427,"line":8977},[425,48335,48336],{"class":1216},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[425,48338,48339],{"class":427,"line":8983},[425,48340,48341],{"class":1216},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[425,48343,48344],{"class":427,"line":9010},[425,48345,48346],{"class":1216},"# Image.open(image_path)：打开图片\n",[425,48348,48349],{"class":427,"line":9015},[425,48350,48351],{"class":1216},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[425,48353,48354,48356,48358,48360],{"class":427,"line":9021},[425,48355,4025],{"class":1155},[425,48357,48121],{"class":701},[425,48359,27034],{"class":1155},[425,48361,48126],{"class":701},[425,48363,48364,48366,48368,48370],{"class":427,"line":9033},[425,48365,4201],{"class":1155},[425,48367,48133],{"class":701},[425,48369,27034],{"class":1155},[425,48371,48138],{"class":701},[425,48373,48374,48376,48378,48380,48382,48384,48386,48388,48390,48392],{"class":427,"line":9045},[425,48375,3497],{"class":1155},[425,48377,48145],{"class":701},[425,48379,48148],{"class":435},[425,48381,13434],{"class":701},[425,48383,48153],{"class":435},[425,48385,13434],{"class":701},[425,48387,48158],{"class":435},[425,48389,13434],{"class":701},[425,48391,48163],{"class":435},[425,48393,48394],{"class":701},")):\n",[425,48396,48397,48399,48401],{"class":427,"line":9057},[425,48398,46428],{"class":701},[425,48400,1204],{"class":1155},[425,48402,48178],{"class":701},[425,48404,48405,48407,48409],{"class":427,"line":10715},[425,48406,48183],{"class":701},[425,48408,1204],{"class":1155},[425,48410,48188],{"class":701},[425,48412,48413,48415,48417],{"class":427,"line":10740},[425,48414,48193],{"class":701},[425,48416,1204],{"class":1155},[425,48418,48198],{"class":701},[425,48420,48421],{"class":427,"line":10763},[425,48422,48207],{"class":1216},[425,48424,48425,48427,48429,48431,48433],{"class":427,"line":10787},[425,48426,48212],{"class":701},[425,48428,1204],{"class":1155},[425,48430,48217],{"class":701},[425,48432,1732],{"class":1155},[425,48434,48222],{"class":691},[425,48436,48437],{"class":427,"line":10792},[425,48438,48236],{"class":1216},[425,48440,48441],{"class":427,"line":10797},[425,48442,48443],{"class":1216},"            # print(mean.shape)\n",[425,48445,48446],{"class":427,"line":10802},[425,48447,48231],{"class":1216},[425,48449,48450],{"class":427,"line":10811},[425,48451,3400],{"emptyLinePlaceholder":1084},[425,48453,48454,48457],{"class":427,"line":10816},[425,48455,48456],{"class":1155},"            try",[425,48458,4739],{"class":701},[425,48460,48461,48464,48466,48469,48471,48474,48476],{"class":427,"line":10822},[425,48462,48463],{"class":701},"                diff ",[425,48465,1204],{"class":1155},[425,48467,48468],{"class":701}," (normalized_image_array ",[425,48470,1680],{"class":1155},[425,48472,48473],{"class":701}," mean) ",[425,48475,11660],{"class":1155},[425,48477,48478],{"class":691}," 2\n",[425,48480,48481,48484,48486,48489,48491,48493,48495,48497,48499,48501],{"class":427,"line":10843},[425,48482,48483],{"class":701},"                sum_squared_diff ",[425,48485,10476],{"class":1155},[425,48487,48488],{"class":701}," np.sum(diff, ",[425,48490,48269],{"class":6216},[425,48492,1204],{"class":1155},[425,48494,1159],{"class":701},[425,48496,1341],{"class":691},[425,48498,13434],{"class":701},[425,48500,1367],{"class":691},[425,48502,31252],{"class":701},[425,48504,48505,48508],{"class":427,"line":10849},[425,48506,48507],{"class":1155},"            except",[425,48509,4739],{"class":701},[425,48511,48512,48515,48517,48519,48522],{"class":427,"line":10863},[425,48513,48514],{"class":691},"                print",[425,48516,1159],{"class":701},[425,48518,1210],{"class":1155},[425,48520,48521],{"class":435},"\"捕获到自定义异常\"",[425,48523,1165],{"class":701},[425,48525,48526],{"class":427,"line":10869},[425,48527,48528],{"class":1216},"            # diff = (normalized_image_array - mean) ** 2\n",[425,48530,48531],{"class":427,"line":10896},[425,48532,48533],{"class":1216},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[425,48535,48536],{"class":427,"line":10905},[425,48537,3400],{"emptyLinePlaceholder":1084},[425,48539,48540,48543,48545,48548,48550],{"class":427,"line":10911},[425,48541,48542],{"class":701},"variance ",[425,48544,1204],{"class":1155},[425,48546,48547],{"class":701}," sum_squared_diff ",[425,48549,1732],{"class":1155},[425,48551,48305],{"class":701},[425,48553,48554],{"class":427,"line":10919},[425,48555,3400],{"emptyLinePlaceholder":1084},[425,48557,48558,48560,48562,48565],{"class":427,"line":10924},[425,48559,31170],{"class":691},[425,48561,1159],{"class":701},[425,48563,48564],{"class":435},"\"Mean:\"",[425,48566,48567],{"class":701},", mean)\n",[425,48569,48570,48572,48574,48577],{"class":427,"line":17601},[425,48571,31170],{"class":691},[425,48573,1159],{"class":701},[425,48575,48576],{"class":435},"\"Variance:\"",[425,48578,48579],{"class":701},", variance)\n",[416,48581,48583],{"className":31133,"code":48582,"language":31135,"meta":395,"style":395},"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",[422,48584,48585,48591,48597,48607,48613,48623,48637,48647,48657,48667,48671,48681,48691,48695,48699,48707,48712,48717,48736,48740,48745,48750,48755,48760,48801,48806,48816,48821,48834,48839,48844,48849,48854,48859,48863,48868,48873,48895,48899,48931,48945,48955,48965,48969,48979,48993,49003,49013,49023,49029,49033,49037,49041,49045,49049,49057,49077,49081,49085,49089,49093,49109,49113,49117,49125,49129,49133,49141,49145,49149,49153,49161,49165,49169,49173,49181,49185,49193,49197,49205,49209,49217,49221,49229,49233,49237,49245,49249,49253,49265,49289,49303,49307,49311,49315,49323,49327,49335,49339,49347,49351,49359,49363,49371,49375,49383,49387,49399,49403,49411,49415,49423,49427,49431,49435,49439,49447,49451,49467,49471,49479,49483,49487,49491,49495,49499,49503,49507,49523,49527,49539,49543,49555,49559,49571,49575,49583,49587,49595,49599,49603,49607,49613,49617,49625,49629,49645,49649,49657,49661,49677,49689,49693,49705,49709,49713,49721,49725,49729,49737,49741,49749,49753,49761,49765,49769,49811,49853,49857,49861,49877,49881,49897,49901,49905,49913,49917,49921,49933,49971,49975,49979,49987,49991,50005,50015,50021,50027,50033,50039,50043,50047,50053,50057,50061,50069,50073,50091,50095,50099,50103,50119,50123,50127,50131,50135,50139,50159,50179,50183,50187,50191,50199,50207,50211,50227,50247,50267,50271,50276,50285,50294,50299,50304,50309,50322,50327,50336,50345,50362],{"__ignoreMap":395},[425,48586,48587,48589],{"class":427,"line":428},[425,48588,31147],{"class":1155},[425,48590,32577],{"class":701},[425,48592,48593,48595],{"class":427,"line":698},[425,48594,31147],{"class":1155},[425,48596,32584],{"class":701},[425,48598,48599,48601,48603,48605],{"class":427,"line":710},[425,48600,31147],{"class":1155},[425,48602,32595],{"class":701},[425,48604,32138],{"class":1155},[425,48606,32600],{"class":701},[425,48608,48609,48611],{"class":427,"line":721},[425,48610,31147],{"class":1155},[425,48612,31150],{"class":701},[425,48614,48615,48617,48619,48621],{"class":427,"line":735},[425,48616,31492],{"class":1155},[425,48618,32170],{"class":701},[425,48620,31147],{"class":1155},[425,48622,32617],{"class":701},[425,48624,48625,48627,48629,48631,48634],{"class":427,"line":743},[425,48626,31492],{"class":1155},[425,48628,32123],{"class":701},[425,48630,31147],{"class":1155},[425,48632,48633],{"class":701}," ImageFolder ",[425,48635,48636],{"class":1216},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[425,48638,48639,48641,48643,48645],{"class":427,"line":751},[425,48640,31492],{"class":1155},[425,48642,32153],{"class":701},[425,48644,31147],{"class":1155},[425,48646,32158],{"class":701},[425,48648,48649,48651,48653,48655],{"class":427,"line":759},[425,48650,31147],{"class":1155},[425,48652,32170],{"class":701},[425,48654,32138],{"class":1155},[425,48656,32175],{"class":701},[425,48658,48659,48661,48663,48665],{"class":427,"line":770},[425,48660,31147],{"class":1155},[425,48662,32187],{"class":701},[425,48664,32138],{"class":1155},[425,48666,32192],{"class":701},[425,48668,48669],{"class":427,"line":780},[425,48670,32662],{"class":1216},[425,48672,48673,48675,48677,48679],{"class":427,"line":790},[425,48674,31492],{"class":1155},[425,48676,32669],{"class":701},[425,48678,31147],{"class":1155},[425,48680,43786],{"class":701},[425,48682,48683,48685,48687,48689],{"class":427,"line":805},[425,48684,31492],{"class":1155},[425,48686,31495],{"class":701},[425,48688,31147],{"class":1155},[425,48690,31500],{"class":701},[425,48692,48693],{"class":427,"line":818},[425,48694,3400],{"emptyLinePlaceholder":1084},[425,48696,48697],{"class":427,"line":831},[425,48698,32697],{"class":1216},[425,48700,48701,48703,48705],{"class":427,"line":841},[425,48702,32702],{"class":1155},[425,48704,32705],{"class":431},[425,48706,32708],{"class":701},[425,48708,48709],{"class":427,"line":852},[425,48710,48711],{"class":1216},"    # 导入自己的数据集，并进行数据处理\n",[425,48713,48714],{"class":427,"line":862},[425,48715,48716],{"class":1216},"    # 定义数据集的路径\n",[425,48718,48719,48722,48724,48726,48728,48730,48734],{"class":427,"line":878},[425,48720,48721],{"class":691},"    ROOT_PATH",[425,48723,1204],{"class":1155},[425,48725,1818],{"class":1155},[425,48727,1400],{"class":435},[425,48729,1706],{"class":691},[425,48731,48733],{"class":48732},"sA_wV","\u002Fdata\u002Ftrain",[425,48735,26124],{"class":435},[425,48737,48738],{"class":427,"line":914},[425,48739,3400],{"emptyLinePlaceholder":1084},[425,48741,48742],{"class":427,"line":943},[425,48743,48744],{"class":1216},"    # 定义归一化方法\n",[425,48746,48747],{"class":427,"line":956},[425,48748,48749],{"class":1216},"    # 这里需要先计算一下数据集的均值和方差\n",[425,48751,48752],{"class":427,"line":964},[425,48753,48754],{"class":1216},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[425,48756,48757],{"class":427,"line":2733},[425,48758,48759],{"class":1216},"    # 第一个参数是均值，第二个参数是方差\n",[425,48761,48762,48765,48767,48770,48773,48775,48778,48780,48783,48786,48789,48791,48794,48796,48799],{"class":427,"line":2750},[425,48763,48764],{"class":701},"    normalize",[425,48766,1204],{"class":1155},[425,48768,48769],{"class":701},"transforms.Normalize([",[425,48771,48772],{"class":691},"0.162",[425,48774,1527],{"class":701},[425,48776,48777],{"class":691},"0.151",[425,48779,1527],{"class":701},[425,48781,48782],{"class":691},"0.138",[425,48784,48785],{"class":701},"],[",[425,48787,48788],{"class":691},"0.058",[425,48790,1527],{"class":701},[425,48792,48793],{"class":691},"0.052",[425,48795,1527],{"class":701},[425,48797,48798],{"class":691},"0.048",[425,48800,5657],{"class":701},[425,48802,48803],{"class":427,"line":2755},[425,48804,48805],{"class":1216},"    # 定义数据集处理方法变量\n",[425,48807,48808,48811,48813],{"class":427,"line":2760},[425,48809,48810],{"class":701},"    train_transform",[425,48812,1204],{"class":1155},[425,48814,48815],{"class":701},"transforms.Compose([\n",[425,48817,48818],{"class":427,"line":2765},[425,48819,48820],{"class":1216},"        # 调整图像大小为224*224\n",[425,48822,48823,48826,48828,48830,48832],{"class":427,"line":2779},[425,48824,48825],{"class":701},"        transforms.Resize((",[425,48827,32256],{"class":691},[425,48829,1527],{"class":701},[425,48831,32256],{"class":691},[425,48833,43377],{"class":701},[425,48835,48836],{"class":427,"line":2784},[425,48837,48838],{"class":1216},"        # 将图像转换为张量\n",[425,48840,48841],{"class":427,"line":3577},[425,48842,48843],{"class":701},"        transforms.ToTensor(),\n",[425,48845,48846],{"class":427,"line":3591},[425,48847,48848],{"class":701},"        normalize])\n",[425,48850,48851],{"class":427,"line":3599},[425,48852,48853],{"class":1216},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[425,48855,48856],{"class":427,"line":3604},[425,48857,48858],{"class":1216},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[425,48860,48861],{"class":427,"line":3610},[425,48862,3400],{"emptyLinePlaceholder":1084},[425,48864,48865],{"class":427,"line":3616},[425,48866,48867],{"class":1216},"    # 加载数据集\n",[425,48869,48870],{"class":427,"line":3621},[425,48871,48872],{"class":1216},"    # 传入数据集路径与处理方法\n",[425,48874,48875,48877,48879,48882,48885,48887,48890,48892],{"class":427,"line":8948},[425,48876,32713],{"class":701},[425,48878,1204],{"class":1155},[425,48880,48881],{"class":701},"ImageFolder(",[425,48883,48884],{"class":691},"ROOT_PATH",[425,48886,1527],{"class":701},[425,48888,48889],{"class":6216},"transform",[425,48891,1204],{"class":1155},[425,48893,48894],{"class":701},"train_transform)\n",[425,48896,48897],{"class":427,"line":8972},[425,48898,3400],{"emptyLinePlaceholder":1084},[425,48900,48901,48903,48905,48907,48909,48911,48913,48915,48917,48919,48921,48923,48925,48927,48929],{"class":427,"line":8977},[425,48902,32765],{"class":701},[425,48904,1204],{"class":1155},[425,48906,32770],{"class":701},[425,48908,32773],{"class":691},[425,48910,1159],{"class":701},[425,48912,32778],{"class":691},[425,48914,1603],{"class":1155},[425,48916,8358],{"class":691},[425,48918,32785],{"class":701},[425,48920,32773],{"class":691},[425,48922,1159],{"class":701},[425,48924,32792],{"class":691},[425,48926,1603],{"class":1155},[425,48928,8358],{"class":691},[425,48930,32799],{"class":701},[425,48932,48933,48935,48937,48939,48941,48943],{"class":427,"line":8983},[425,48934,32804],{"class":701},[425,48936,1204],{"class":1155},[425,48938,32809],{"class":701},[425,48940,32292],{"class":6216},[425,48942,1204],{"class":1155},[425,48944,32297],{"class":701},[425,48946,48947,48949,48951,48953],{"class":427,"line":9010},[425,48948,32820],{"class":6216},[425,48950,1204],{"class":1155},[425,48952,1347],{"class":691},[425,48954,32221],{"class":701},[425,48956,48957,48959,48961,48963],{"class":427,"line":9015},[425,48958,32832],{"class":6216},[425,48960,1204],{"class":1155},[425,48962,32231],{"class":691},[425,48964,32221],{"class":701},[425,48966,48967],{"class":427,"line":9021},[425,48968,32843],{"class":1216},[425,48970,48971,48973,48975,48977],{"class":427,"line":9033},[425,48972,32848],{"class":6216},[425,48974,1204],{"class":1155},[425,48976,1544],{"class":691},[425,48978,1165],{"class":701},[425,48980,48981,48983,48985,48987,48989,48991],{"class":427,"line":9045},[425,48982,32859],{"class":701},[425,48984,1204],{"class":1155},[425,48986,32289],{"class":701},[425,48988,32292],{"class":6216},[425,48990,1204],{"class":1155},[425,48992,32870],{"class":701},[425,48994,48995,48997,48999,49001],{"class":427,"line":9057},[425,48996,32875],{"class":6216},[425,48998,1204],{"class":1155},[425,49000,1347],{"class":691},[425,49002,32221],{"class":701},[425,49004,49005,49007,49009,49011],{"class":427,"line":10715},[425,49006,32886],{"class":6216},[425,49008,1204],{"class":1155},[425,49010,32231],{"class":691},[425,49012,32221],{"class":701},[425,49014,49015,49017,49019,49021],{"class":427,"line":10740},[425,49016,32897],{"class":6216},[425,49018,1204],{"class":1155},[425,49020,1544],{"class":691},[425,49022,1165],{"class":701},[425,49024,49025,49027],{"class":427,"line":10763},[425,49026,5090],{"class":1155},[425,49028,32910],{"class":701},[425,49030,49031],{"class":427,"line":10787},[425,49032,3400],{"emptyLinePlaceholder":1084},[425,49034,49035],{"class":427,"line":10792},[425,49036,32919],{"class":1216},[425,49038,49039],{"class":427,"line":10797},[425,49040,32924],{"class":1216},[425,49042,49043],{"class":427,"line":10802},[425,49044,3400],{"emptyLinePlaceholder":1084},[425,49046,49047],{"class":427,"line":10811},[425,49048,32933],{"class":1216},[425,49050,49051,49053,49055],{"class":427,"line":10816},[425,49052,32702],{"class":1155},[425,49054,32940],{"class":431},[425,49056,32943],{"class":701},[425,49058,49059,49061,49063,49065,49067,49069,49071,49073,49075],{"class":427,"line":10822},[425,49060,31992],{"class":701},[425,49062,1204],{"class":1155},[425,49064,31206],{"class":701},[425,49066,31999],{"class":435},[425,49068,2706],{"class":1155},[425,49070,32004],{"class":701},[425,49072,2703],{"class":1155},[425,49074,32962],{"class":435},[425,49076,1165],{"class":701},[425,49078,49079],{"class":427,"line":10843},[425,49080,3400],{"emptyLinePlaceholder":1084},[425,49082,49083],{"class":427,"line":10849},[425,49084,32977],{"class":1216},[425,49086,49087],{"class":427,"line":10863},[425,49088,32982],{"class":1216},[425,49090,49091],{"class":427,"line":10869},[425,49092,32987],{"class":1216},[425,49094,49095,49097,49099,49101,49103,49105,49107],{"class":427,"line":10896},[425,49096,32992],{"class":701},[425,49098,1204],{"class":1155},[425,49100,32997],{"class":701},[425,49102,33000],{"class":6216},[425,49104,1204],{"class":1155},[425,49106,33005],{"class":691},[425,49108,1165],{"class":701},[425,49110,49111],{"class":427,"line":10905},[425,49112,3400],{"emptyLinePlaceholder":1084},[425,49114,49115],{"class":427,"line":10911},[425,49116,33016],{"class":1216},[425,49118,49119,49121,49123],{"class":427,"line":10919},[425,49120,33021],{"class":701},[425,49122,1204],{"class":1155},[425,49124,33026],{"class":701},[425,49126,49127],{"class":427,"line":10924},[425,49128,3400],{"emptyLinePlaceholder":1084},[425,49130,49131],{"class":427,"line":17601},[425,49132,33035],{"class":1216},[425,49134,49135,49137,49139],{"class":427,"line":17607},[425,49136,32044],{"class":701},[425,49138,1204],{"class":1155},[425,49140,33044],{"class":701},[425,49142,49143],{"class":427,"line":17630},[425,49144,33049],{"class":1216},[425,49146,49147],{"class":427,"line":17636},[425,49148,33054],{"class":1216},[425,49150,49151],{"class":427,"line":17659},[425,49152,33059],{"class":1216},[425,49154,49155,49157,49159],{"class":427,"line":17673},[425,49156,33064],{"class":701},[425,49158,1204],{"class":1155},[425,49160,33069],{"class":701},[425,49162,49163],{"class":427,"line":17693},[425,49164,3400],{"emptyLinePlaceholder":1084},[425,49166,49167],{"class":427,"line":17699},[425,49168,33082],{"class":1216},[425,49170,49171],{"class":427,"line":17710},[425,49172,33087],{"class":1216},[425,49174,49175,49177,49179],{"class":427,"line":17733},[425,49176,33092],{"class":701},[425,49178,1204],{"class":1155},[425,49180,33097],{"class":691},[425,49182,49183],{"class":427,"line":17755},[425,49184,33102],{"class":1216},[425,49186,49187,49189,49191],{"class":427,"line":17760},[425,49188,33107],{"class":701},[425,49190,1204],{"class":1155},[425,49192,33112],{"class":701},[425,49194,49195],{"class":427,"line":17766},[425,49196,33117],{"class":1216},[425,49198,49199,49201,49203],{"class":427,"line":17780},[425,49200,33122],{"class":701},[425,49202,1204],{"class":1155},[425,49204,33112],{"class":701},[425,49206,49207],{"class":427,"line":17793},[425,49208,33131],{"class":1216},[425,49210,49211,49213,49215],{"class":427,"line":17798},[425,49212,33136],{"class":701},[425,49214,1204],{"class":1155},[425,49216,33112],{"class":701},[425,49218,49219],{"class":427,"line":17812},[425,49220,33145],{"class":1216},[425,49222,49223,49225,49227],{"class":427,"line":17817},[425,49224,33150],{"class":701},[425,49226,1204],{"class":1155},[425,49228,33112],{"class":701},[425,49230,49231],{"class":427,"line":17823},[425,49232,3400],{"emptyLinePlaceholder":1084},[425,49234,49235],{"class":427,"line":17828},[425,49236,33163],{"class":1216},[425,49238,49239,49241,49243],{"class":427,"line":17842},[425,49240,33168],{"class":701},[425,49242,1204],{"class":1155},[425,49244,33173],{"class":701},[425,49246,49247],{"class":427,"line":17847},[425,49248,3400],{"emptyLinePlaceholder":1084},[425,49250,49251],{"class":427,"line":17852},[425,49252,33186],{"class":1216},[425,49254,49255,49257,49259,49261,49263],{"class":427,"line":17866},[425,49256,4201],{"class":1155},[425,49258,33193],{"class":701},[425,49260,27034],{"class":1155},[425,49262,33198],{"class":691},[425,49264,33201],{"class":701},[425,49266,49267,49269,49271,49273,49275,49277,49279,49281,49283,49285,49287],{"class":427,"line":17878},[425,49268,33206],{"class":691},[425,49270,1159],{"class":701},[425,49272,33211],{"class":435},[425,49274,33214],{"class":691},[425,49276,1732],{"class":435},[425,49278,33214],{"class":691},[425,49280,1400],{"class":435},[425,49282,33223],{"class":701},[425,49284,1680],{"class":1155},[425,49286,1367],{"class":691},[425,49288,31252],{"class":701},[425,49290,49291,49293,49295,49297,49299,49301],{"class":427,"line":17883},[425,49292,33206],{"class":691},[425,49294,1159],{"class":701},[425,49296,33238],{"class":435},[425,49298,1603],{"class":1155},[425,49300,1594],{"class":691},[425,49302,1165],{"class":701},[425,49304,49305],{"class":427,"line":17896},[425,49306,3400],{"emptyLinePlaceholder":1084},[425,49308,49309],{"class":427,"line":17901},[425,49310,33253],{"class":1216},[425,49312,49313],{"class":427,"line":17906},[425,49314,33258],{"class":1216},[425,49316,49317,49319,49321],{"class":427,"line":17911},[425,49318,33263],{"class":701},[425,49320,1204],{"class":1155},[425,49322,33097],{"class":691},[425,49324,49325],{"class":427,"line":17924},[425,49326,33272],{"class":1216},[425,49328,49329,49331,49333],{"class":427,"line":17929},[425,49330,33277],{"class":701},[425,49332,1204],{"class":1155},[425,49334,4085],{"class":691},[425,49336,49337],{"class":427,"line":33388},[425,49338,33286],{"class":1216},[425,49340,49341,49343,49345],{"class":427,"line":33394},[425,49342,33291],{"class":701},[425,49344,1204],{"class":1155},[425,49346,33097],{"class":691},[425,49348,49349],{"class":427,"line":33400},[425,49350,33300],{"class":1216},[425,49352,49353,49355,49357],{"class":427,"line":33406},[425,49354,33305],{"class":701},[425,49356,1204],{"class":1155},[425,49358,4085],{"class":691},[425,49360,49361],{"class":427,"line":33412},[425,49362,33314],{"class":1216},[425,49364,49365,49367,49369],{"class":427,"line":33423},[425,49366,33319],{"class":701},[425,49368,1204],{"class":1155},[425,49370,4085],{"class":691},[425,49372,49373],{"class":427,"line":33429},[425,49374,33328],{"class":1216},[425,49376,49377,49379,49381],{"class":427,"line":33449},[425,49378,33333],{"class":701},[425,49380,1204],{"class":1155},[425,49382,4085],{"class":691},[425,49384,49385],{"class":427,"line":33455},[425,49386,33342],{"class":1216},[425,49388,49389,49391,49393,49395,49397],{"class":427,"line":33466},[425,49390,4403],{"class":1155},[425,49392,32356],{"class":701},[425,49394,27034],{"class":1155},[425,49396,32361],{"class":691},[425,49398,33355],{"class":701},[425,49400,49401],{"class":427,"line":33472},[425,49402,33360],{"class":1216},[425,49404,49405,49407,49409],{"class":427,"line":33478},[425,49406,33365],{"class":701},[425,49408,1204],{"class":1155},[425,49410,33370],{"class":701},[425,49412,49413],{"class":427,"line":33484},[425,49414,33375],{"class":1216},[425,49416,49417,49419,49421],{"class":427,"line":33490},[425,49418,33380],{"class":701},[425,49420,1204],{"class":1155},[425,49422,33385],{"class":701},[425,49424,49425],{"class":427,"line":33496},[425,49426,33391],{"class":1216},[425,49428,49429],{"class":427,"line":33502},[425,49430,33397],{"class":701},[425,49432,49433],{"class":427,"line":33508},[425,49434,33403],{"class":1216},[425,49436,49437],{"class":427,"line":33528},[425,49438,33409],{"class":1216},[425,49440,49441,49443,49445],{"class":427,"line":33534},[425,49442,33415],{"class":701},[425,49444,1204],{"class":1155},[425,49446,33420],{"class":701},[425,49448,49449],{"class":427,"line":33550},[425,49450,33426],{"class":1216},[425,49452,49453,49455,49457,49459,49461,49463,49465],{"class":427,"line":33556},[425,49454,33432],{"class":701},[425,49456,1204],{"class":1155},[425,49458,33437],{"class":701},[425,49460,33440],{"class":6216},[425,49462,1204],{"class":1155},[425,49464,1367],{"class":691},[425,49466,1165],{"class":701},[425,49468,49469],{"class":427,"line":33570},[425,49470,33452],{"class":1216},[425,49472,49473,49475,49477],{"class":427,"line":33576},[425,49474,33458],{"class":701},[425,49476,1204],{"class":1155},[425,49478,33463],{"class":701},[425,49480,49481],{"class":427,"line":33591},[425,49482,33469],{"class":1216},[425,49484,49485],{"class":427,"line":33597},[425,49486,33475],{"class":701},[425,49488,49489],{"class":427,"line":33606},[425,49490,33481],{"class":1216},[425,49492,49493],{"class":427,"line":33612},[425,49494,33487],{"class":701},[425,49496,49497],{"class":427,"line":33621},[425,49498,33493],{"class":1216},[425,49500,49501],{"class":427,"line":33627},[425,49502,33499],{"class":701},[425,49504,49505],{"class":427,"line":33633},[425,49506,33505],{"class":1216},[425,49508,49509,49511,49513,49515,49517,49519,49521],{"class":427,"line":33642},[425,49510,33511],{"class":701},[425,49512,10476],{"class":1155},[425,49514,33516],{"class":701},[425,49516,1603],{"class":1155},[425,49518,33521],{"class":701},[425,49520,1341],{"class":691},[425,49522,1165],{"class":701},[425,49524,49525],{"class":427,"line":33648},[425,49526,33531],{"class":1216},[425,49528,49529,49531,49533,49535,49537],{"class":427,"line":33659},[425,49530,33537],{"class":701},[425,49532,10476],{"class":1155},[425,49534,33542],{"class":701},[425,49536,3949],{"class":1155},[425,49538,33547],{"class":701},[425,49540,49541],{"class":427,"line":33665},[425,49542,33553],{"class":1216},[425,49544,49545,49547,49549,49551,49553],{"class":427,"line":33684},[425,49546,33559],{"class":701},[425,49548,10476],{"class":1155},[425,49550,33521],{"class":701},[425,49552,1341],{"class":691},[425,49554,1165],{"class":701},[425,49556,49557],{"class":427,"line":33690},[425,49558,33573],{"class":1216},[425,49560,49561,49563,49565,49567,49569],{"class":427,"line":33701},[425,49562,4403],{"class":1155},[425,49564,33581],{"class":701},[425,49566,27034],{"class":1155},[425,49568,32361],{"class":691},[425,49570,33588],{"class":701},[425,49572,49573],{"class":427,"line":33707},[425,49574,33594],{"class":1216},[425,49576,49577,49579,49581],{"class":427,"line":33727},[425,49578,33365],{"class":701},[425,49580,1204],{"class":1155},[425,49582,33370],{"class":701},[425,49584,49585],{"class":427,"line":33743},[425,49586,33609],{"class":1216},[425,49588,49589,49591,49593],{"class":427,"line":33749},[425,49590,33380],{"class":701},[425,49592,1204],{"class":1155},[425,49594,33385],{"class":701},[425,49596,49597],{"class":427,"line":33763},[425,49598,33624],{"class":1216},[425,49600,49601],{"class":427,"line":33769},[425,49602,33630],{"class":701},[425,49604,49605],{"class":427,"line":33775},[425,49606,37111],{"class":1216},[425,49608,49609,49611],{"class":427,"line":33786},[425,49610,33636],{"class":1155},[425,49612,33639],{"class":701},[425,49614,49615],{"class":427,"line":33792},[425,49616,33645],{"class":1216},[425,49618,49619,49621,49623],{"class":427,"line":33798},[425,49620,37126],{"class":701},[425,49622,1204],{"class":1155},[425,49624,33420],{"class":701},[425,49626,49627],{"class":427,"line":33808},[425,49628,33662],{"class":1216},[425,49630,49631,49633,49635,49637,49639,49641,49643],{"class":427,"line":33814},[425,49632,37139],{"class":701},[425,49634,1204],{"class":1155},[425,49636,33437],{"class":701},[425,49638,33440],{"class":6216},[425,49640,1204],{"class":1155},[425,49642,1367],{"class":691},[425,49644,1165],{"class":701},[425,49646,49647],{"class":427,"line":33825},[425,49648,33687],{"class":1216},[425,49650,49651,49653,49655],{"class":427,"line":33831},[425,49652,37160],{"class":701},[425,49654,1204],{"class":1155},[425,49656,33463],{"class":701},[425,49658,49659],{"class":427,"line":33841},[425,49660,33704],{"class":1216},[425,49662,49663,49665,49667,49669,49671,49673,49675],{"class":427,"line":33846},[425,49664,37173],{"class":701},[425,49666,10476],{"class":1155},[425,49668,37178],{"class":701},[425,49670,1603],{"class":1155},[425,49672,33521],{"class":701},[425,49674,1341],{"class":691},[425,49676,1165],{"class":701},[425,49678,49679,49681,49683,49685,49687],{"class":427,"line":33852},[425,49680,37191],{"class":701},[425,49682,10476],{"class":1155},[425,49684,33542],{"class":701},[425,49686,3949],{"class":1155},[425,49688,33547],{"class":701},[425,49690,49691],{"class":427,"line":33901},[425,49692,37204],{"class":1216},[425,49694,49695,49697,49699,49701,49703],{"class":427,"line":33948},[425,49696,37209],{"class":701},[425,49698,10476],{"class":1155},[425,49700,33521],{"class":701},[425,49702,1341],{"class":691},[425,49704,1165],{"class":701},[425,49706,49707],{"class":427,"line":33953},[425,49708,33766],{"class":1216},[425,49710,49711],{"class":427,"line":33959},[425,49712,33772],{"class":1216},[425,49714,49715,49717,49719],{"class":427,"line":33978},[425,49716,33778],{"class":701},[425,49718,1732],{"class":1155},[425,49720,33783],{"class":701},[425,49722,49723],{"class":427,"line":33984},[425,49724,33789],{"class":1216},[425,49726,49727],{"class":427,"line":34004},[425,49728,33795],{"class":1216},[425,49730,49731,49733,49735],{"class":427,"line":34010},[425,49732,33801],{"class":701},[425,49734,1732],{"class":1155},[425,49736,33783],{"class":701},[425,49738,49739],{"class":427,"line":34016},[425,49740,33811],{"class":1216},[425,49742,49743,49745,49747],{"class":427,"line":34026},[425,49744,33817],{"class":701},[425,49746,1732],{"class":1155},[425,49748,33822],{"class":701},[425,49750,49751],{"class":427,"line":34031},[425,49752,33828],{"class":1216},[425,49754,49755,49757,49759],{"class":427,"line":34037},[425,49756,33834],{"class":701},[425,49758,1732],{"class":1155},[425,49760,33822],{"class":701},[425,49762,49763],{"class":427,"line":34053},[425,49764,3400],{"emptyLinePlaceholder":1084},[425,49766,49767],{"class":427,"line":34098},[425,49768,33849],{"class":1216},[425,49770,49771,49773,49775,49777,49779,49781,49783,49785,49787,49789,49791,49793,49795,49797,49799,49801,49803,49805,49807,49809],{"class":427,"line":34104},[425,49772,33206],{"class":691},[425,49774,1159],{"class":701},[425,49776,4592],{"class":435},[425,49778,33214],{"class":691},[425,49780,33863],{"class":435},[425,49782,2043],{"class":691},[425,49784,33868],{"class":1155},[425,49786,2093],{"class":691},[425,49788,33873],{"class":435},[425,49790,2043],{"class":691},[425,49792,33868],{"class":1155},[425,49794,2093],{"class":691},[425,49796,4592],{"class":435},[425,49798,33884],{"class":701},[425,49800,1680],{"class":1155},[425,49802,1367],{"class":691},[425,49804,33891],{"class":701},[425,49806,1680],{"class":1155},[425,49808,1367],{"class":691},[425,49810,33898],{"class":701},[425,49812,49813,49815,49817,49819,49821,49823,49825,49827,49829,49831,49833,49835,49837,49839,49841,49843,49845,49847,49849,49851],{"class":427,"line":34110},[425,49814,33206],{"class":691},[425,49816,1159],{"class":701},[425,49818,4592],{"class":435},[425,49820,33214],{"class":691},[425,49822,33912],{"class":435},[425,49824,2043],{"class":691},[425,49826,33868],{"class":1155},[425,49828,2093],{"class":691},[425,49830,33921],{"class":435},[425,49832,2043],{"class":691},[425,49834,33868],{"class":1155},[425,49836,2093],{"class":691},[425,49838,4592],{"class":435},[425,49840,33932],{"class":701},[425,49842,1680],{"class":1155},[425,49844,1367],{"class":691},[425,49846,33939],{"class":701},[425,49848,1680],{"class":1155},[425,49850,1367],{"class":691},[425,49852,33898],{"class":701},[425,49854,49855],{"class":427,"line":34116},[425,49856,3400],{"emptyLinePlaceholder":1084},[425,49858,49859],{"class":427,"line":34127},[425,49860,33956],{"class":1216},[425,49862,49863,49865,49867,49869,49871,49873,49875],{"class":427,"line":34133},[425,49864,3497],{"class":1155},[425,49866,33964],{"class":701},[425,49868,1680],{"class":1155},[425,49870,1367],{"class":691},[425,49872,2087],{"class":701},[425,49874,2107],{"class":1155},[425,49876,33975],{"class":701},[425,49878,49879],{"class":427,"line":34139},[425,49880,33981],{"class":1216},[425,49882,49883,49885,49887,49889,49891,49893,49895],{"class":427,"line":34145},[425,49884,33987],{"class":701},[425,49886,1198],{"class":691},[425,49888,1204],{"class":1155},[425,49890,33994],{"class":701},[425,49892,1680],{"class":1155},[425,49894,1367],{"class":691},[425,49896,34001],{"class":701},[425,49898,49899],{"class":427,"line":34163},[425,49900,34007],{"class":1216},[425,49902,49903],{"class":427,"line":34177},[425,49904,34013],{"class":1216},[425,49906,49907,49909,49911],{"class":427,"line":34186},[425,49908,34019],{"class":701},[425,49910,1204],{"class":1155},[425,49912,33069],{"class":701},[425,49914,49915],{"class":427,"line":34195},[425,49916,3400],{"emptyLinePlaceholder":1084},[425,49918,49919],{"class":427,"line":34204},[425,49920,34034],{"class":1216},[425,49922,49923,49925,49927,49929,49931],{"class":427,"line":34213},[425,49924,34040],{"class":701},[425,49926,1204],{"class":1155},[425,49928,34045],{"class":701},[425,49930,1680],{"class":1155},[425,49932,34050],{"class":701},[425,49934,49935,49937,49939,49941,49943,49945,49947,49949,49951,49953,49955,49957,49959,49961,49963,49965,49967,49969],{"class":427,"line":34219},[425,49936,33206],{"class":691},[425,49938,1159],{"class":701},[425,49940,34060],{"class":435},[425,49942,2043],{"class":691},[425,49944,34065],{"class":1155},[425,49946,2093],{"class":691},[425,49948,1692],{"class":435},[425,49950,2043],{"class":691},[425,49952,34065],{"class":1155},[425,49954,2093],{"class":691},[425,49956,34078],{"class":435},[425,49958,34081],{"class":701},[425,49960,34084],{"class":1155},[425,49962,2054],{"class":691},[425,49964,34089],{"class":701},[425,49966,1477],{"class":1155},[425,49968,2054],{"class":691},[425,49970,31252],{"class":701},[425,49972,49973],{"class":427,"line":34225},[425,49974,37488],{"class":1216},[425,49976,49977],{"class":427,"line":34233},[425,49978,37493],{"class":1216},[425,49980,49981,49983,49985],{"class":427,"line":34238},[425,49982,37498],{"class":701},[425,49984,34122],{"class":435},[425,49986,1165],{"class":701},[425,49988,49989],{"class":427,"line":34244},[425,49990,34142],{"class":1216},[425,49992,49993,49995,49997,49999,50001,50003],{"class":427,"line":34255},[425,49994,34148],{"class":701},[425,49996,1204],{"class":1155},[425,49998,34153],{"class":701},[425,50000,34156],{"class":6216},[425,50002,1204],{"class":1155},[425,50004,2559],{"class":701},[425,50006,50007,50009,50011,50013],{"class":427,"line":34261},[425,50008,34166],{"class":435},[425,50010,948],{"class":701},[425,50012,34171],{"class":691},[425,50014,34174],{"class":701},[425,50016,50017,50019],{"class":427,"line":34281},[425,50018,34180],{"class":435},[425,50020,34183],{"class":701},[425,50022,50023,50025],{"class":427,"line":34287},[425,50024,34189],{"class":435},[425,50026,34192],{"class":701},[425,50028,50029,50031],{"class":427,"line":34293},[425,50030,34198],{"class":435},[425,50032,34201],{"class":701},[425,50034,50035,50037],{"class":427,"line":34299},[425,50036,34207],{"class":435},[425,50038,34210],{"class":701},[425,50040,50041],{"class":427,"line":34316},[425,50042,34216],{"class":701},[425,50044,50045],{"class":427,"line":34322},[425,50046,34222],{"class":1216},[425,50048,50049,50051],{"class":427,"line":34328},[425,50050,5090],{"class":1155},[425,50052,34230],{"class":701},[425,50054,50055],{"class":427,"line":34334},[425,50056,3400],{"emptyLinePlaceholder":1084},[425,50058,50059],{"class":427,"line":34340},[425,50060,34241],{"class":1216},[425,50062,50063,50065,50067],{"class":427,"line":34346},[425,50064,32702],{"class":1155},[425,50066,34249],{"class":431},[425,50068,34252],{"class":701},[425,50070,50071],{"class":427,"line":34373},[425,50072,34258],{"class":1216},[425,50074,50075,50077,50079,50081,50083,50085,50087,50089],{"class":427,"line":34397},[425,50076,34264],{"class":701},[425,50078,32448],{"class":6216},[425,50080,1204],{"class":1155},[425,50082,1159],{"class":701},[425,50084,1646],{"class":691},[425,50086,1527],{"class":701},[425,50088,1442],{"class":691},[425,50090,31252],{"class":701},[425,50092,50093],{"class":427,"line":34403},[425,50094,34284],{"class":1216},[425,50096,50097],{"class":427,"line":34409},[425,50098,34290],{"class":1216},[425,50100,50101],{"class":427,"line":34415},[425,50102,34296],{"class":1216},[425,50104,50105,50107,50109,50111,50113,50115,50117],{"class":427,"line":34426},[425,50106,32482],{"class":701},[425,50108,1367],{"class":691},[425,50110,1527],{"class":701},[425,50112,1235],{"class":691},[425,50114,1527],{"class":701},[425,50116,1367],{"class":691},[425,50118,1165],{"class":701},[425,50120,50121],{"class":427,"line":34437},[425,50122,34319],{"class":1216},[425,50124,50125],{"class":427,"line":34443},[425,50126,34325],{"class":1216},[425,50128,50129],{"class":427,"line":34460},[425,50130,34331],{"class":1216},[425,50132,50133],{"class":427,"line":34483},[425,50134,34337],{"class":1216},[425,50136,50137],{"class":427,"line":34506},[425,50138,34343],{"class":1216},[425,50140,50141,50143,50145,50147,50149,50151,50153,50155,50157],{"class":427,"line":34512},[425,50142,34349],{"class":701},[425,50144,34352],{"class":435},[425,50146,34355],{"class":701},[425,50148,34358],{"class":435},[425,50150,1527],{"class":701},[425,50152,34363],{"class":6216},[425,50154,1204],{"class":1155},[425,50156,34368],{"class":435},[425,50158,1165],{"class":701},[425,50160,50161,50163,50165,50167,50169,50171,50173,50175,50177],{"class":427,"line":34517},[425,50162,34349],{"class":701},[425,50164,34352],{"class":435},[425,50166,34380],{"class":701},[425,50168,34383],{"class":435},[425,50170,1527],{"class":701},[425,50172,34363],{"class":6216},[425,50174,1204],{"class":1155},[425,50176,34392],{"class":435},[425,50178,1165],{"class":701},[425,50180,50181],{"class":427,"line":34526},[425,50182,34400],{"class":1216},[425,50184,50185],{"class":427,"line":34536},[425,50186,34406],{"class":701},[425,50188,50189],{"class":427,"line":34542},[425,50190,34412],{"class":1216},[425,50192,50193,50195,50197],{"class":427,"line":34547},[425,50194,34418],{"class":701},[425,50196,34421],{"class":435},[425,50198,1165],{"class":701},[425,50200,50201,50203,50205],{"class":427,"line":34553},[425,50202,34429],{"class":701},[425,50204,34432],{"class":435},[425,50206,1165],{"class":701},[425,50208,50209],{"class":427,"line":34566},[425,50210,34440],{"class":1216},[425,50212,50213,50215,50217,50219,50221,50223,50225],{"class":427,"line":34572},[425,50214,32482],{"class":701},[425,50216,1367],{"class":691},[425,50218,1527],{"class":701},[425,50220,1235],{"class":691},[425,50222,1527],{"class":701},[425,50224,1235],{"class":691},[425,50226,1165],{"class":701},[425,50228,50229,50231,50233,50235,50237,50239,50241,50243,50245],{"class":427,"line":34583},[425,50230,34349],{"class":701},[425,50232,34352],{"class":435},[425,50234,34467],{"class":701},[425,50236,34358],{"class":435},[425,50238,1527],{"class":701},[425,50240,34363],{"class":6216},[425,50242,1204],{"class":1155},[425,50244,34478],{"class":435},[425,50246,1165],{"class":701},[425,50248,50249,50251,50253,50255,50257,50259,50261,50263,50265],{"class":427,"line":34594},[425,50250,34349],{"class":701},[425,50252,34352],{"class":435},[425,50254,34490],{"class":701},[425,50256,34383],{"class":435},[425,50258,1527],{"class":701},[425,50260,34363],{"class":6216},[425,50262,1204],{"class":1155},[425,50264,34501],{"class":435},[425,50266,1165],{"class":701},[425,50268,50269],{"class":427,"line":34613},[425,50270,34509],{"class":1216},[425,50272,50274],{"class":427,"line":50273},219,[425,50275,34406],{"class":701},[425,50277,50279,50281,50283],{"class":427,"line":50278},220,[425,50280,34418],{"class":701},[425,50282,34352],{"class":435},[425,50284,1165],{"class":701},[425,50286,50288,50290,50292],{"class":427,"line":50287},221,[425,50289,34429],{"class":701},[425,50291,34531],{"class":435},[425,50293,1165],{"class":701},[425,50295,50297],{"class":427,"line":50296},222,[425,50298,34539],{"class":701},[425,50300,50302],{"class":427,"line":50301},223,[425,50303,3400],{"emptyLinePlaceholder":1084},[425,50305,50307],{"class":427,"line":50306},224,[425,50308,34550],{"class":1216},[425,50310,50312,50314,50316,50318,50320],{"class":427,"line":50311},225,[425,50313,2544],{"class":1155},[425,50315,31975],{"class":691},[425,50317,3949],{"class":1155},[425,50319,31980],{"class":435},[425,50321,4739],{"class":701},[425,50323,50325],{"class":427,"line":50324},226,[425,50326,34569],{"class":1216},[425,50328,50330,50332,50334],{"class":427,"line":50329},227,[425,50331,45301],{"class":701},[425,50333,1204],{"class":1155},[425,50335,45306],{"class":701},[425,50337,50339,50341,50343],{"class":427,"line":50338},228,[425,50340,34586],{"class":701},[425,50342,1204],{"class":1155},[425,50344,34591],{"class":701},[425,50346,50348,50350,50352,50354,50356,50358,50360],{"class":427,"line":50347},229,[425,50349,34148],{"class":701},[425,50351,1204],{"class":1155},[425,50353,45323],{"class":701},[425,50355,34604],{"class":6216},[425,50357,1204],{"class":1155},[425,50359,2054],{"class":691},[425,50361,1165],{"class":701},[425,50363,50365],{"class":427,"line":50364},230,[425,50366,34616],{"class":701},[22995,50368,50370],{"id":50369},"_242测试代码","2.4.2.测试代码",[19,50372,50373],{},"使用测试集进行测试与推理",[416,50375,50377],{"className":31133,"code":50376,"language":31135,"meta":395,"style":395},"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",[422,50378,50379,50385,50395,50405,50416,50426,50430,50434,50442,50447,50451,50468,50472,50476,50480,50484,50488,50520,50524,50532,50536,50548,50552,50556,50560,50564,50568,50572,50576,50580,50598,50612,50616,50626,50636,50646,50652,50656,50660,50668,50672,50688,50696,50700,50704,50712,50720,50724,50728,50732,50736,50742,50746,50756,50764,50772,50776,50780,50784,50792,50796,50812,50816,50820,50824,50836,50840,50852,50856,50860,50872,50876,50886,50890,50894,50906,50910,50918,50922,50926,50934,50938,50946,50950,50954,50958,50962,50966,50982,50990,50994,50998,51016,51022,51026,51036,51044,51052,51056,51060,51064,51068,51076,51080,51096,51100,51108,51116],{"__ignoreMap":395},[425,50380,50381,50383],{"class":427,"line":428},[425,50382,31147],{"class":1155},[425,50384,31150],{"class":701},[425,50386,50387,50389,50391,50393],{"class":427,"line":698},[425,50388,31147],{"class":1155},[425,50390,32170],{"class":701},[425,50392,32138],{"class":1155},[425,50394,32175],{"class":701},[425,50396,50397,50399,50401,50403],{"class":427,"line":710},[425,50398,31492],{"class":1155},[425,50400,32153],{"class":701},[425,50402,31147],{"class":1155},[425,50404,32158],{"class":701},[425,50406,50407,50409,50411,50413],{"class":427,"line":721},[425,50408,31492],{"class":1155},[425,50410,32123],{"class":701},[425,50412,31147],{"class":1155},[425,50414,50415],{"class":701}," ImageFolder\n",[425,50417,50418,50420,50422,50424],{"class":427,"line":735},[425,50419,31492],{"class":1155},[425,50421,32669],{"class":701},[425,50423,31147],{"class":1155},[425,50425,45395],{"class":701},[425,50427,50428],{"class":427,"line":743},[425,50429,3400],{"emptyLinePlaceholder":1084},[425,50431,50432],{"class":427,"line":751},[425,50433,34706],{"class":1216},[425,50435,50436,50438,50440],{"class":427,"line":759},[425,50437,32702],{"class":1155},[425,50439,34713],{"class":431},[425,50441,32708],{"class":701},[425,50443,50444],{"class":427,"line":770},[425,50445,50446],{"class":1216},"   # 导入自己的数据集，并进行数据处理\n",[425,50448,50449],{"class":427,"line":780},[425,50450,48716],{"class":1216},[425,50452,50453,50455,50457,50459,50461,50463,50466],{"class":427,"line":790},[425,50454,48721],{"class":691},[425,50456,1204],{"class":1155},[425,50458,1818],{"class":1155},[425,50460,1400],{"class":435},[425,50462,1706],{"class":691},[425,50464,50465],{"class":48732},"\u002Fdata\u002Ftest",[425,50467,26124],{"class":435},[425,50469,50470],{"class":427,"line":805},[425,50471,3400],{"emptyLinePlaceholder":1084},[425,50473,50474],{"class":427,"line":818},[425,50475,48744],{"class":1216},[425,50477,50478],{"class":427,"line":831},[425,50479,48749],{"class":1216},[425,50481,50482],{"class":427,"line":841},[425,50483,48754],{"class":1216},[425,50485,50486],{"class":427,"line":852},[425,50487,48759],{"class":1216},[425,50489,50490,50492,50494,50496,50498,50500,50502,50504,50506,50508,50510,50512,50514,50516,50518],{"class":427,"line":862},[425,50491,48764],{"class":701},[425,50493,1204],{"class":1155},[425,50495,48769],{"class":701},[425,50497,48772],{"class":691},[425,50499,1527],{"class":701},[425,50501,48777],{"class":691},[425,50503,1527],{"class":701},[425,50505,48782],{"class":691},[425,50507,48785],{"class":701},[425,50509,48788],{"class":691},[425,50511,1527],{"class":701},[425,50513,48793],{"class":691},[425,50515,1527],{"class":701},[425,50517,48798],{"class":691},[425,50519,5657],{"class":701},[425,50521,50522],{"class":427,"line":878},[425,50523,48805],{"class":1216},[425,50525,50526,50528,50530],{"class":427,"line":914},[425,50527,48810],{"class":701},[425,50529,1204],{"class":1155},[425,50531,48815],{"class":701},[425,50533,50534],{"class":427,"line":943},[425,50535,48820],{"class":1216},[425,50537,50538,50540,50542,50544,50546],{"class":427,"line":956},[425,50539,48825],{"class":701},[425,50541,32256],{"class":691},[425,50543,1527],{"class":701},[425,50545,32256],{"class":691},[425,50547,43377],{"class":701},[425,50549,50550],{"class":427,"line":964},[425,50551,48838],{"class":1216},[425,50553,50554],{"class":427,"line":2733},[425,50555,48843],{"class":701},[425,50557,50558],{"class":427,"line":2750},[425,50559,48848],{"class":701},[425,50561,50562],{"class":427,"line":2755},[425,50563,48853],{"class":1216},[425,50565,50566],{"class":427,"line":2760},[425,50567,48858],{"class":1216},[425,50569,50570],{"class":427,"line":2765},[425,50571,3400],{"emptyLinePlaceholder":1084},[425,50573,50574],{"class":427,"line":2779},[425,50575,48867],{"class":1216},[425,50577,50578],{"class":427,"line":2784},[425,50579,48872],{"class":1216},[425,50581,50582,50584,50586,50588,50590,50592,50594,50596],{"class":427,"line":3577},[425,50583,34720],{"class":701},[425,50585,1204],{"class":1155},[425,50587,48881],{"class":701},[425,50589,48884],{"class":691},[425,50591,1527],{"class":701},[425,50593,48889],{"class":6216},[425,50595,1204],{"class":1155},[425,50597,48894],{"class":701},[425,50599,50600,50602,50604,50606,50608,50610],{"class":427,"line":3591},[425,50601,34777],{"class":701},[425,50603,1204],{"class":1155},[425,50605,32289],{"class":701},[425,50607,32292],{"class":6216},[425,50609,1204],{"class":1155},[425,50611,34788],{"class":701},[425,50613,50614],{"class":427,"line":3599},[425,50615,34793],{"class":1216},[425,50617,50618,50620,50622,50624],{"class":427,"line":3604},[425,50619,34798],{"class":6216},[425,50621,1204],{"class":1155},[425,50623,1367],{"class":691},[425,50625,32221],{"class":701},[425,50627,50628,50630,50632,50634],{"class":427,"line":3610},[425,50629,34809],{"class":6216},[425,50631,1204],{"class":1155},[425,50633,32231],{"class":691},[425,50635,32221],{"class":701},[425,50637,50638,50640,50642,50644],{"class":427,"line":3616},[425,50639,34820],{"class":6216},[425,50641,1204],{"class":1155},[425,50643,1341],{"class":691},[425,50645,1165],{"class":701},[425,50647,50648,50650],{"class":427,"line":3621},[425,50649,5090],{"class":1155},[425,50651,34833],{"class":701},[425,50653,50654],{"class":427,"line":8948},[425,50655,3400],{"emptyLinePlaceholder":1084},[425,50657,50658],{"class":427,"line":8972},[425,50659,34842],{"class":1216},[425,50661,50662,50664,50666],{"class":427,"line":8977},[425,50663,32702],{"class":1155},[425,50665,34849],{"class":431},[425,50667,34852],{"class":701},[425,50669,50670],{"class":427,"line":8983},[425,50671,34857],{"class":1216},[425,50673,50674,50676,50678,50680,50682,50684,50686],{"class":427,"line":9010},[425,50675,31992],{"class":701},[425,50677,1204],{"class":1155},[425,50679,31999],{"class":435},[425,50681,2706],{"class":1155},[425,50683,32004],{"class":701},[425,50685,2703],{"class":1155},[425,50687,34874],{"class":435},[425,50689,50690,50692,50694],{"class":427,"line":9015},[425,50691,32044],{"class":701},[425,50693,1204],{"class":1155},[425,50695,33044],{"class":701},[425,50697,50698],{"class":427,"line":9021},[425,50699,3400],{"emptyLinePlaceholder":1084},[425,50701,50702],{"class":427,"line":9033},[425,50703,34891],{"class":1216},[425,50705,50706,50708,50710],{"class":427,"line":9045},[425,50707,34896],{"class":701},[425,50709,1204],{"class":1155},[425,50711,33097],{"class":691},[425,50713,50714,50716,50718],{"class":427,"line":9057},[425,50715,34905],{"class":701},[425,50717,1204],{"class":1155},[425,50719,4085],{"class":691},[425,50721,50722],{"class":427,"line":10715},[425,50723,3400],{"emptyLinePlaceholder":1084},[425,50725,50726],{"class":427,"line":10740},[425,50727,34918],{"class":1216},[425,50729,50730],{"class":427,"line":10763},[425,50731,34923],{"class":1216},[425,50733,50734],{"class":427,"line":10787},[425,50735,34928],{"class":1216},[425,50737,50738,50740],{"class":427,"line":10792},[425,50739,34933],{"class":1155},[425,50741,33639],{"class":701},[425,50743,50744],{"class":427,"line":10797},[425,50745,34940],{"class":1216},[425,50747,50748,50750,50752,50754],{"class":427,"line":10802},[425,50749,4403],{"class":1155},[425,50751,34947],{"class":701},[425,50753,27034],{"class":1155},[425,50755,34952],{"class":701},[425,50757,50758,50760,50762],{"class":427,"line":10811},[425,50759,34957],{"class":701},[425,50761,1204],{"class":1155},[425,50763,34962],{"class":701},[425,50765,50766,50768,50770],{"class":427,"line":10816},[425,50767,34967],{"class":701},[425,50769,1204],{"class":1155},[425,50771,34972],{"class":701},[425,50773,50774],{"class":427,"line":10822},[425,50775,34977],{"class":1216},[425,50777,50778],{"class":427,"line":10843},[425,50779,33630],{"class":701},[425,50781,50782],{"class":427,"line":10849},[425,50783,34986],{"class":1216},[425,50785,50786,50788,50790],{"class":427,"line":10863},[425,50787,33415],{"class":701},[425,50789,1204],{"class":1155},[425,50791,34995],{"class":701},[425,50793,50794],{"class":427,"line":10869},[425,50795,35000],{"class":1216},[425,50797,50798,50800,50802,50804,50806,50808,50810],{"class":427,"line":10896},[425,50799,33432],{"class":701},[425,50801,1204],{"class":1155},[425,50803,33437],{"class":701},[425,50805,33440],{"class":6216},[425,50807,1204],{"class":1155},[425,50809,1367],{"class":691},[425,50811,1165],{"class":701},[425,50813,50814],{"class":427,"line":10905},[425,50815,35021],{"class":1216},[425,50817,50818],{"class":427,"line":10911},[425,50819,35026],{"class":1216},[425,50821,50822],{"class":427,"line":10919},[425,50823,35031],{"class":1216},[425,50825,50826,50828,50830,50832,50834],{"class":427,"line":10924},[425,50827,35036],{"class":701},[425,50829,10476],{"class":1155},[425,50831,33542],{"class":701},[425,50833,3949],{"class":1155},[425,50835,35045],{"class":701},[425,50837,50838],{"class":427,"line":17601},[425,50839,35050],{"class":1216},[425,50841,50842,50844,50846,50848,50850],{"class":427,"line":17607},[425,50843,35055],{"class":701},[425,50845,10476],{"class":1155},[425,50847,35060],{"class":701},[425,50849,1341],{"class":691},[425,50851,1165],{"class":701},[425,50853,50854],{"class":427,"line":17630},[425,50855,3400],{"emptyLinePlaceholder":1084},[425,50857,50858],{"class":427,"line":17636},[425,50859,35073],{"class":1216},[425,50861,50862,50864,50866,50868,50870],{"class":427,"line":17659},[425,50863,35078],{"class":701},[425,50865,1204],{"class":1155},[425,50867,35083],{"class":701},[425,50869,1732],{"class":1155},[425,50871,35088],{"class":701},[425,50873,50874],{"class":427,"line":17673},[425,50875,35093],{"class":1216},[425,50877,50878,50880,50882,50884],{"class":427,"line":17693},[425,50879,33206],{"class":691},[425,50881,1159],{"class":701},[425,50883,35102],{"class":435},[425,50885,35105],{"class":701},[425,50887,50888],{"class":427,"line":17699},[425,50889,3400],{"emptyLinePlaceholder":1084},[425,50891,50892],{"class":427,"line":17710},[425,50893,35114],{"class":1216},[425,50895,50896,50898,50900,50902,50904],{"class":427,"line":17733},[425,50897,2544],{"class":1155},[425,50899,31975],{"class":691},[425,50901,3949],{"class":1155},[425,50903,31980],{"class":435},[425,50905,4739],{"class":701},[425,50907,50908],{"class":427,"line":17755},[425,50909,35131],{"class":1216},[425,50911,50912,50914,50916],{"class":427,"line":17760},[425,50913,32044],{"class":701},[425,50915,1204],{"class":1155},[425,50917,45306],{"class":701},[425,50919,50920],{"class":427,"line":17766},[425,50921,35144],{"class":1216},[425,50923,50924],{"class":427,"line":17780},[425,50925,35149],{"class":1216},[425,50927,50928,50930,50932],{"class":427,"line":17793},[425,50929,35154],{"class":701},[425,50931,35157],{"class":435},[425,50933,31252],{"class":701},[425,50935,50936],{"class":427,"line":17798},[425,50937,35164],{"class":1216},[425,50939,50940,50942,50944],{"class":427,"line":17812},[425,50941,34777],{"class":701},[425,50943,1204],{"class":1155},[425,50945,35173],{"class":701},[425,50947,50948],{"class":427,"line":17817},[425,50949,35178],{"class":1216},[425,50951,50952],{"class":427,"line":17823},[425,50953,35183],{"class":701},[425,50955,50956],{"class":427,"line":17828},[425,50957,3400],{"emptyLinePlaceholder":1084},[425,50959,50960],{"class":427,"line":17842},[425,50961,35192],{"class":1216},[425,50963,50964],{"class":427,"line":17847},[425,50965,35197],{"class":1216},[425,50967,50968,50970,50972,50974,50976,50978,50980],{"class":427,"line":17852},[425,50969,31992],{"class":701},[425,50971,1204],{"class":1155},[425,50973,31999],{"class":435},[425,50975,2706],{"class":1155},[425,50977,32004],{"class":701},[425,50979,2703],{"class":1155},[425,50981,34874],{"class":435},[425,50983,50984,50986,50988],{"class":427,"line":17866},[425,50985,32044],{"class":701},[425,50987,1204],{"class":1155},[425,50989,33044],{"class":701},[425,50991,50992],{"class":427,"line":17878},[425,50993,35226],{"class":1216},[425,50995,50996],{"class":427,"line":17883},[425,50997,35231],{"class":1216},[425,50999,51000,51002,51004,51006,51009,51011,51014],{"class":427,"line":17896},[425,51001,35236],{"class":701},[425,51003,1204],{"class":1155},[425,51005,2037],{"class":701},[425,51007,51008],{"class":435},"'猫'",[425,51010,1527],{"class":701},[425,51012,51013],{"class":435},"'狗'",[425,51015,34001],{"class":701},[425,51017,51018,51020],{"class":427,"line":17901},[425,51019,34933],{"class":1155},[425,51021,33639],{"class":701},[425,51023,51024],{"class":427,"line":17906},[425,51025,35301],{"class":1216},[425,51027,51028,51030,51032,51034],{"class":427,"line":17911},[425,51029,4403],{"class":1155},[425,51031,35308],{"class":701},[425,51033,27034],{"class":1155},[425,51035,34952],{"class":701},[425,51037,51038,51040,51042],{"class":427,"line":17924},[425,51039,33365],{"class":701},[425,51041,1204],{"class":1155},[425,51043,33370],{"class":701},[425,51045,51046,51048,51050],{"class":427,"line":17929},[425,51047,33380],{"class":701},[425,51049,1204],{"class":1155},[425,51051,33385],{"class":701},[425,51053,51054],{"class":427,"line":33388},[425,51055,3400],{"emptyLinePlaceholder":1084},[425,51057,51058],{"class":427,"line":33394},[425,51059,35337],{"class":1216},[425,51061,51062],{"class":427,"line":33400},[425,51063,33630],{"class":701},[425,51065,51066],{"class":427,"line":33406},[425,51067,35346],{"class":1216},[425,51069,51070,51072,51074],{"class":427,"line":33412},[425,51071,33415],{"class":701},[425,51073,1204],{"class":1155},[425,51075,33420],{"class":701},[425,51077,51078],{"class":427,"line":33423},[425,51079,35359],{"class":1216},[425,51081,51082,51084,51086,51088,51090,51092,51094],{"class":427,"line":33429},[425,51083,33432],{"class":701},[425,51085,1204],{"class":1155},[425,51087,33437],{"class":701},[425,51089,33440],{"class":6216},[425,51091,1204],{"class":1155},[425,51093,1367],{"class":691},[425,51095,1165],{"class":701},[425,51097,51098],{"class":427,"line":33449},[425,51099,35380],{"class":1216},[425,51101,51102,51104,51106],{"class":427,"line":33455},[425,51103,35385],{"class":701},[425,51105,1204],{"class":1155},[425,51107,35390],{"class":701},[425,51109,51110,51112,51114],{"class":427,"line":33466},[425,51111,35395],{"class":701},[425,51113,1204],{"class":1155},[425,51115,35400],{"class":701},[425,51117,51118,51120,51122,51124,51126,51128,51130,51132],{"class":427,"line":33472},[425,51119,35405],{"class":691},[425,51121,1159],{"class":701},[425,51123,35410],{"class":435},[425,51125,35413],{"class":701},[425,51127,35416],{"class":435},[425,51129,1527],{"class":701},[425,51131,35421],{"class":435},[425,51133,35424],{"class":701},[1074,51135,51136],{},"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":395,"searchDepth":698,"depth":698,"links":51138},[51139,51140,51141,51142],{"id":31346,"depth":710,"text":31347},{"id":38594,"depth":710,"text":38595},{"id":42027,"depth":710,"text":42028},{"id":46036,"depth":710,"text":46037},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":31338,"description":24374},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":51149,"title":51150,"body":51151,"description":24374,"extension":1082,"meta":51158,"navigation":1084,"path":51159,"seo":51160,"stem":51161,"__hash__":51162},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":51152,"toc":51156},[51153],[10,51154,51150],{"id":51155},"_3yolo模型学习",{"title":395,"searchDepth":698,"depth":698,"links":51157},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":51150,"description":24374},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":51164,"title":51165,"body":51166,"description":51173,"extension":1082,"meta":51174,"navigation":1084,"path":51176,"seo":51177,"stem":51178,"__hash__":51179},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":51167,"toc":51171},[51168],[19,51169,51170],{},"yolo模型还未补充",{"title":395,"searchDepth":698,"depth":698,"links":51172},[],"深度学习学习",{"category":51175},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":51165,"description":51173},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":51181,"title":51182,"body":51183,"description":24374,"extension":1082,"meta":51208,"navigation":1084,"path":51209,"seo":51210,"stem":51211,"__hash__":51212},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":51184,"toc":51206},[51185,51188,51191,51196,51203],[10,51186,51182],{"id":51187},"_1工具",[19,51189,51190],{},"提示错误插件：有问题会提前报错",[19,51192,51193],{},[393,51194],{"alt":395,"src":51195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,51197,51198],{},[22,51199,51202],{"href":51200,"rel":51201},"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",[26],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,51204,51205],{},"alt键加上下箭头可以实现语句的移动",{"title":395,"searchDepth":698,"depth":698,"links":51207},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":51182,"description":24374},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":51214,"title":51215,"body":51216,"description":24374,"extension":1082,"meta":54080,"navigation":1084,"path":54081,"seo":54082,"stem":54083,"__hash__":54084},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":51217,"toc":54031},[51218,51221,51225,51229,51234,51237,51242,51246,51253,51258,51265,51270,51277,51282,51286,51291,51294,51298,51303,51307,51312,51315,51318,51321,51324,51327,51330,51333,51336,51341,51346,51351,51355,51358,51361,51365,51370,51373,51381,51386,51403,51411,51416,51421,51426,51431,51436,51439,51444,51449,51453,51462,51467,51472,51476,51481,51484,51488,51493,51501,51506,51511,51514,51519,51524,51529,51532,51535,51538,51543,51548,51551,51556,51559,51564,51567,51570,51573,51578,51581,51584,51599,51604,51609,51614,51617,51620,51623,51637,51640,51645,51650,51653,51656,51659,51662,51665,51668,51671,51675,51679,51684,51688,51691,51696,51701,51704,51709,51712,51716,51721,51724,51727,51730,51733,51736,51739,51742,51745,51748,51752,51757,51762,51767,51770,51773,51777,51782,51785,51789,51792,51795,51800,51803,51806,51810,51814,51817,51822,51827,51830,51859,51864,51869,51874,51879,51883,51888,51892,51897,51900,51904,51908,51913,51917,51922,51927,51931,51936,51939,51941,51944,51949,51953,51958,51962,51966,51971,51976,51981,51986,51990,51995,52000,52005,52008,52011,52016,52019,52024,52029,52034,52039,52043,52850,52854,53197,53202,53205,53208,53211,53214,53217,53220,53223,53226,53228,53231,53233,53236,53240,53245,53248,53251,53254,53258,53263,53268,53288,53291,53295,53300,53305,53322,53326,53355,53359,53381,53383,53422,53430,53436,53440,53443,53446,53451,53456,53459,53462,53465,53470,53475,53478,53481,53484,53487,53490,53493,53496,53499,53502,53505,53508,53510,53513,53516,53519,53522,53525,53528,53531,53534,53538,53543,53546,53551,53554,53557,53560,53563,53566,53569,53572,53574,53577,53580,53583,53586,53589,53592,53596,53599,53608,53611,53616,53619,53624,53627,53630,53633,53636,53639,53642,53645,53649,53653,53656,53659,53664,53669,53674,53678,53683,53688,53691,53694,53697,53700,53703,53708,53711,53716,53718,53723,53726,53730,53735,53738,53741,53746,53750,53753,53758,53761,53764,53793,53798,53801,53804,53807,53810,53813,53817,53820,53906,53910,53913,53918,53923,53930,53933,53936,53939,53942,53945,53950,53955,53958,53961,53964,53967,53970,53973,53976,53979,53982,53984,53987,53991,53996,54001,54006,54009,54014,54019,54022,54025,54028],[10,51219,51215],{"id":51220},"_2基础语法",[1099,51222,51224],{"id":51223},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[14,51226,51228],{"id":51227},"_211-js组成","2.1.1 js组成",[972,51230,51231],{},[450,51232,51233],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,51235,51236],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[972,51238,51239],{"start":698},[450,51240,51241],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[14,51243,51245],{"id":51244},"_212-js书写位置","2.1.2 js书写位置",[972,51247,51248],{},[450,51249,51250],{},[400,51251,51252],{},"内部 JavaScript",[19,51254,51255],{},[393,51256],{"alt":395,"src":51257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[972,51259,51260],{"start":698},[450,51261,51262],{},[400,51263,51264],{},"外部 JavaScript",[19,51266,51267],{},[393,51268],{"alt":395,"src":51269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[972,51271,51272],{"start":710},[450,51273,51274],{},[400,51275,51276],{},"内联 JavaScript",[19,51278,51279],{},[393,51280],{"alt":395,"src":51281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[14,51283,51285],{"id":51284},"_213-javascript注释","2.1.3 JavaScript注释",[19,51287,51288],{},[393,51289],{"alt":395,"src":51290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,51292,51293],{},"alt+shift+a一定要记住！",[14,51295,51297],{"id":51296},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,51299,51300],{},[393,51301],{"alt":395,"src":51302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[14,51304,51306],{"id":51305},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[972,51308,51309],{},[450,51310,51311],{},"输出语法：",[19,51313,51314],{},"①document.write('要出的内容')",[19,51316,51317],{},"向body内输出内容；",[19,51319,51320],{},"如果输出的内容写的是标签，也会被解析cheng",[19,51322,51323],{},"②alert('要出的内容')",[19,51325,51326],{},"页面弹出警告对话框",[19,51328,51329],{},"③console.log('控制台打印')",[19,51331,51332],{},"控制台输出语法，程序员调试使用",[19,51334,51335],{},"输入log就行，自动生成：",[19,51337,51338],{},[393,51339],{"alt":395,"src":51340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[972,51342,51343],{"start":698},[450,51344,51345],{},"输入语法：",[19,51347,51348],{},[393,51349],{"alt":395,"src":51350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[14,51352,51354],{"id":51353},"_2116-字面量","21.1.6 字面量",[19,51356,51357],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,51359,51360],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[1099,51362,51364],{"id":51363},"_22-变量","2.2 变量",[972,51366,51367],{},[450,51368,51369],{},"变量声明",[19,51371,51372],{},"let 变量名",[447,51374,51375,51378],{},[450,51376,51377],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[450,51379,51380],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[972,51382,51383],{"start":698},[450,51384,51385],{},"变量赋值",[416,51387,51391],{"className":51388,"code":51389,"language":51390,"meta":395,"style":395},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[422,51392,51393,51398],{"__ignoreMap":395},[425,51394,51395],{"class":427,"line":428},[425,51396,51397],{"class":701},"let age\n",[425,51399,51400],{"class":427,"line":698},[425,51401,51402],{"class":701},"age=18\n",[972,51404,51405,51408],{"start":710},[450,51406,51407],{},"连这些（变量的初始化）：let age=18",[450,51409,51410],{},"更新变量",[19,51412,51413],{},[393,51414],{"alt":395,"src":51415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[972,51417,51418],{"start":735},[450,51419,51420],{},"声明多个变量",[19,51422,51423],{},[393,51424],{"alt":395,"src":51425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[972,51427,51428],{"start":743},[450,51429,51430],{},"变量命名规则与规范",[19,51432,51433],{},[393,51434],{"alt":395,"src":51435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,51437,51438],{},"遵守小驼峰！",[972,51440,51441],{"start":751},[450,51442,51443],{},"变量拓展-let和var的区别",[19,51445,51446],{},[393,51447],{"alt":395,"src":51448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[1099,51450,51452],{"id":51451},"_23-数组","2.3 数组",[416,51454,51456],{"className":51388,"code":51455,"language":51390,"meta":395,"style":395},"let arr = []\n",[422,51457,51458],{"__ignoreMap":395},[425,51459,51460],{"class":427,"line":428},[425,51461,51455],{"class":701},[19,51463,51464],{},[393,51465],{"alt":395,"src":51466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,51468,51469],{},[393,51470],{"alt":395,"src":51471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[1099,51473,51475],{"id":51474},"_24-常量","2.4 常量",[19,51477,51478],{},[393,51479],{"alt":395,"src":51480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,51482,51483],{},"const — 类似于 let ，但是变量的值无法被修改",[1099,51485,51487],{"id":51486},"_25-数据类型","2.5 数据类型",[19,51489,51490],{},[393,51491],{"alt":395,"src":51492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[972,51494,51495,51498],{},[450,51496,51497],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[450,51499,51500],{},"算数运算符：",[19,51502,51503],{},[393,51504],{"alt":395,"src":51505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[972,51507,51508],{"start":710},[450,51509,51510],{},"数字类型（Number）",[19,51512,51513],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,51515,51516],{},[393,51517],{"alt":395,"src":51518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[972,51520,51521],{"start":721},[450,51522,51523],{},"字符串类型（string）",[19,51525,51526],{},[393,51527],{"alt":395,"src":51528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,51530,51531],{},"反引号也是可以使用的",[19,51533,51534],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,51536,51537],{},"例如：document.write(\"我今年\"+age+\"岁\")",[972,51539,51540],{"start":735},[450,51541,51542],{},"模板字符串",[19,51544,51545],{},[393,51546],{"alt":395,"src":51547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,51549,51550],{},"类似于python的字符串格式化",[972,51552,51553],{"start":743},[450,51554,51555],{},"布尔类型",[19,51557,51558],{},"true 和 false",[972,51560,51561],{"start":751},[450,51562,51563],{},"未定义类型（underfined）",[19,51565,51566],{},"表示没有赋值",[19,51568,51569],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,51571,51572],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[972,51574,51575],{"start":759},[450,51576,51577],{},"null（空类型）",[19,51579,51580],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,51582,51583],{},"赋值了，但是内容为空",[416,51585,51587],{"className":51388,"code":51586,"language":51390,"meta":395,"style":395},"typeof null\n输出的是'object'，是一个对象数据类型\n",[422,51588,51589,51594],{"__ignoreMap":395},[425,51590,51591],{"class":427,"line":428},[425,51592,51593],{"class":701},"typeof null\n",[425,51595,51596],{"class":427,"line":698},[425,51597,51598],{"class":701},"输出的是'object'，是一个对象数据类型\n",[972,51600,51601],{"start":770},[450,51602,51603],{},"控制台检测数据类型",[19,51605,51606],{},[393,51607],{"alt":395,"src":51608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[972,51610,51611],{"start":780},[450,51612,51613],{},"类型转换",[19,51615,51616],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,51618,51619],{},"转换方式：隐式转换和显示转换",[19,51621,51622],{},"①隐式转换",[447,51624,51625,51628,51631,51634],{},[450,51626,51627],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[450,51629,51630],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[450,51632,51633],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[450,51635,51636],{},"任何数据和字符串相加结果都是字符串",[19,51638,51639],{},"②显示转换",[19,51641,51642],{},[393,51643],{"alt":395,"src":51644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,51646,51647],{},[393,51648],{"alt":395,"src":51649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,51651,51652],{},"在输入的时候要用好隐式转换，简单写起来",[19,51654,51655],{},"let num = +prompt(’请输入数字：‘)",[19,51657,51658],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,51660,51661],{},"console.log(parseInt('12.333px'))",[19,51663,51664],{},"输出为：12",[19,51666,51667],{},"console.log(parseInt('a'a'a12.333px'))",[19,51669,51670],{},"输出：NaN",[1099,51672,51674],{"id":51673},"_26-运算符","2.6 运算符",[14,51676,51678],{"id":51677},"_261-赋值运算符","2.6.1 赋值运算符",[19,51680,51681],{},[393,51682],{"alt":395,"src":51683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[14,51685,51687],{"id":51686},"_262-一元运算符","2.6.2 一元运算符",[19,51689,51690],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,51692,51693],{},[393,51694],{"alt":395,"src":51695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,51697,51698],{},[393,51699],{"alt":395,"src":51700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,51702,51703],{},"两者的区别：",[19,51705,51706],{},[393,51707],{"alt":395,"src":51708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,51710,51711],{},"前置先自加；后置后加，代码执行完之后再加",[14,51713,51715],{"id":51714},"_263-比较运算符","2.6.3 比较运算符",[19,51717,51718],{},[393,51719],{"alt":395,"src":51720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,51722,51723],{},"比较运算符也有隐式转换",[19,51725,51726],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,51728,51729],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,51731,51732],{},"要使用三等，开发的时候",[19,51734,51735],{},"NaN不等于任何人，包括它自己",[19,51737,51738],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,51740,51741],{},"7\u002F10=0.7",[19,51743,51744],{},"最后：0.5+0.2=0.7",[19,51746,51747],{},"字符串比较，比较的是字符对应的ASCII码",[14,51749,51751],{"id":51750},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,51753,51754],{},[393,51755],{"alt":395,"src":51756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,51758,51759],{},[393,51760],{"alt":395,"src":51761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,51763,51764],{},[393,51765],{"alt":395,"src":51766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,51768,51769],{},"上述题目选D",[19,51771,51772],{},"与真2假1；或真1假2",[14,51774,51776],{"id":51775},"_265-运算符优先级","2.6.5 运算符优先级",[19,51778,51779],{},[393,51780],{"alt":395,"src":51781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,51783,51784],{},"先算逻辑与，后算逻辑或",[1099,51786,51788],{"id":51787},"_27-语句","2.7 语句",[19,51790,51791],{},"表达式：是可以被求值的代码，会有结果给我们",[19,51793,51794],{},"语句：语句是可以被执行的代码，例如prompt()",[19,51796,51797],{},[393,51798],{"alt":395,"src":51799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,51801,51802],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,51804,51805],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[14,51807,51809],{"id":51808},"_271-分支语句","2.7.1 分支语句",[22995,51811,51813],{"id":51812},"_2711-if分支语句","2.7.1.1 if分支语句",[19,51815,51816],{},"if语句单行简单的话，可以不写{}，写在一行就行",[972,51818,51819],{},[450,51820,51821],{},"单分支语句",[19,51823,51824],{},[393,51825],{"alt":395,"src":51826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,51828,51829],{},"除了0，所有数字都为真",[416,51831,51833],{"className":51388,"code":51832,"language":51390,"meta":395,"style":395},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[422,51834,51835,51840,51845,51850,51854],{"__ignoreMap":395},[425,51836,51837],{"class":427,"line":428},[425,51838,51839],{"class":701},"if（0) {\n",[425,51841,51842],{"class":427,"line":698},[425,51843,51844],{"class":701},"    let a=1\n",[425,51846,51847],{"class":427,"line":710},[425,51848,51849],{"class":701},"    alert(typeof a)\n",[425,51851,51852],{"class":427,"line":721},[425,51853,2578],{"class":701},[425,51855,51856],{"class":427,"line":735},[425,51857,51858],{"class":701},"不输出，括号为假\n",[972,51860,51861],{"start":698},[450,51862,51863],{},"双分支语句",[19,51865,51866],{},[393,51867],{"alt":395,"src":51868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[972,51870,51871],{"start":710},[450,51872,51873],{},"多分支语句",[19,51875,51876],{},[393,51877],{"alt":395,"src":51878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22995,51880,51882],{"id":51881},"_2712-三元运算符","2.7.1.2 三元运算符",[19,51884,51885],{},[393,51886],{"alt":395,"src":51887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22995,51889,51891],{"id":51890},"_2713-switch语句","2.7.1.3 switch语句",[19,51893,51894],{},[393,51895],{"alt":395,"src":51896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,51898,51899],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[14,51901,51903],{"id":51902},"_272-循环语句","2.7.2 循环语句",[22995,51905,51907],{"id":51906},"_2721-断点演示","2.7.2.1 断点演示",[19,51909,51910],{},[393,51911],{"alt":395,"src":51912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22995,51914,51916],{"id":51915},"_2722-while循环","2.7.2.2 while循环",[19,51918,51919],{},[393,51920],{"alt":395,"src":51921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,51923,51924],{},[393,51925],{"alt":395,"src":51926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22995,51928,51930],{"id":51929},"_2723-for循环","2.7.2.3 for循环",[19,51932,51933],{},[393,51934],{"alt":395,"src":51935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,51937,51938],{},"for(;;) {",[19,51940,2093],{},[19,51942,51943],{},"表示无限循环",[19,51945,51946],{},[393,51947],{"alt":395,"src":51948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22995,51950,51952],{"id":51951},"_2724-循环的退出","2.7.2.4 循环的退出",[19,51954,51955],{},[393,51956],{"alt":395,"src":51957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[1099,51959,51961],{"id":51960},"_28-数组","2.8 数组",[14,51963,51965],{"id":51964},"_281-基础认识","2.8.1 基础认识",[19,51967,51968],{},[393,51969],{"alt":395,"src":51970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,51972,51973],{},[393,51974],{"alt":395,"src":51975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,51977,51978],{},[393,51979],{"alt":395,"src":51980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,51982,51983],{},[393,51984],{"alt":395,"src":51985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[14,51987,51989],{"id":51988},"_282-操作数组","2.8.2 操作数组",[19,51991,51992],{},[393,51993],{"alt":395,"src":51994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[972,51996,51997],{},[450,51998,51999],{},"添加元素",[19,52001,52002],{},[393,52003],{"alt":395,"src":52004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,52006,52007],{},"console.log(arr.push('green'))",[19,52009,52010],{},"输出结果：为新数组的长度",[19,52012,52013],{},[393,52014],{"alt":395,"src":52015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,52017,52018],{},"push用的非常多，一定要记住",[972,52020,52021],{},[450,52022,52023],{},"删除元素",[19,52025,52026],{},[393,52027],{"alt":395,"src":52028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,52030,52031],{},[393,52032],{"alt":395,"src":52033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,52035,52036],{},[393,52037],{"alt":395,"src":52038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[14,52040,52042],{"id":52041},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[416,52044,52046],{"className":51388,"code":52045,"language":51390,"meta":395,"style":395},"\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",[422,52047,52048,52063,52079,52083,52092,52110,52134,52156,52170,52178,52185,52197,52208,52212,52216,52223,52235,52250,52263,52282,52299,52314,52326,52338,52350,52354,52358,52369,52379,52391,52403,52415,52426,52430,52434,52446,52450,52464,52468,52472,52483,52497,52509,52523,52527,52536,52545,52549,52558,52562,52571,52576,52581,52594,52622,52627,52632,52657,52662,52666,52671,52676,52691,52695,52700,52730,52742,52758,52774,52788,52793,52800,52804,52809,52822,52830,52838,52842],{"__ignoreMap":395},[425,52049,52050,52053,52057,52060],{"class":427,"line":428},[425,52051,52052],{"class":701},"\u003C!",[425,52054,52056],{"class":52055},"s9eBZ","DOCTYPE",[425,52058,52059],{"class":431}," html",[425,52061,52062],{"class":701},">\n",[425,52064,52065,52067,52069,52072,52074,52077],{"class":427,"line":698},[425,52066,2057],{"class":701},[425,52068,51390],{"class":52055},[425,52070,52071],{"class":431}," lang",[425,52073,1204],{"class":701},[425,52075,52076],{"class":435},"\"en\"",[425,52078,52062],{"class":701},[425,52080,52081],{"class":427,"line":710},[425,52082,3400],{"emptyLinePlaceholder":1084},[425,52084,52085,52087,52090],{"class":427,"line":721},[425,52086,2057],{"class":701},[425,52088,52089],{"class":52055},"head",[425,52091,52062],{"class":701},[425,52093,52094,52097,52100,52103,52105,52108],{"class":427,"line":735},[425,52095,52096],{"class":701},"    \u003C",[425,52098,52099],{"class":52055},"meta",[425,52101,52102],{"class":431}," charset",[425,52104,1204],{"class":701},[425,52106,52107],{"class":435},"\"UTF-8\"",[425,52109,52062],{"class":701},[425,52111,52112,52114,52116,52119,52121,52124,52127,52129,52132],{"class":427,"line":743},[425,52113,52096],{"class":701},[425,52115,52099],{"class":52055},[425,52117,52118],{"class":431}," http-equiv",[425,52120,1204],{"class":701},[425,52122,52123],{"class":435},"\"X-UA-Compatible\"",[425,52125,52126],{"class":431}," content",[425,52128,1204],{"class":701},[425,52130,52131],{"class":435},"\"IE=edge\"",[425,52133,52062],{"class":701},[425,52135,52136,52138,52140,52142,52144,52147,52149,52151,52154],{"class":427,"line":751},[425,52137,52096],{"class":701},[425,52139,52099],{"class":52055},[425,52141,15917],{"class":431},[425,52143,1204],{"class":701},[425,52145,52146],{"class":435},"\"viewport\"",[425,52148,52126],{"class":431},[425,52150,1204],{"class":701},[425,52152,52153],{"class":435},"\"width=device-width, initial-scale=1.0\"",[425,52155,52062],{"class":701},[425,52157,52158,52160,52163,52166,52168],{"class":427,"line":759},[425,52159,52096],{"class":701},[425,52161,52162],{"class":52055},"title",[425,52164,52165],{"class":701},">Document\u003C\u002F",[425,52167,52162],{"class":52055},[425,52169,52062],{"class":701},[425,52171,52172,52174,52176],{"class":427,"line":770},[425,52173,52096],{"class":701},[425,52175,1074],{"class":52055},[425,52177,52062],{"class":701},[425,52179,52180,52183],{"class":427,"line":780},[425,52181,52182],{"class":52055},"        *",[425,52184,16569],{"class":701},[425,52186,52187,52190,52193,52195],{"class":427,"line":790},[425,52188,52189],{"class":691},"            margin",[425,52191,52192],{"class":701},": ",[425,52194,1341],{"class":691},[425,52196,2307],{"class":701},[425,52198,52199,52202,52204,52206],{"class":427,"line":805},[425,52200,52201],{"class":691},"            padding",[425,52203,52192],{"class":701},[425,52205,1341],{"class":691},[425,52207,2307],{"class":701},[425,52209,52210],{"class":427,"line":818},[425,52211,3529],{"class":701},[425,52213,52214],{"class":427,"line":831},[425,52215,3400],{"emptyLinePlaceholder":1084},[425,52217,52218,52221],{"class":427,"line":841},[425,52219,52220],{"class":431},"        .box",[425,52222,16569],{"class":701},[425,52224,52225,52228,52230,52233],{"class":427,"line":852},[425,52226,52227],{"class":691},"            display",[425,52229,52192],{"class":701},[425,52231,52232],{"class":691},"flex",[425,52234,2307],{"class":701},[425,52236,52237,52240,52242,52245,52248],{"class":427,"line":862},[425,52238,52239],{"class":691},"            width",[425,52241,52192],{"class":701},[425,52243,52244],{"class":691},"700",[425,52246,52247],{"class":1155},"px",[425,52249,2307],{"class":701},[425,52251,52252,52255,52257,52259,52261],{"class":427,"line":878},[425,52253,52254],{"class":691},"            height",[425,52256,52192],{"class":701},[425,52258,4973],{"class":691},[425,52260,52247],{"class":1155},[425,52262,2307],{"class":701},[425,52264,52265,52268,52270,52272,52274,52277,52280],{"class":427,"line":914},[425,52266,52267],{"class":691},"            border-left",[425,52269,52192],{"class":701},[425,52271,1367],{"class":691},[425,52273,52247],{"class":1155},[425,52275,52276],{"class":691}," solid",[425,52278,52279],{"class":691}," pink",[425,52281,2307],{"class":701},[425,52283,52284,52287,52289,52291,52293,52295,52297],{"class":427,"line":943},[425,52285,52286],{"class":691},"            border-bottom",[425,52288,52192],{"class":701},[425,52290,1367],{"class":691},[425,52292,52247],{"class":1155},[425,52294,52276],{"class":691},[425,52296,52279],{"class":691},[425,52298,2307],{"class":701},[425,52300,52301,52303,52305,52307,52309,52312],{"class":427,"line":956},[425,52302,52189],{"class":691},[425,52304,52192],{"class":701},[425,52306,1804],{"class":691},[425,52308,52247],{"class":1155},[425,52310,52311],{"class":691}," auto",[425,52313,2307],{"class":701},[425,52315,52316,52319,52321,52324],{"class":427,"line":964},[425,52317,52318],{"class":691},"            justify-content",[425,52320,52192],{"class":701},[425,52322,52323],{"class":691},"space-around",[425,52325,2307],{"class":701},[425,52327,52328,52331,52333,52336],{"class":427,"line":2733},[425,52329,52330],{"class":691},"            align-items",[425,52332,52192],{"class":701},[425,52334,52335],{"class":691},"flex-end",[425,52337,2307],{"class":701},[425,52339,52340,52343,52345,52348],{"class":427,"line":2750},[425,52341,52342],{"class":691},"            text-align",[425,52344,52192],{"class":701},[425,52346,52347],{"class":691},"center",[425,52349,2307],{"class":701},[425,52351,52352],{"class":427,"line":2755},[425,52353,3529],{"class":701},[425,52355,52356],{"class":427,"line":2760},[425,52357,3400],{"emptyLinePlaceholder":1084},[425,52359,52360,52362,52364,52367],{"class":427,"line":2765},[425,52361,52220],{"class":431},[425,52363,2107],{"class":1155},[425,52365,52366],{"class":52055},"div",[425,52368,16569],{"class":701},[425,52370,52371,52373,52375,52377],{"class":427,"line":2779},[425,52372,52227],{"class":691},[425,52374,52192],{"class":701},[425,52376,52232],{"class":691},[425,52378,2307],{"class":701},[425,52380,52381,52383,52385,52387,52389],{"class":427,"line":2784},[425,52382,52239],{"class":691},[425,52384,52192],{"class":701},[425,52386,1804],{"class":691},[425,52388,52247],{"class":1155},[425,52390,2307],{"class":701},[425,52392,52393,52396,52398,52401],{"class":427,"line":3577},[425,52394,52395],{"class":691},"            background-color",[425,52397,52192],{"class":701},[425,52399,52400],{"class":691},"pink",[425,52402,2307],{"class":701},[425,52404,52405,52408,52410,52413],{"class":427,"line":3591},[425,52406,52407],{"class":691},"            flex-direction",[425,52409,52192],{"class":701},[425,52411,52412],{"class":691},"column",[425,52414,2307],{"class":701},[425,52416,52417,52419,52421,52424],{"class":427,"line":3599},[425,52418,52318],{"class":691},[425,52420,52192],{"class":701},[425,52422,52423],{"class":691},"space-between",[425,52425,2307],{"class":701},[425,52427,52428],{"class":427,"line":3604},[425,52429,3529],{"class":701},[425,52431,52432],{"class":427,"line":3610},[425,52433,3400],{"emptyLinePlaceholder":1084},[425,52435,52436,52438,52441,52444],{"class":427,"line":3616},[425,52437,52220],{"class":431},[425,52439,52440],{"class":52055}," div",[425,52442,52443],{"class":52055}," span",[425,52445,16569],{"class":701},[425,52447,52448],{"class":427,"line":3621},[425,52449,3400],{"emptyLinePlaceholder":1084},[425,52451,52452,52455,52457,52460,52462],{"class":427,"line":8948},[425,52453,52454],{"class":691},"            margin-top",[425,52456,52192],{"class":701},[425,52458,52459],{"class":691},"-20",[425,52461,52247],{"class":1155},[425,52463,2307],{"class":701},[425,52465,52466],{"class":427,"line":8972},[425,52467,3529],{"class":701},[425,52469,52470],{"class":427,"line":8977},[425,52471,3400],{"emptyLinePlaceholder":1084},[425,52473,52474,52476,52478,52481],{"class":427,"line":8983},[425,52475,52220],{"class":431},[425,52477,52440],{"class":52055},[425,52479,52480],{"class":52055}," h4",[425,52482,16569],{"class":701},[425,52484,52485,52488,52490,52493,52495],{"class":427,"line":9010},[425,52486,52487],{"class":691},"            margin-bottom",[425,52489,52192],{"class":701},[425,52491,52492],{"class":691},"-35",[425,52494,52247],{"class":1155},[425,52496,2307],{"class":701},[425,52498,52499,52501,52503,52505,52507],{"class":427,"line":9015},[425,52500,52239],{"class":691},[425,52502,52192],{"class":701},[425,52504,1505],{"class":691},[425,52506,52247],{"class":1155},[425,52508,2307],{"class":701},[425,52510,52511,52514,52516,52519,52521],{"class":427,"line":9021},[425,52512,52513],{"class":691},"            margin-left",[425,52515,52192],{"class":701},[425,52517,52518],{"class":691},"-10",[425,52520,52247],{"class":1155},[425,52522,2307],{"class":701},[425,52524,52525],{"class":427,"line":9033},[425,52526,3529],{"class":701},[425,52528,52529,52532,52534],{"class":427,"line":9045},[425,52530,52531],{"class":701},"    \u003C\u002F",[425,52533,1074],{"class":52055},[425,52535,52062],{"class":701},[425,52537,52538,52541,52543],{"class":427,"line":9057},[425,52539,52540],{"class":701},"\u003C\u002F",[425,52542,52089],{"class":52055},[425,52544,52062],{"class":701},[425,52546,52547],{"class":427,"line":10715},[425,52548,3400],{"emptyLinePlaceholder":1084},[425,52550,52551,52553,52556],{"class":427,"line":10740},[425,52552,2057],{"class":701},[425,52554,52555],{"class":52055},"body",[425,52557,52062],{"class":701},[425,52559,52560],{"class":427,"line":10763},[425,52561,3400],{"emptyLinePlaceholder":1084},[425,52563,52564,52566,52569],{"class":427,"line":10787},[425,52565,52096],{"class":701},[425,52567,52568],{"class":52055},"script",[425,52570,52062],{"class":701},[425,52572,52573],{"class":427,"line":10792},[425,52574,52575],{"class":1216},"        \u002F\u002F 1. 四次弹框效果\n",[425,52577,52578],{"class":427,"line":10797},[425,52579,52580],{"class":1216},"        \u002F\u002F 声明一个新的数组\n",[425,52582,52583,52586,52589,52591],{"class":427,"line":10802},[425,52584,52585],{"class":1155},"        let",[425,52587,52588],{"class":701}," arr ",[425,52590,1204],{"class":1155},[425,52592,52593],{"class":701}," []\n",[425,52595,52596,52598,52600,52603,52605,52607,52609,52611,52613,52616,52618,52620],{"class":427,"line":10811},[425,52597,4403],{"class":1155},[425,52599,2664],{"class":701},[425,52601,52602],{"class":1155},"let",[425,52604,10437],{"class":701},[425,52606,1204],{"class":1155},[425,52608,26109],{"class":691},[425,52610,10444],{"class":701},[425,52612,2601],{"class":1155},[425,52614,52615],{"class":691}," 4",[425,52617,4214],{"class":701},[425,52619,3292],{"class":1155},[425,52621,13441],{"class":701},[425,52623,52624],{"class":427,"line":10816},[425,52625,52626],{"class":1216},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[425,52628,52629],{"class":427,"line":10822},[425,52630,52631],{"class":1216},"            \u002F\u002F arr.push(num)\n",[425,52633,52634,52637,52640,52642,52645,52647,52650,52652,52655],{"class":427,"line":10843},[425,52635,52636],{"class":701},"            arr.",[425,52638,52639],{"class":431},"push",[425,52641,1159],{"class":701},[425,52643,52644],{"class":431},"prompt",[425,52646,1159],{"class":701},[425,52648,52649],{"class":435},"`请输入第${",[425,52651,1589],{"class":701},[425,52653,52654],{"class":435},"}季度的数据:`",[425,52656,31252],{"class":701},[425,52658,52659],{"class":427,"line":10849},[425,52660,52661],{"class":1216},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[425,52663,52664],{"class":427,"line":10863},[425,52665,3529],{"class":701},[425,52667,52668],{"class":427,"line":10869},[425,52669,52670],{"class":1216},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[425,52672,52673],{"class":427,"line":10896},[425,52674,52675],{"class":1216},"        \u002F\u002F 盒子开头\n",[425,52677,52678,52681,52684,52686,52689],{"class":427,"line":10905},[425,52679,52680],{"class":701},"        document.",[425,52682,52683],{"class":431},"write",[425,52685,1159],{"class":701},[425,52687,52688],{"class":435},"` \u003Cdiv class=\"box\">`",[425,52690,1165],{"class":701},[425,52692,52693],{"class":427,"line":10911},[425,52694,3400],{"emptyLinePlaceholder":1084},[425,52696,52697],{"class":427,"line":10919},[425,52698,52699],{"class":1216},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[425,52701,52702,52704,52706,52708,52710,52712,52714,52716,52718,52721,52724,52726,52728],{"class":427,"line":10924},[425,52703,4403],{"class":1155},[425,52705,2664],{"class":701},[425,52707,52602],{"class":1155},[425,52709,10437],{"class":701},[425,52711,1204],{"class":1155},[425,52713,5093],{"class":691},[425,52715,10444],{"class":701},[425,52717,2057],{"class":1155},[425,52719,52720],{"class":701}," arr.",[425,52722,52723],{"class":691},"length",[425,52725,4214],{"class":701},[425,52727,3292],{"class":1155},[425,52729,13441],{"class":701},[425,52731,52732,52735,52737,52739],{"class":427,"line":17601},[425,52733,52734],{"class":701},"            document.",[425,52736,52683],{"class":431},[425,52738,1159],{"class":701},[425,52740,52741],{"class":435},"`\n",[425,52743,52744,52747,52749,52751,52753,52755],{"class":427,"line":17607},[425,52745,52746],{"class":435},"              \u003Cdiv style=\"height: ${",[425,52748,4880],{"class":701},[425,52750,2037],{"class":435},[425,52752,1589],{"class":701},[425,52754,2087],{"class":435},[425,52756,52757],{"class":435},"}px;\">\n",[425,52759,52760,52763,52765,52767,52769,52771],{"class":427,"line":17630},[425,52761,52762],{"class":435},"                \u003Cspan>${",[425,52764,4880],{"class":701},[425,52766,2037],{"class":435},[425,52768,1589],{"class":701},[425,52770,2087],{"class":435},[425,52772,52773],{"class":435},"}\u003C\u002Fspan>\n",[425,52775,52776,52779,52781,52783,52785],{"class":427,"line":17636},[425,52777,52778],{"class":435},"                \u003Ch4>第${",[425,52780,1589],{"class":701},[425,52782,46321],{"class":1155},[425,52784,26109],{"class":691},[425,52786,52787],{"class":435},"}季度\u003C\u002Fh4>\n",[425,52789,52790],{"class":427,"line":17659},[425,52791,52792],{"class":435},"              \u003C\u002Fdiv>          \n",[425,52794,52795,52798],{"class":427,"line":17673},[425,52796,52797],{"class":435},"            `",[425,52799,1165],{"class":701},[425,52801,52802],{"class":427,"line":17693},[425,52803,3529],{"class":701},[425,52805,52806],{"class":427,"line":17699},[425,52807,52808],{"class":1216},"        \u002F\u002F 盒子结尾\n",[425,52810,52811,52813,52815,52817,52820],{"class":427,"line":17710},[425,52812,52680],{"class":701},[425,52814,52683],{"class":431},[425,52816,1159],{"class":701},[425,52818,52819],{"class":435},"` \u003C\u002Fdiv>`",[425,52821,1165],{"class":701},[425,52823,52824,52826,52828],{"class":427,"line":17733},[425,52825,52531],{"class":701},[425,52827,52568],{"class":52055},[425,52829,52062],{"class":701},[425,52831,52832,52834,52836],{"class":427,"line":17755},[425,52833,52540],{"class":701},[425,52835,52555],{"class":52055},[425,52837,52062],{"class":701},[425,52839,52840],{"class":427,"line":17760},[425,52841,3400],{"emptyLinePlaceholder":1084},[425,52843,52844,52846,52848],{"class":427,"line":17766},[425,52845,52540],{"class":701},[425,52847,51390],{"class":52055},[425,52849,52062],{"class":701},[14,52851,52853],{"id":52852},"_284-冒泡排序","2.8.4 冒泡排序",[416,52855,52857],{"className":51388,"code":52856,"language":51390,"meta":395,"style":395},"\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",[422,52858,52859,52869,52883,52887,52895,52910,52930,52942,52950,52954,52962,52970,53002,53035,53072,53077,53096,53101,53114,53129,53145,53149,53154,53158,53168,53177,53185,53189],{"__ignoreMap":395},[425,52860,52861,52863,52865,52867],{"class":427,"line":428},[425,52862,52052],{"class":701},[425,52864,52056],{"class":52055},[425,52866,52059],{"class":431},[425,52868,52062],{"class":701},[425,52870,52871,52873,52875,52877,52879,52881],{"class":427,"line":698},[425,52872,2057],{"class":701},[425,52874,51390],{"class":52055},[425,52876,52071],{"class":431},[425,52878,1204],{"class":701},[425,52880,52076],{"class":435},[425,52882,52062],{"class":701},[425,52884,52885],{"class":427,"line":710},[425,52886,3400],{"emptyLinePlaceholder":1084},[425,52888,52889,52891,52893],{"class":427,"line":721},[425,52890,2057],{"class":701},[425,52892,52089],{"class":52055},[425,52894,52062],{"class":701},[425,52896,52897,52900,52902,52904,52906,52908],{"class":427,"line":735},[425,52898,52899],{"class":701},"  \u003C",[425,52901,52099],{"class":52055},[425,52903,52102],{"class":431},[425,52905,1204],{"class":701},[425,52907,52107],{"class":435},[425,52909,52062],{"class":701},[425,52911,52912,52914,52916,52918,52920,52922,52924,52926,52928],{"class":427,"line":743},[425,52913,52899],{"class":701},[425,52915,52099],{"class":52055},[425,52917,15917],{"class":431},[425,52919,1204],{"class":701},[425,52921,52146],{"class":435},[425,52923,52126],{"class":431},[425,52925,1204],{"class":701},[425,52927,52153],{"class":435},[425,52929,52062],{"class":701},[425,52931,52932,52934,52936,52938,52940],{"class":427,"line":751},[425,52933,52899],{"class":701},[425,52935,52162],{"class":52055},[425,52937,52165],{"class":701},[425,52939,52162],{"class":52055},[425,52941,52062],{"class":701},[425,52943,52944,52946,52948],{"class":427,"line":759},[425,52945,52540],{"class":701},[425,52947,52089],{"class":52055},[425,52949,52062],{"class":701},[425,52951,52952],{"class":427,"line":770},[425,52953,3400],{"emptyLinePlaceholder":1084},[425,52955,52956,52958,52960],{"class":427,"line":780},[425,52957,2057],{"class":701},[425,52959,52555],{"class":52055},[425,52961,52062],{"class":701},[425,52963,52964,52966,52968],{"class":427,"line":790},[425,52965,52899],{"class":701},[425,52967,52568],{"class":52055},[425,52969,52062],{"class":701},[425,52971,52972,52975,52977,52979,52982,52984,52986,52988,52990,52992,52994,52996,52998,53000],{"class":427,"line":805},[425,52973,52974],{"class":1155},"    let",[425,52976,52588],{"class":701},[425,52978,1204],{"class":1155},[425,52980,52981],{"class":701}," [",[425,52983,1468],{"class":691},[425,52985,13434],{"class":701},[425,52987,1442],{"class":691},[425,52989,13434],{"class":701},[425,52991,1229],{"class":691},[425,52993,13434],{"class":701},[425,52995,1235],{"class":691},[425,52997,13434],{"class":701},[425,52999,1367],{"class":691},[425,53001,34001],{"class":701},[425,53003,53004,53006,53008,53010,53012,53014,53016,53018,53020,53022,53024,53027,53029,53031,53033],{"class":427,"line":818},[425,53005,4201],{"class":1155},[425,53007,2664],{"class":701},[425,53009,52602],{"class":1155},[425,53011,10437],{"class":701},[425,53013,1204],{"class":1155},[425,53015,5093],{"class":691},[425,53017,10444],{"class":701},[425,53019,2057],{"class":1155},[425,53021,52720],{"class":701},[425,53023,52723],{"class":691},[425,53025,53026],{"class":1155}," -",[425,53028,26109],{"class":691},[425,53030,4214],{"class":701},[425,53032,3292],{"class":1155},[425,53034,13441],{"class":701},[425,53036,53037,53040,53042,53044,53046,53048,53050,53052,53054,53056,53058,53060,53062,53064,53066,53068,53070],{"class":427,"line":831},[425,53038,53039],{"class":1155},"      for",[425,53041,2664],{"class":701},[425,53043,52602],{"class":1155},[425,53045,10499],{"class":701},[425,53047,1204],{"class":1155},[425,53049,5093],{"class":691},[425,53051,10506],{"class":701},[425,53053,2057],{"class":1155},[425,53055,52720],{"class":701},[425,53057,52723],{"class":691},[425,53059,53026],{"class":1155},[425,53061,10437],{"class":701},[425,53063,1680],{"class":1155},[425,53065,26109],{"class":691},[425,53067,10513],{"class":701},[425,53069,3292],{"class":1155},[425,53071,13441],{"class":701},[425,53073,53074],{"class":427,"line":841},[425,53075,53076],{"class":1216},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[425,53078,53079,53081,53084,53086,53089,53091,53093],{"class":427,"line":852},[425,53080,3497],{"class":1155},[425,53082,53083],{"class":701}," (arr[j] ",[425,53085,2107],{"class":1155},[425,53087,53088],{"class":701}," arr[j ",[425,53090,1629],{"class":1155},[425,53092,26109],{"class":691},[425,53094,53095],{"class":701},"]) {\n",[425,53097,53098],{"class":427,"line":862},[425,53099,53100],{"class":1216},"          \u002F\u002F 交换两个变量\n",[425,53102,53103,53106,53109,53111],{"class":427,"line":878},[425,53104,53105],{"class":1155},"          let",[425,53107,53108],{"class":701}," tmp ",[425,53110,1204],{"class":1155},[425,53112,53113],{"class":701}," arr[j]\n",[425,53115,53116,53119,53121,53123,53125,53127],{"class":427,"line":914},[425,53117,53118],{"class":701},"          arr[j] ",[425,53120,1204],{"class":1155},[425,53122,53088],{"class":701},[425,53124,1629],{"class":1155},[425,53126,26109],{"class":691},[425,53128,34001],{"class":701},[425,53130,53131,53134,53136,53138,53140,53142],{"class":427,"line":943},[425,53132,53133],{"class":701},"          arr[j ",[425,53135,1629],{"class":1155},[425,53137,26109],{"class":691},[425,53139,5443],{"class":701},[425,53141,1204],{"class":1155},[425,53143,53144],{"class":701}," tmp\n",[425,53146,53147],{"class":427,"line":956},[425,53148,3529],{"class":701},[425,53150,53151],{"class":427,"line":964},[425,53152,53153],{"class":701},"      }\n",[425,53155,53156],{"class":427,"line":2733},[425,53157,3187],{"class":701},[425,53159,53160,53163,53165],{"class":427,"line":2750},[425,53161,53162],{"class":701},"    document.",[425,53164,52683],{"class":431},[425,53166,53167],{"class":701},"(arr)\n",[425,53169,53170,53173,53175],{"class":427,"line":2755},[425,53171,53172],{"class":701},"  \u003C\u002F",[425,53174,52568],{"class":52055},[425,53176,52062],{"class":701},[425,53178,53179,53181,53183],{"class":427,"line":2760},[425,53180,52540],{"class":701},[425,53182,52555],{"class":52055},[425,53184,52062],{"class":701},[425,53186,53187],{"class":427,"line":2765},[425,53188,3400],{"emptyLinePlaceholder":1084},[425,53190,53191,53193,53195],{"class":427,"line":2779},[425,53192,52540],{"class":701},[425,53194,51390],{"class":52055},[425,53196,52062],{"class":701},[19,53198,53199],{},[393,53200],{"alt":395,"src":53201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,53203,53204],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,53206,53207],{},"let arr = [4, 2, 5, 1, 3]",[19,53209,53210],{},"\u002F\u002F 1.升序排列写法",[19,53212,53213],{},"arr.sort(function (a, b) {",[19,53215,53216],{},"return a - b",[19,53218,53219],{},"})",[19,53221,53222],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,53224,53225],{},"\u002F\u002F 降序排列写法",[19,53227,53213],{},[19,53229,53230],{},"return b - a",[19,53232,53219],{},[19,53234,53235],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[1099,53237,53239],{"id":53238},"_29-函数","2.9 函数",[19,53241,53242],{},[393,53243],{"alt":395,"src":53244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,53246,53247],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,53249,53250],{},"函数的声明用function",[19,53252,53253],{},"函数里边可以嵌套函数",[14,53255,53257],{"id":53256},"_291-函数传参","2.9.1 函数传参",[19,53259,53260],{},[393,53261],{"alt":395,"src":53262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,53264,53265],{},[393,53266],{"alt":395,"src":53267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[447,53269,53270,53273,53276,53279,53282,53285],{},[450,53271,53272],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[450,53274,53275],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[450,53277,53278],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[450,53280,53281],{},"开发中尽量保持形参和实参个数一致",[450,53283,53284],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[450,53286,53287],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,53289,53290],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[14,53292,53294],{"id":53293},"_292-函数的返回值","2.9.2 函数的返回值",[19,53296,53297],{},[393,53298],{"alt":395,"src":53299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,53301,53302],{},[393,53303],{"alt":395,"src":53304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[447,53306,53307,53310,53313,53316,53319],{},[450,53308,53309],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[450,53311,53312],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[450,53314,53315],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[450,53317,53318],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[450,53320,53321],{},"断点调试:进入函数内部看执行过程F11",[14,53323,53325],{"id":53324},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[416,53327,53329],{"className":51388,"code":53328,"language":51390,"meta":395,"style":395},"    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",[422,53330,53331,53336,53341,53345,53350],{"__ignoreMap":395},[425,53332,53333],{"class":427,"line":428},[425,53334,53335],{"class":701},"    function fn(a, b) {\n",[425,53337,53338],{"class":427,"line":698},[425,53339,53340],{"class":701},"      console.log(a + b);\n",[425,53342,53343],{"class":427,"line":710},[425,53344,3187],{"class":701},[425,53346,53347],{"class":427,"line":721},[425,53348,53349],{"class":701},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[425,53351,53352],{"class":427,"line":735},[425,53353,53354],{"class":701},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[14,53356,53358],{"id":53357},"_294-作用域","2.9.4 作用域",[447,53360,53361,53367,53372,53375,53378],{},[450,53362,53363,53364],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[400,53365,53366],{},"作用域",[450,53368,53369],{},[400,53370,53371],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[450,53373,53374],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[450,53376,53377],{},"函数内部可以直接所使用全局变量",[450,53379,53380],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,53382,15630],{},[416,53384,53386],{"className":51388,"code":53385,"language":51390,"meta":395,"style":395},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[422,53387,53388,53393,53398,53402,53407,53412,53417],{"__ignoreMap":395},[425,53389,53390],{"class":427,"line":428},[425,53391,53392],{"class":701},"    function fun() {\n",[425,53394,53395],{"class":427,"line":698},[425,53396,53397],{"class":701},"      num = 10\n",[425,53399,53400],{"class":427,"line":710},[425,53401,3187],{"class":701},[425,53403,53404],{"class":427,"line":721},[425,53405,53406],{"class":701},"    fun()\n",[425,53408,53409],{"class":427,"line":735},[425,53410,53411],{"class":701},"    console.log(num)\n",[425,53413,53414],{"class":427,"line":743},[425,53415,53416],{"class":701},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[425,53418,53419],{"class":427,"line":751},[425,53420,53421],{"class":701},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[447,53423,53424,53427],{},[450,53425,53426],{},"函数内部的形参可以看做是局部变量",[450,53428,53429],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,53431,53432,53433],{},"变量访问原则： ",[400,53434,53435],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[14,53437,53439],{"id":53438},"_295-匿名函数","2.9.5 匿名函数",[19,53441,53442],{},"函数可以分为具名函数和匿名函数",[19,53444,53445],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[972,53447,53448],{},[450,53449,53450],{},"函数表达式",[19,53452,53453],{},[393,53454],{"alt":395,"src":53455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,53457,53458],{},"里边也可以写参数",[19,53460,53461],{},"具名函数调用位置可以随意调整；",[19,53463,53464],{},"匿名函数函数表达式形式只能在声明后才可以使用",[972,53466,53467],{"start":698},[450,53468,53469],{},"立即执行函数",[19,53471,53472],{},[393,53473],{"alt":395,"src":53474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,53476,53477],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,53479,53480],{},"写法：两个小括号，然后在第一个小括号中写function",[19,53482,53483],{},"(function () {})();",[19,53485,53486],{},"不要落下最后的;",[19,53488,53489],{},"立即执行函数必须要加;",[19,53491,53492],{},"分号写前写后都没问题",[19,53494,53495],{},"写前：",[19,53497,53498],{},"(function() {})()",[19,53500,53501],{},";(function () {})();",[19,53503,53504],{},"写后:",[19,53506,53507],{},"(function() {})();",[19,53509,53483],{},[19,53511,53512],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,53514,53515],{},"还有一种写法：",[19,53517,53518],{},"(function(){}());",[19,53520,53521],{},"或者:",[19,53523,53524],{},"!function(){}();",[19,53526,53527],{},"立即执行函数有时候也是可以加名字的：",[19,53529,53530],{},"(function flexible(window,document) {}(window,document));",[19,53532,53533],{},"省一些调用方法",[14,53535,53537],{"id":53536},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,53539,53540],{},[393,53541],{"alt":395,"src":53542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,53544,53545],{},"这样就不用非得给x,y初始化了",[19,53547,53548],{},[393,53549],{"alt":395,"src":53550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,53552,53553],{},"代码执行时先看左边",[19,53555,53556],{},"例如：console.log(false && 3+5)",[19,53558,53559],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,53561,53562],{},"&&都是真时，就返回最后一个真值",[19,53564,53565],{},"console.log(11 && 22)",[19,53567,53568],{},"输出22",[19,53570,53571],{},"逻辑与：遇真则真",[19,53573,15630],{},[19,53575,53576],{},"let age=1",[19,53578,53579],{},"console.log(11 || age++)",[19,53581,53582],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,53584,53585],{},"console.log(11 || 22)",[19,53587,53588],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,53590,53591],{},"||如果都是假的话，就取最后一个假的值了",[14,53593,53595],{"id":53594},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,53597,53598],{},"显示转换：",[19,53600,53601,53604,53605],{},[400,53602,53603],{},"记忆","： ",[400,53606,53607],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,53609,53610],{},"空字符串为假，其他字符串全为真",[19,53612,53613],{},[393,53614],{"alt":395,"src":53615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,53617,53618],{},"隐式转换：",[19,53620,53621],{},[393,53622],{"alt":395,"src":53623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,53625,53626],{},"隐式转换:",[19,53628,53629],{},"null+3=3",[19,53631,53632],{},"undefined+3=NaN",[19,53634,53635],{},"null==undefined 输出true,他两个都当0看",[19,53637,53638],{},"null===undefined 输出false",[19,53640,53641],{},"undefined做任何操作都是NaN",[19,53643,53644],{},"NaN不等于NaN，NaN表示计算错误",[1099,53646,53648],{"id":53647},"_210-对象","2.10 对象",[14,53650,53652],{"id":53651},"_2101-对象的介绍","2.10.1 对象的介绍",[19,53654,53655],{},"对象也是一种数据类型，里边的数据是无序的",[19,53657,53658],{},"对象由属性和方法组成",[19,53660,53661],{},[393,53662],{"alt":395,"src":53663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,53665,53666],{},[393,53667],{"alt":395,"src":53668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,53670,53671],{},[393,53672],{"alt":395,"src":53673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[14,53675,53677],{"id":53676},"_2102-对象属性","2.10.2 对象属性",[19,53679,53680],{},[393,53681],{"alt":395,"src":53682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[972,53684,53685],{},[450,53686,53687],{},"查询对象",[19,53689,53690],{},"对象名.属性 goods.uname",[19,53692,53693],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,53695,53696],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,53698,53699],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,53701,53702],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[972,53704,53705],{"start":698},[450,53706,53707],{},"重新赋值",[19,53709,53710],{},"对象名.属性=新值",[972,53712,53713],{"start":710},[450,53714,53715],{},"增加新数据",[19,53717,53710],{},[972,53719,53720],{"start":721},[450,53721,53722],{},"删除对象中的属性",[19,53724,53725],{},"delete 对象名.属性",[14,53727,53729],{"id":53728},"_2103-对象方法","2.10.3 对象方法",[19,53731,53732],{},[393,53733],{"alt":395,"src":53734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,53736,53737],{},"后边跟的是匿名函数",[19,53739,53740],{},"对象外面的叫函数；对象内部的叫方法",[19,53742,53743],{},[393,53744],{"alt":395,"src":53745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[14,53747,53749],{"id":53748},"_2104-遍历对象","2.10.4 遍历对象",[19,53751,53752],{},"理解为加括号的python字典遍历",[19,53754,53755],{},[393,53756],{"alt":395,"src":53757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,53759,53760],{},"k是字符串类型",[19,53762,53763],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[416,53765,53767],{"className":51388,"code":53766,"language":51390,"meta":395,"style":395},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[422,53768,53769,53774,53779,53784,53789],{"__ignoreMap":395},[425,53770,53771],{"class":427,"line":428},[425,53772,53773],{"class":701},"   let arr = [1, 2, 3]\n",[425,53775,53776],{"class":427,"line":698},[425,53777,53778],{"class":701},"    for (let k in arr) {\n",[425,53780,53781],{"class":427,"line":710},[425,53782,53783],{"class":701},"      console.log(k)\n",[425,53785,53786],{"class":427,"line":721},[425,53787,53788],{"class":701},"      console.log(arr[k])\n",[425,53790,53791],{"class":427,"line":735},[425,53792,3187],{"class":701},[19,53794,53795],{},[393,53796],{"alt":395,"src":53797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,53799,53800],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,53802,53803],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,53805,53806],{},"for in 得到的k是属性名",[52568,53808,53809],{},"\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,53811,53812],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[14,53814,53816],{"id":53815},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,53818,53819],{},"数组中放对象信息",[416,53821,53825],{"className":53822,"code":53823,"language":53824,"meta":395,"style":395},"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",[422,53826,53827,53835,53840,53845,53850,53855,53860,53865,53870,53875,53880,53885,53890,53894,53898],{"__ignoreMap":395},[425,53828,53829,53831,53833],{"class":427,"line":428},[425,53830,2057],{"class":701},[425,53832,52568],{"class":52055},[425,53834,52062],{"class":701},[425,53836,53837],{"class":427,"line":698},[425,53838,53839],{"class":701},"    let students = [\n",[425,53841,53842],{"class":427,"line":710},[425,53843,53844],{"class":701},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[425,53846,53847],{"class":427,"line":721},[425,53848,53849],{"class":701},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[425,53851,53852],{"class":427,"line":735},[425,53853,53854],{"class":701},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[425,53856,53857],{"class":427,"line":743},[425,53858,53859],{"class":701},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[425,53861,53862],{"class":427,"line":751},[425,53863,53864],{"class":701},"    ]\n",[425,53866,53867],{"class":427,"line":759},[425,53868,53869],{"class":701},"    for (let i = 0; i \u003C students.length; i++) {\n",[425,53871,53872],{"class":427,"line":770},[425,53873,53874],{"class":701},"      for (let k in students[i]) {\n",[425,53876,53877],{"class":427,"line":780},[425,53878,53879],{"class":701},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[425,53881,53882],{"class":427,"line":790},[425,53883,53884],{"class":701},"        \u002F\u002F输出每个人的名字：\n",[425,53886,53887],{"class":427,"line":805},[425,53888,53889],{"class":701},"        \u002F\u002Fconsole.log(students[i].name)\n",[425,53891,53892],{"class":427,"line":818},[425,53893,53153],{"class":701},[425,53895,53896],{"class":427,"line":831},[425,53897,3187],{"class":701},[425,53899,53900,53902,53904],{"class":427,"line":841},[425,53901,53172],{"class":701},[425,53903,52568],{"class":52055},[425,53905,52062],{"class":701},[14,53907,53909],{"id":53908},"_2106-内置对象","2.10.6 内置对象",[19,53911,53912],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[972,53914,53915],{},[450,53916,53917],{},"数学对象Math",[19,53919,53920],{},[393,53921],{"alt":395,"src":53922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,53924,53925],{},[22,53926,53929],{"href":53927,"rel":53928},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[26],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,53931,53932],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,53934,53935],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,53937,53938],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,53940,53941],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,53943,53944],{},"null属于对象数据类型",[972,53946,53947],{"start":698},[450,53948,53949],{},"生成任意范围随机数",[19,53951,53952],{},[393,53953],{"alt":395,"src":53954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,53956,53957],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,53959,53960],{},"乘以几就取不到几",[19,53962,53963],{},"取数组中的随机元素：",[19,53965,53966],{},"let arr = ['red', 'green', 'blue']",[19,53968,53969],{},"let random = Math.floor(Math.random() * arr.length)",[19,53971,53972],{},"console.log(arr[random])",[19,53974,53975],{},"这个函数得到的是全闭区间",[19,53977,53978],{},"function getRandom(N, M) {",[19,53980,53981],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,53983,2093],{},[19,53985,53986],{},"console.log(getRandom(4, 8))",[14,53988,53990],{"id":53989},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,53992,53993],{},[393,53994],{"alt":395,"src":53995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,53997,53998],{},[393,53999],{"alt":395,"src":54000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,54002,54003],{},[393,54004],{"alt":395,"src":54005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,54007,54008],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,54010,54011],{},[393,54012],{"alt":395,"src":54013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,54015,54016],{},[393,54017],{"alt":395,"src":54018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,54020,54021],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,54023,54024],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,54026,54027],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[1074,54029,54030],{},"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":395,"searchDepth":698,"depth":698,"links":54032},[54033,54041,54042,54043,54044,54045,54052,54056,54062,54071],{"id":51223,"depth":698,"text":51224,"children":54034},[54035,54036,54037,54038,54039,54040],{"id":51227,"depth":710,"text":51228},{"id":51244,"depth":710,"text":51245},{"id":51284,"depth":710,"text":51285},{"id":51296,"depth":710,"text":51297},{"id":51305,"depth":710,"text":51306},{"id":51353,"depth":710,"text":51354},{"id":51363,"depth":698,"text":51364},{"id":51451,"depth":698,"text":51452},{"id":51474,"depth":698,"text":51475},{"id":51486,"depth":698,"text":51487},{"id":51673,"depth":698,"text":51674,"children":54046},[54047,54048,54049,54050,54051],{"id":51677,"depth":710,"text":51678},{"id":51686,"depth":710,"text":51687},{"id":51714,"depth":710,"text":51715},{"id":51750,"depth":710,"text":51751},{"id":51775,"depth":710,"text":51776},{"id":51787,"depth":698,"text":51788,"children":54053},[54054,54055],{"id":51808,"depth":710,"text":51809},{"id":51902,"depth":710,"text":51903},{"id":51960,"depth":698,"text":51961,"children":54057},[54058,54059,54060,54061],{"id":51964,"depth":710,"text":51965},{"id":51988,"depth":710,"text":51989},{"id":52041,"depth":710,"text":52042},{"id":52852,"depth":710,"text":52853},{"id":53238,"depth":698,"text":53239,"children":54063},[54064,54065,54066,54067,54068,54069,54070],{"id":53256,"depth":710,"text":53257},{"id":53293,"depth":710,"text":53294},{"id":53324,"depth":710,"text":53325},{"id":53357,"depth":710,"text":53358},{"id":53438,"depth":710,"text":53439},{"id":53536,"depth":710,"text":53537},{"id":53594,"depth":710,"text":53595},{"id":53647,"depth":698,"text":53648,"children":54072},[54073,54074,54075,54076,54077,54078,54079],{"id":53651,"depth":710,"text":53652},{"id":53676,"depth":710,"text":53677},{"id":53728,"depth":710,"text":53729},{"id":53748,"depth":710,"text":53749},{"id":53815,"depth":710,"text":53816},{"id":53908,"depth":710,"text":53909},{"id":53989,"depth":710,"text":53990},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":51215,"description":24374},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":54086,"title":54087,"body":54088,"description":24374,"extension":1082,"meta":77428,"navigation":1084,"path":77429,"seo":77430,"stem":77431,"__hash__":77432},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":54089,"toc":77368},[54090,54093,54096,54099,54104,54107,54110,54113,54117,54121,54127,54132,54140,54147,54150,54154,54159,54164,54169,54172,54175,54186,54189,54193,54196,54199,54204,54209,54214,54217,54220,54312,54315,54320,54323,54328,54331,54334,54339,54342,54347,54351,54354,54368,54372,54377,54380,54383,54387,54392,54395,54399,54403,54408,54412,54417,54420,54423,54426,54429,54432,54435,54440,54445,54473,54476,54479,54482,54487,54490,54493,54496,54499,54503,54532,54536,54541,54546,54549,54552,54555,54560,54675,54680,54685,54846,54851,54854,54858,54863,54868,54871,54874,54877,54880,54883,54886,54889,54892,54895,54898,54901,54904,54907,54910,54912,54915,54918,54921,54926,54930,55327,55330,55336,55340,55345,56627,56632,56635,56638,56641,56646,57842,57846,57852,57857,57860,57865,57870,57874,57878,57883,57886,57891,57894,57897,57901,58809,58812,58816,59037,59040,59043,59046,59272,59275,59499,59502,59506,59511,59514,59517,59745,59748,59781,59784,59788,59793,59797,59800,59803,59806,59809,59812,59815,59818,59823,61103,61107,61110,62203,62207,62210,62213,62216,62219,62223,62226,62229,62231,62239,63720,63724,63727,63730,63733,63942,63945,63949,63953,63958,63963,63966,63969,63974,63978,63983,63986,64095,64099,64104,64109,64112,64115,64119,64124,64129,64134,64137,64140,64151,64154,64159,64164,64167,64170,64243,64247,64252,64255,64257,64268,64272,64277,65603,65606,65609,65612,65614,65617,65620,65623,65626,65629,65632,65635,65638,65641,65644,65647,65650,65652,65654,65657,65661,66755,66758,66761,66777,66791,66794,66799,66805,66810,66814,66818,66823,66827,66832,67274,67279,67282,67286,67291,67294,67297,67301,67306,67310,67315,67320,67324,67329,67334,67337,67342,67347,67351,67356,67361,67465,67468,67472,67477,67843,67846,67849,67852,67855,67858,67861,67864,67867,69163,69167,69172,69177,69180,69183,69186,69189,69191,69196,69201,69204,69208,69213,69218,69223,69226,69229,69232,69235,69238,69243,69246,69250,69255,69260,69264,69269,69272,69277,69280,69283,69286,69289,69292,69297,69300,69303,69306,69309,69313,69318,69321,69325,69330,69333,69336,69340,69369,69372,69376,69380,69385,69389,69394,69397,69400,69403,69406,69409,69412,69415,69418,69421,69424,69427,69430,69433,69436,69440,69445,69450,69453,69457,69461,69466,69469,69473,69476,69479,69484,69489,69494,69499,69504,69507,69510,69515,69520,69524,69529,69532,69537,69540,69543,69546,69549,69554,69557,69566,69570,69575,69578,69581,69585,69588,69593,69597,69600,69606,69612,69616,69642,69645,71206,71209,71705,71708,71713,71718,71723,71727,71732,71737,71742,71746,71751,71754,71757,71760,71763,71767,71770,71775,71778,71783,71787,71792,71795,71800,71805,71810,71813,71816,71821,71826,71829,71832,71836,71839,71844,71847,71852,71855,71860,71865,71870,71873,71878,71943,71946,71957,71961,71966,72138,72142,72147,72150,72153,72156,72160,72171,72175,72178,72183,72188,72191,72194,72197,72200,72203,72205,72208,72211,72214,72219,72222,72227,72230,72234,72237,72240,72254,72258,72261,72316,72321,72324,72327,72332,72335,72339,72344,72474,72478,72483,72488,72569,72574,72578,72581,72586,72591,72597,72600,72603,72606,72610,72615,72618,72629,72633,72650,75697,75701,75704,75707,75710,75731,75735,75738,75746,75749,75754,75757,75760,75765,75770,75774,75795,75799,75804,75807,75810,75813,75816,75820,75825,75828,75832,75837,75840,75845,75848,75853,75856,75861,77064,77068,77073,77076,77081,77365],[10,54091,54087],{"id":54092},"_3web-apis",[19,54094,54095],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,54097,54098],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,54100,54101],{},[393,54102],{"alt":395,"src":54103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,54105,54106],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,54108,54109],{},"建议数组和对象使用 const 来声明",[19,54111,54112],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[1099,54114,54116],{"id":54115},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[14,54118,54120],{"id":54119},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,54122,54123,54126],{},[422,54124,54125],{},"document"," = HTML 文件解析后的对象化表示；",[19,54128,54129,54131],{},[422,54130,54125],{}," ≠ HTML 文件本身",[19,54133,54134,54139],{},[400,54135,54136],{},[422,54137,54138],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,54141,54142,54146],{},[400,54143,54144],{},[422,54145,54125],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,54148,54149],{},"document实际上为window.document的简写",[14,54151,54153],{"id":54152},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,54155,54156],{},[393,54157],{"alt":395,"src":54158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,54160,54161],{},[393,54162],{"alt":395,"src":54163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,54165,54166],{},[393,54167],{"alt":395,"src":54168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,54170,54171],{},"console.dir()",[19,54173,54174],{},"dir用来打印对象",[447,54176,54177,54180,54183],{},[450,54178,54179],{},"任何一个标签，都是一个对象",[450,54181,54182],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[450,54184,54185],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,54187,54188],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[14,54190,54192],{"id":54191},"_312-获取dom对象","3.1.2 获取DoM对象",[19,54194,54195],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,54197,54198],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,54200,54201],{},[400,54202,54203],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[972,54205,54206],{},[450,54207,54208],{},"利用CSS选择器来获取标签元素",[19,54210,54211],{},[393,54212],{"alt":395,"src":54213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,54215,54216],{},"里边的选择器必须必须加引号！！！",[19,54218,54219],{},"只选择第一个元素",[416,54221,54223],{"className":53822,"code":54222,"language":53824,"meta":395,"style":395},"\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",[422,54224,54225,54233,54254,54273,54281,54286,54291,54296,54304],{"__ignoreMap":395},[425,54226,54227,54229,54231],{"class":427,"line":428},[425,54228,2057],{"class":701},[425,54230,52555],{"class":52055},[425,54232,52062],{"class":701},[425,54234,54235,54237,54239,54242,54244,54247,54250,54252],{"class":427,"line":698},[425,54236,52899],{"class":701},[425,54238,52366],{"class":52055},[425,54240,54241],{"class":431}," class",[425,54243,1204],{"class":701},[425,54245,54246],{"class":435},"\"box\"",[425,54248,54249],{"class":701},">123\u003C\u002F",[425,54251,52366],{"class":52055},[425,54253,52062],{"class":701},[425,54255,54256,54258,54260,54262,54264,54266,54269,54271],{"class":427,"line":710},[425,54257,52899],{"class":701},[425,54259,52366],{"class":52055},[425,54261,54241],{"class":431},[425,54263,1204],{"class":701},[425,54265,54246],{"class":435},[425,54267,54268],{"class":701},">456\u003C\u002F",[425,54270,52366],{"class":52055},[425,54272,52062],{"class":701},[425,54274,54275,54277,54279],{"class":427,"line":721},[425,54276,52899],{"class":701},[425,54278,52568],{"class":52055},[425,54280,52062],{"class":701},[425,54282,54283],{"class":427,"line":735},[425,54284,54285],{"class":701},"    \u002F\u002F 1.获取匹配的第一个元素\n",[425,54287,54288],{"class":427,"line":743},[425,54289,54290],{"class":701},"    const box = document.querySelector('div')\n",[425,54292,54293],{"class":427,"line":751},[425,54294,54295],{"class":701},"    console.dir(box)\n",[425,54297,54298,54300,54302],{"class":427,"line":759},[425,54299,53172],{"class":701},[425,54301,52568],{"class":52055},[425,54303,52062],{"class":701},[425,54305,54306,54308,54310],{"class":427,"line":770},[425,54307,52540],{"class":701},[425,54309,52555],{"class":52055},[425,54311,52062],{"class":701},[19,54313,54314],{},"只选123，不选456",[19,54316,54317],{},[393,54318],{"alt":395,"src":54319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,54321,54322],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,54324,54325],{},[393,54326],{"alt":395,"src":54327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,54329,54330],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,54332,54333],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[972,54335,54336],{"start":698},[450,54337,54338],{},"其他方法来获取标签元素",[19,54340,54341],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,54343,54344],{},[393,54345],{"alt":395,"src":54346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[14,54348,54350],{"id":54349},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,54352,54353],{},"设置修改DOM元素内容有两种方式：",[447,54355,54356,54359,54362,54365],{},[450,54357,54358],{},"元素.innerText=''",[450,54360,54361],{},"元素.innerHTML=''",[450,54363,54364],{},"不写字符串输出数字也是可以的",[450,54366,54367],{},"元素.innerHtml=1",[22995,54369,54371],{"id":54370},"_3131-innertext","3.1.3.1 innerText",[19,54373,54374],{},[393,54375],{"alt":395,"src":54376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,54378,54379],{},"思路：实现了修改盒子中的内容！",[19,54381,54382],{},"它只显示纯文本，不解析标签",[22995,54384,54386],{"id":54385},"_3132-innerhtml","3.1.3.2 innerHTML",[19,54388,54389],{},[393,54390],{"alt":395,"src":54391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,54393,54394],{},"相比于innerText，他的强大之处在于可以解析标签",[14,54396,54398],{"id":54397},"_314-操作元素属性","3.1.4 操作元素属性",[22995,54400,54402],{"id":54401},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,54404,54405],{},[393,54406],{"alt":395,"src":54407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22995,54409,54411],{"id":54410},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,54413,54414],{},[393,54415],{"alt":395,"src":54416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,54418,54419],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,54421,54422],{},"div.style.backgroundColor = 'hotpink'",[19,54424,54425],{},"如果按照css的写法，-表示减，就会出错",[19,54427,54428],{},"body元素不需要再获取，直接用就行！！！！！！",[19,54430,54431],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,54433,54434],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,54436,54437],{},[393,54438],{"alt":395,"src":54439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,54441,54442],{},[393,54443],{"alt":395,"src":54444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[972,54446,54447,54450,54453,54456,54459,54462],{},[450,54448,54449],{},"className这个方式就是修改很多样式的时候来使用的！",[450,54451,54452],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[450,54454,54455],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[450,54457,54458],{},"className为属性名，如果还用class的话就导致与关键字冲突",[450,54460,54461],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[450,54463,54464,54465,54470],{},"解析标签的时候就变为了",[52366,54466],{"className":54467},[54468,54469],"nav","box",[54471,54472],"br",{},[19,54474,54475],{},"例子：",[52366,54477],{"className":54478},[54468],[52568,54480,54481],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,54483,54484],{},[393,54485],{"alt":395,"src":54486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,54488,54489],{},"追加和删除类名用classList",[19,54491,54492],{},"常用于类似于开关的操作",[19,54494,54495],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,54497,54498],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22995,54500,54502],{"id":54501},"_3143-牢记点","3.1.4.3 牢记点",[972,54504,54505,54508,54511,54514,54517,54520,54523,54526,54529],{},[450,54506,54507],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[450,54509,54510],{},"使用style属性操作css时不要忘记引号",[450,54512,54513],{},"使用className或者classList时也不要忘记引号",[450,54515,54516],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[450,54518,54519],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[450,54521,54522],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[450,54524,54525],{},"若： let arr=['1','2',3] arr[0]=1",[450,54527,54528],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[450,54530,54531],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[14,54533,54535],{"id":54534},"_315-操作表单元素","3.1.5 操作表单元素",[972,54537,54538],{},[450,54539,54540],{},"天生的属性",[19,54542,54543],{},[393,54544],{"alt":395,"src":54545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,54547,54548],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,54550,54551],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,54553,54554],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,54556,54557],{},[393,54558],{"alt":395,"src":54559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[416,54561,54563],{"className":51388,"code":54562,"language":51390,"meta":395,"style":395},"在复选框中如果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",[422,54564,54565,54570,54602,54607,54612,54617,54622,54626,54631,54636,54653,54665,54670],{"__ignoreMap":395},[425,54566,54567],{"class":427,"line":428},[425,54568,54569],{"class":701},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[425,54571,54572,54574,54577,54580,54582,54585,54587,54589,54591,54593,54595,54597,54600],{"class":427,"line":698},[425,54573,2057],{"class":701},[425,54575,54576],{"class":52055},"input",[425,54578,54579],{"class":431}," type",[425,54581,1204],{"class":701},[425,54583,54584],{"class":435},"\"checkbox\"",[425,54586,15917],{"class":431},[425,54588,1204],{"class":701},[425,54590,8652],{"class":435},[425,54592,15956],{"class":431},[425,54594,1204],{"class":701},[425,54596,8652],{"class":435},[425,54598,54599],{"class":431}," checked",[425,54601,52062],{"class":701},[425,54603,54604],{"class":427,"line":710},[425,54605,54606],{"class":701},"不选的话：\n",[425,54608,54609],{"class":427,"line":721},[425,54610,54611],{"class":701},"const input = document.querySelector('input')\n",[425,54613,54614],{"class":427,"line":735},[425,54615,54616],{"class":701},"input.checked=false\n",[425,54618,54619],{"class":427,"line":743},[425,54620,54621],{"class":701},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[425,54623,54624],{"class":427,"line":751},[425,54625,3400],{"emptyLinePlaceholder":1084},[425,54627,54628],{"class":427,"line":759},[425,54629,54630],{"class":701},"禁用按钮：\n",[425,54632,54633],{"class":427,"line":770},[425,54634,54635],{"class":701},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[425,54637,54638,54640,54643,54646,54649,54651],{"class":427,"line":780},[425,54639,2057],{"class":701},[425,54641,54642],{"class":52055},"button",[425,54644,54645],{"class":431}," disabled",[425,54647,54648],{"class":701},">点击\u003C\u002F",[425,54650,54642],{"class":52055},[425,54652,52062],{"class":701},[425,54654,54655,54657,54659,54661,54663],{"class":427,"line":790},[425,54656,2057],{"class":701},[425,54658,54642],{"class":52055},[425,54660,54648],{"class":701},[425,54662,54642],{"class":52055},[425,54664,52062],{"class":701},[425,54666,54667],{"class":427,"line":805},[425,54668,54669],{"class":701},"const bt = document.querySelector('button')\n",[425,54671,54672],{"class":427,"line":818},[425,54673,54674],{"class":701},"bt.disabled = false\n",[972,54676,54677],{"start":698},[450,54678,54679],{},"自定义属性",[19,54681,54682],{},[393,54683],{"alt":395,"src":54684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[416,54686,54688],{"className":53822,"code":54687,"language":53824,"meta":395,"style":395},"\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",[422,54689,54690,54698,54726,54745,54764,54783,54802,54810,54815,54820,54825,54830,54838],{"__ignoreMap":395},[425,54691,54692,54694,54696],{"class":427,"line":428},[425,54693,2057],{"class":701},[425,54695,52555],{"class":52055},[425,54697,52062],{"class":701},[425,54699,54700,54702,54704,54707,54709,54711,54714,54716,54719,54722,54724],{"class":427,"line":698},[425,54701,52899],{"class":701},[425,54703,52366],{"class":52055},[425,54705,54706],{"class":431}," data-id",[425,54708,1204],{"class":701},[425,54710,4678],{"class":435},[425,54712,54713],{"class":431}," data-spm",[425,54715,1204],{"class":701},[425,54717,54718],{"class":435},"\"我不知道\"",[425,54720,54721],{"class":701},">1\u003C\u002F",[425,54723,52366],{"class":52055},[425,54725,52062],{"class":701},[425,54727,54728,54730,54732,54734,54736,54738,54741,54743],{"class":427,"line":710},[425,54729,52899],{"class":701},[425,54731,52366],{"class":52055},[425,54733,54706],{"class":431},[425,54735,1204],{"class":701},[425,54737,4701],{"class":435},[425,54739,54740],{"class":701},">2\u003C\u002F",[425,54742,52366],{"class":52055},[425,54744,52062],{"class":701},[425,54746,54747,54749,54751,54753,54755,54757,54760,54762],{"class":427,"line":721},[425,54748,52899],{"class":701},[425,54750,52366],{"class":52055},[425,54752,54706],{"class":431},[425,54754,1204],{"class":701},[425,54756,4714],{"class":435},[425,54758,54759],{"class":701},">3\u003C\u002F",[425,54761,52366],{"class":52055},[425,54763,52062],{"class":701},[425,54765,54766,54768,54770,54772,54774,54776,54779,54781],{"class":427,"line":735},[425,54767,52899],{"class":701},[425,54769,52366],{"class":52055},[425,54771,54706],{"class":431},[425,54773,1204],{"class":701},[425,54775,4727],{"class":435},[425,54777,54778],{"class":701},">4\u003C\u002F",[425,54780,52366],{"class":52055},[425,54782,52062],{"class":701},[425,54784,54785,54787,54789,54791,54793,54795,54798,54800],{"class":427,"line":743},[425,54786,52899],{"class":701},[425,54788,52366],{"class":52055},[425,54790,54706],{"class":431},[425,54792,1204],{"class":701},[425,54794,4748],{"class":435},[425,54796,54797],{"class":701},">5\u003C\u002F",[425,54799,52366],{"class":52055},[425,54801,52062],{"class":701},[425,54803,54804,54806,54808],{"class":427,"line":751},[425,54805,52899],{"class":701},[425,54807,52568],{"class":52055},[425,54809,52062],{"class":701},[425,54811,54812],{"class":427,"line":759},[425,54813,54814],{"class":701},"    const one = document.querySelector('div')\n",[425,54816,54817],{"class":427,"line":770},[425,54818,54819],{"class":701},"    console.log(one.dataset)\n",[425,54821,54822],{"class":427,"line":780},[425,54823,54824],{"class":701},"    console.log(one.dataset.id)\n",[425,54826,54827],{"class":427,"line":790},[425,54828,54829],{"class":701},"    console.log(one.dataset.spm)\n",[425,54831,54832,54834,54836],{"class":427,"line":805},[425,54833,53172],{"class":701},[425,54835,52568],{"class":52055},[425,54837,52062],{"class":701},[425,54839,54840,54842,54844],{"class":427,"line":818},[425,54841,52540],{"class":701},[425,54843,52555],{"class":52055},[425,54845,52062],{"class":701},[19,54847,54848],{},[393,54849],{"alt":395,"src":54850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,54852,54853],{},"document.querySelector选择的是第一个对象（元素）",[14,54855,54857],{"id":54856},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,54859,54860],{},[393,54861],{"alt":395,"src":54862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,54864,54865],{},[393,54866],{"alt":395,"src":54867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,54869,54870],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52568,54872,54873],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,54875,54876],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52568,54878,54879],{},"\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,54881,54882],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,54884,54885],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,54887,54888],{},"单位为毫秒！！！",[19,54890,54891],{},"可以搭配匿名函数来用！！！",[19,54893,54894],{},"setInterval(function () {",[19,54896,54897],{},"alert('两秒执行一次')",[19,54899,54900],{},"}, 2000)",[19,54902,54903],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,54905,54906],{},"function fn() {",[19,54908,54909],{},"document.write(1)",[19,54911,2093],{},[19,54913,54914],{},"setInterval(fn, 1000)",[19,54916,54917],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,54919,54920],{},"setInterval('fn()', 1000)",[19,54922,54923],{},[393,54924],{"alt":395,"src":54925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22995,54927,54929],{"id":54928},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[416,54931,54933],{"className":51388,"code":54932,"language":51390,"meta":395,"style":395},"\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",[422,54934,54935,54945,54959,54963,54971,54985,55005,55017,55025,55029,55037,55074,55079,55084,55089,55097,55105,55127,55135,55140,55162,55167,55172,55183,55188,55208,55216,55231,55246,55257,55262,55272,55282,55286,55295,55299,55307,55315,55319],{"__ignoreMap":395},[425,54936,54937,54939,54941,54943],{"class":427,"line":428},[425,54938,52052],{"class":701},[425,54940,52056],{"class":52055},[425,54942,52059],{"class":431},[425,54944,52062],{"class":701},[425,54946,54947,54949,54951,54953,54955,54957],{"class":427,"line":698},[425,54948,2057],{"class":701},[425,54950,51390],{"class":52055},[425,54952,52071],{"class":431},[425,54954,1204],{"class":701},[425,54956,52076],{"class":435},[425,54958,52062],{"class":701},[425,54960,54961],{"class":427,"line":710},[425,54962,3400],{"emptyLinePlaceholder":1084},[425,54964,54965,54967,54969],{"class":427,"line":721},[425,54966,2057],{"class":701},[425,54968,52089],{"class":52055},[425,54970,52062],{"class":701},[425,54972,54973,54975,54977,54979,54981,54983],{"class":427,"line":735},[425,54974,52899],{"class":701},[425,54976,52099],{"class":52055},[425,54978,52102],{"class":431},[425,54980,1204],{"class":701},[425,54982,52107],{"class":435},[425,54984,52062],{"class":701},[425,54986,54987,54989,54991,54993,54995,54997,54999,55001,55003],{"class":427,"line":743},[425,54988,52899],{"class":701},[425,54990,52099],{"class":52055},[425,54992,15917],{"class":431},[425,54994,1204],{"class":701},[425,54996,52146],{"class":435},[425,54998,52126],{"class":431},[425,55000,1204],{"class":701},[425,55002,52153],{"class":435},[425,55004,52062],{"class":701},[425,55006,55007,55009,55011,55013,55015],{"class":427,"line":751},[425,55008,52899],{"class":701},[425,55010,52162],{"class":52055},[425,55012,52165],{"class":701},[425,55014,52162],{"class":52055},[425,55016,52062],{"class":701},[425,55018,55019,55021,55023],{"class":427,"line":759},[425,55020,52540],{"class":701},[425,55022,52089],{"class":52055},[425,55024,52062],{"class":701},[425,55026,55027],{"class":427,"line":770},[425,55028,3400],{"emptyLinePlaceholder":1084},[425,55030,55031,55033,55035],{"class":427,"line":780},[425,55032,2057],{"class":701},[425,55034,52555],{"class":52055},[425,55036,52062],{"class":701},[425,55038,55039,55041,55044,55046,55048,55050,55052,55054,55056,55059,55061,55064,55067,55069,55072],{"class":427,"line":790},[425,55040,52899],{"class":701},[425,55042,55043],{"class":52055},"textarea",[425,55045,15917],{"class":431},[425,55047,1204],{"class":701},[425,55049,8652],{"class":435},[425,55051,15956],{"class":431},[425,55053,1204],{"class":701},[425,55055,8652],{"class":435},[425,55057,55058],{"class":431}," cols",[425,55060,1204],{"class":701},[425,55062,55063],{"class":435},"\"30\"",[425,55065,55066],{"class":431}," rows",[425,55068,1204],{"class":701},[425,55070,55071],{"class":435},"\"10\"",[425,55073,52062],{"class":701},[425,55075,55076],{"class":427,"line":805},[425,55077,55078],{"class":701},"        用户注册协议\n",[425,55080,55081],{"class":427,"line":818},[425,55082,55083],{"class":701},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[425,55085,55086],{"class":427,"line":831},[425,55087,55088],{"class":701},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[425,55090,55091,55093,55095],{"class":427,"line":841},[425,55092,52531],{"class":701},[425,55094,55043],{"class":52055},[425,55096,52062],{"class":701},[425,55098,55099,55101,55103],{"class":427,"line":852},[425,55100,52899],{"class":701},[425,55102,54471],{"class":52055},[425,55104,52062],{"class":701},[425,55106,55107,55109,55111,55113,55115,55118,55120,55123,55125],{"class":427,"line":862},[425,55108,52899],{"class":701},[425,55110,54642],{"class":52055},[425,55112,54241],{"class":431},[425,55114,1204],{"class":701},[425,55116,55117],{"class":435},"\"btn\"",[425,55119,54645],{"class":431},[425,55121,55122],{"class":701},">我已经阅读用户协议(5)\u003C\u002F",[425,55124,54642],{"class":52055},[425,55126,52062],{"class":701},[425,55128,55129,55131,55133],{"class":427,"line":878},[425,55130,52899],{"class":701},[425,55132,52568],{"class":52055},[425,55134,52062],{"class":701},[425,55136,55137],{"class":427,"line":914},[425,55138,55139],{"class":1216},"    \u002F\u002F 1. 获取元素\n",[425,55141,55142,55144,55147,55149,55152,55155,55157,55160],{"class":427,"line":943},[425,55143,12220],{"class":1155},[425,55145,55146],{"class":691}," btn",[425,55148,14563],{"class":1155},[425,55150,55151],{"class":701}," document.",[425,55153,55154],{"class":431},"querySelector",[425,55156,1159],{"class":701},[425,55158,55159],{"class":435},"'.btn'",[425,55161,1165],{"class":701},[425,55163,55164],{"class":427,"line":956},[425,55165,55166],{"class":1216},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[425,55168,55169],{"class":427,"line":964},[425,55170,55171],{"class":1216},"    \u002F\u002F 2. 倒计时\n",[425,55173,55174,55176,55178,55180],{"class":427,"line":2733},[425,55175,52974],{"class":1155},[425,55177,10437],{"class":701},[425,55179,1204],{"class":1155},[425,55181,55182],{"class":691}," 5\n",[425,55184,55185],{"class":427,"line":2750},[425,55186,55187],{"class":1216},"    \u002F\u002F 2.1 开启定时器\n",[425,55189,55190,55192,55195,55197,55200,55202,55205],{"class":427,"line":2755},[425,55191,52974],{"class":1155},[425,55193,55194],{"class":701}," n ",[425,55196,1204],{"class":1155},[425,55198,55199],{"class":431}," setInterval",[425,55201,1159],{"class":701},[425,55203,55204],{"class":1155},"function",[425,55206,55207],{"class":701}," () {\n",[425,55209,55210,55213],{"class":427,"line":2760},[425,55211,55212],{"class":701},"      i",[425,55214,55215],{"class":1155},"--\n",[425,55217,55218,55221,55223,55226,55228],{"class":427,"line":2765},[425,55219,55220],{"class":701},"      btn.innerHTML ",[425,55222,1204],{"class":1155},[425,55224,55225],{"class":435}," `我已经阅读用户协议(${",[425,55227,1589],{"class":701},[425,55229,55230],{"class":435},"})`\n",[425,55232,55233,55236,55239,55242,55244],{"class":427,"line":2779},[425,55234,55235],{"class":1155},"      if",[425,55237,55238],{"class":701}," (i ",[425,55240,55241],{"class":1155},"===",[425,55243,5093],{"class":691},[425,55245,13441],{"class":701},[425,55247,55248,55251,55254],{"class":427,"line":2784},[425,55249,55250],{"class":431},"        clearInterval",[425,55252,55253],{"class":701},"(n)  ",[425,55255,55256],{"class":1216},"\u002F\u002F 关闭定时器\n",[425,55258,55259],{"class":427,"line":3577},[425,55260,55261],{"class":1216},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[425,55263,55264,55267,55269],{"class":427,"line":3591},[425,55265,55266],{"class":701},"        btn.disabled ",[425,55268,1204],{"class":1155},[425,55270,55271],{"class":691}," false\n",[425,55273,55274,55277,55279],{"class":427,"line":3599},[425,55275,55276],{"class":701},"        btn.innerHTML ",[425,55278,1204],{"class":1155},[425,55280,55281],{"class":435}," '同意'\n",[425,55283,55284],{"class":427,"line":3604},[425,55285,53153],{"class":701},[425,55287,55288,55291,55293],{"class":427,"line":3610},[425,55289,55290],{"class":701},"    }, ",[425,55292,7410],{"class":691},[425,55294,1165],{"class":701},[425,55296,55297],{"class":427,"line":3616},[425,55298,3400],{"emptyLinePlaceholder":1084},[425,55300,55301,55303,55305],{"class":427,"line":3621},[425,55302,53172],{"class":701},[425,55304,52568],{"class":52055},[425,55306,52062],{"class":701},[425,55308,55309,55311,55313],{"class":427,"line":8948},[425,55310,52540],{"class":701},[425,55312,52555],{"class":52055},[425,55314,52062],{"class":701},[425,55316,55317],{"class":427,"line":8972},[425,55318,3400],{"emptyLinePlaceholder":1084},[425,55320,55321,55323,55325],{"class":427,"line":8977},[425,55322,52540],{"class":701},[425,55324,51390],{"class":52055},[425,55326,52062],{"class":701},[19,55328,55329],{},"不要一直想着用死循环,避免死循环",[19,55331,55332,55335],{},[422,55333,55334],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22995,55337,55339],{"id":55338},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[972,55341,55342],{},[450,55343,55344],{},"法1",[416,55346,55348],{"className":51388,"code":55347,"language":51390,"meta":395,"style":395},"\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",[422,55349,55350,55360,55374,55378,55386,55400,55420,55432,55440,55446,55457,55468,55472,55476,55483,55495,55499,55503,55510,55522,55536,55549,55563,55567,55571,55578,55589,55600,55611,55623,55635,55647,55651,55655,55663,55673,55686,55698,55711,55715,55719,55726,55736,55748,55760,55771,55782,55792,55804,55816,55820,55824,55833,55845,55857,55885,55898,55902,55906,55913,55924,55928,55936,55944,55948,55956,55970,55985,56009,56017,56032,56045,56053,56074,56086,56098,56110,56122,56134,56146,56158,56167,56175,56183,56191,56203,56226,56245,56264,56283,56302,56321,56340,56360,56364,56384,56403,56423,56444,56455,56472,56482,56492,56502,56507,56512,56517,56522,56547,56560,56564,56587,56591,56599,56607,56615,56619],{"__ignoreMap":395},[425,55351,55352,55354,55356,55358],{"class":427,"line":428},[425,55353,52052],{"class":701},[425,55355,52056],{"class":52055},[425,55357,52059],{"class":431},[425,55359,52062],{"class":701},[425,55361,55362,55364,55366,55368,55370,55372],{"class":427,"line":698},[425,55363,2057],{"class":701},[425,55365,51390],{"class":52055},[425,55367,52071],{"class":431},[425,55369,1204],{"class":701},[425,55371,52076],{"class":435},[425,55373,52062],{"class":701},[425,55375,55376],{"class":427,"line":710},[425,55377,3400],{"emptyLinePlaceholder":1084},[425,55379,55380,55382,55384],{"class":427,"line":721},[425,55381,2057],{"class":701},[425,55383,52089],{"class":52055},[425,55385,52062],{"class":701},[425,55387,55388,55390,55392,55394,55396,55398],{"class":427,"line":735},[425,55389,52899],{"class":701},[425,55391,52099],{"class":52055},[425,55393,52102],{"class":431},[425,55395,1204],{"class":701},[425,55397,52107],{"class":435},[425,55399,52062],{"class":701},[425,55401,55402,55404,55406,55408,55410,55412,55414,55416,55418],{"class":427,"line":743},[425,55403,52899],{"class":701},[425,55405,52099],{"class":52055},[425,55407,15917],{"class":431},[425,55409,1204],{"class":701},[425,55411,52146],{"class":435},[425,55413,52126],{"class":431},[425,55415,1204],{"class":701},[425,55417,52153],{"class":435},[425,55419,52062],{"class":701},[425,55421,55422,55424,55426,55428,55430],{"class":427,"line":751},[425,55423,52899],{"class":701},[425,55425,52162],{"class":52055},[425,55427,52165],{"class":701},[425,55429,52162],{"class":52055},[425,55431,52062],{"class":701},[425,55433,55434,55436,55438],{"class":427,"line":759},[425,55435,52899],{"class":701},[425,55437,1074],{"class":52055},[425,55439,52062],{"class":701},[425,55441,55442,55444],{"class":427,"line":770},[425,55443,7403],{"class":52055},[425,55445,16569],{"class":701},[425,55447,55448,55451,55453,55455],{"class":427,"line":780},[425,55449,55450],{"class":691},"      padding",[425,55452,52192],{"class":701},[425,55454,1341],{"class":691},[425,55456,2307],{"class":701},[425,55458,55459,55462,55464,55466],{"class":427,"line":790},[425,55460,55461],{"class":691},"      margin",[425,55463,52192],{"class":701},[425,55465,1341],{"class":691},[425,55467,2307],{"class":701},[425,55469,55470],{"class":427,"line":805},[425,55471,3187],{"class":701},[425,55473,55474],{"class":427,"line":818},[425,55475,3400],{"emptyLinePlaceholder":1084},[425,55477,55478,55481],{"class":427,"line":831},[425,55479,55480],{"class":52055},"    li",[425,55482,16569],{"class":701},[425,55484,55485,55488,55490,55493],{"class":427,"line":841},[425,55486,55487],{"class":691},"      list-style",[425,55489,52192],{"class":701},[425,55491,55492],{"class":691},"none",[425,55494,2307],{"class":701},[425,55496,55497],{"class":427,"line":852},[425,55498,3187],{"class":701},[425,55500,55501],{"class":427,"line":862},[425,55502,3400],{"emptyLinePlaceholder":1084},[425,55504,55505,55508],{"class":427,"line":878},[425,55506,55507],{"class":431},"    .box",[425,55509,16569],{"class":701},[425,55511,55512,55515,55517,55520],{"class":427,"line":914},[425,55513,55514],{"class":691},"      position",[425,55516,52192],{"class":701},[425,55518,55519],{"class":691},"relative",[425,55521,2307],{"class":701},[425,55523,55524,55527,55529,55532,55534],{"class":427,"line":943},[425,55525,55526],{"class":691},"      width",[425,55528,52192],{"class":701},[425,55530,55531],{"class":691},"976",[425,55533,52247],{"class":1155},[425,55535,2307],{"class":701},[425,55537,55538,55541,55543,55545,55547],{"class":427,"line":956},[425,55539,55540],{"class":691},"      height",[425,55542,52192],{"class":701},[425,55544,2552],{"class":691},[425,55546,52247],{"class":1155},[425,55548,2307],{"class":701},[425,55550,55551,55553,55555,55557,55559,55561],{"class":427,"line":964},[425,55552,55461],{"class":691},[425,55554,52192],{"class":701},[425,55556,1460],{"class":691},[425,55558,52247],{"class":1155},[425,55560,52311],{"class":691},[425,55562,2307],{"class":701},[425,55564,55565],{"class":427,"line":2733},[425,55566,3187],{"class":701},[425,55568,55569],{"class":427,"line":2750},[425,55570,3400],{"emptyLinePlaceholder":1084},[425,55572,55573,55576],{"class":427,"line":2755},[425,55574,55575],{"class":431},"    .slider-footer",[425,55577,16569],{"class":701},[425,55579,55580,55582,55584,55587],{"class":427,"line":2760},[425,55581,55514],{"class":691},[425,55583,52192],{"class":701},[425,55585,55586],{"class":691},"absolute",[425,55588,2307],{"class":701},[425,55590,55591,55594,55596,55598],{"class":427,"line":2765},[425,55592,55593],{"class":691},"      left",[425,55595,52192],{"class":701},[425,55597,1341],{"class":691},[425,55599,2307],{"class":701},[425,55601,55602,55605,55607,55609],{"class":427,"line":2779},[425,55603,55604],{"class":691},"      bottom",[425,55606,52192],{"class":701},[425,55608,1341],{"class":691},[425,55610,2307],{"class":701},[425,55612,55613,55615,55617,55619,55621],{"class":427,"line":2784},[425,55614,55526],{"class":691},[425,55616,52192],{"class":701},[425,55618,1460],{"class":691},[425,55620,1477],{"class":1155},[425,55622,2307],{"class":701},[425,55624,55625,55627,55629,55631,55633],{"class":427,"line":3577},[425,55626,55540],{"class":691},[425,55628,52192],{"class":701},[425,55630,1723],{"class":691},[425,55632,1477],{"class":1155},[425,55634,2307],{"class":701},[425,55636,55637,55640,55642,55645],{"class":427,"line":3591},[425,55638,55639],{"class":691},"      background-color",[425,55641,52192],{"class":701},[425,55643,55644],{"class":691},"skyblue",[425,55646,2307],{"class":701},[425,55648,55649],{"class":427,"line":3599},[425,55650,3187],{"class":701},[425,55652,55653],{"class":427,"line":3604},[425,55654,3400],{"emptyLinePlaceholder":1084},[425,55656,55657,55659,55661],{"class":427,"line":3610},[425,55658,55575],{"class":431},[425,55660,7825],{"class":52055},[425,55662,16569],{"class":701},[425,55664,55665,55667,55669,55671],{"class":427,"line":3616},[425,55666,55514],{"class":691},[425,55668,52192],{"class":701},[425,55670,55586],{"class":691},[425,55672,2307],{"class":701},[425,55674,55675,55678,55680,55682,55684],{"class":427,"line":3621},[425,55676,55677],{"class":691},"      font-size",[425,55679,52192],{"class":701},[425,55681,2048],{"class":691},[425,55683,52247],{"class":1155},[425,55685,2307],{"class":701},[425,55687,55688,55690,55692,55694,55696],{"class":427,"line":8948},[425,55689,55593],{"class":691},[425,55691,52192],{"class":701},[425,55693,1848],{"class":691},[425,55695,52247],{"class":1155},[425,55697,2307],{"class":701},[425,55699,55700,55703,55705,55707,55709],{"class":427,"line":8972},[425,55701,55702],{"class":691},"      top",[425,55704,52192],{"class":701},[425,55706,1468],{"class":691},[425,55708,52247],{"class":1155},[425,55710,2307],{"class":701},[425,55712,55713],{"class":427,"line":8977},[425,55714,3187],{"class":701},[425,55716,55717],{"class":427,"line":8983},[425,55718,3400],{"emptyLinePlaceholder":1084},[425,55720,55721,55724],{"class":427,"line":9010},[425,55722,55723],{"class":52055},"    ul",[425,55725,16569],{"class":701},[425,55727,55728,55730,55732,55734],{"class":427,"line":9015},[425,55729,55514],{"class":691},[425,55731,52192],{"class":701},[425,55733,55586],{"class":691},[425,55735,2307],{"class":701},[425,55737,55738,55740,55742,55744,55746],{"class":427,"line":9021},[425,55739,55702],{"class":691},[425,55741,52192],{"class":701},[425,55743,1929],{"class":691},[425,55745,52247],{"class":1155},[425,55747,2307],{"class":701},[425,55749,55750,55752,55754,55756,55758],{"class":427,"line":9033},[425,55751,55593],{"class":691},[425,55753,52192],{"class":701},[425,55755,1848],{"class":691},[425,55757,52247],{"class":1155},[425,55759,2307],{"class":701},[425,55761,55762,55765,55767,55769],{"class":427,"line":9045},[425,55763,55764],{"class":691},"      display",[425,55766,52192],{"class":701},[425,55768,52232],{"class":691},[425,55770,2307],{"class":701},[425,55772,55773,55776,55778,55780],{"class":427,"line":9057},[425,55774,55775],{"class":691},"      justify-content",[425,55777,52192],{"class":701},[425,55779,52423],{"class":691},[425,55781,2307],{"class":701},[425,55783,55784,55786,55788,55790],{"class":427,"line":10715},[425,55785,55514],{"class":691},[425,55787,52192],{"class":701},[425,55789,55586],{"class":691},[425,55791,2307],{"class":701},[425,55793,55794,55796,55798,55800,55802],{"class":427,"line":10740},[425,55795,55526],{"class":691},[425,55797,52192],{"class":701},[425,55799,4992],{"class":691},[425,55801,52247],{"class":1155},[425,55803,2307],{"class":701},[425,55805,55806,55808,55810,55812,55814],{"class":427,"line":10763},[425,55807,55540],{"class":691},[425,55809,52192],{"class":701},[425,55811,1848],{"class":691},[425,55813,52247],{"class":1155},[425,55815,2307],{"class":701},[425,55817,55818],{"class":427,"line":10787},[425,55819,3187],{"class":701},[425,55821,55822],{"class":427,"line":10792},[425,55823,3400],{"emptyLinePlaceholder":1084},[425,55825,55826,55828,55831],{"class":427,"line":10797},[425,55827,55723],{"class":52055},[425,55829,55830],{"class":52055}," li",[425,55832,16569],{"class":701},[425,55834,55835,55837,55839,55841,55843],{"class":427,"line":10802},[425,55836,55526],{"class":691},[425,55838,52192],{"class":701},[425,55840,1848],{"class":691},[425,55842,52247],{"class":1155},[425,55844,2307],{"class":701},[425,55846,55847,55849,55851,55853,55855],{"class":427,"line":10811},[425,55848,55540],{"class":691},[425,55850,52192],{"class":701},[425,55852,1848],{"class":691},[425,55854,52247],{"class":1155},[425,55856,2307],{"class":701},[425,55858,55859,55861,55863,55866,55868,55870,55872,55874,55876,55878,55880,55883],{"class":427,"line":10816},[425,55860,55639],{"class":691},[425,55862,52192],{"class":701},[425,55864,55865],{"class":691},"rgba",[425,55867,1159],{"class":701},[425,55869,1341],{"class":691},[425,55871,13434],{"class":701},[425,55873,1341],{"class":691},[425,55875,13434],{"class":701},[425,55877,1341],{"class":691},[425,55879,13434],{"class":701},[425,55881,55882],{"class":691},".4",[425,55884,3719],{"class":701},[425,55886,55887,55890,55892,55894,55896],{"class":427,"line":10822},[425,55888,55889],{"class":691},"      border-radius",[425,55891,52192],{"class":701},[425,55893,1594],{"class":691},[425,55895,52247],{"class":1155},[425,55897,2307],{"class":701},[425,55899,55900],{"class":427,"line":10843},[425,55901,3187],{"class":701},[425,55903,55904],{"class":427,"line":10849},[425,55905,3400],{"emptyLinePlaceholder":1084},[425,55907,55908,55911],{"class":427,"line":10863},[425,55909,55910],{"class":431},"    .activate",[425,55912,16569],{"class":701},[425,55914,55915,55917,55919,55922],{"class":427,"line":10869},[425,55916,55639],{"class":691},[425,55918,52192],{"class":701},[425,55920,55921],{"class":691},"#f7f7f7",[425,55923,2307],{"class":701},[425,55925,55926],{"class":427,"line":10896},[425,55927,3187],{"class":701},[425,55929,55930,55932,55934],{"class":427,"line":10905},[425,55931,53172],{"class":701},[425,55933,1074],{"class":52055},[425,55935,52062],{"class":701},[425,55937,55938,55940,55942],{"class":427,"line":10911},[425,55939,52540],{"class":701},[425,55941,52089],{"class":52055},[425,55943,52062],{"class":701},[425,55945,55946],{"class":427,"line":10919},[425,55947,3400],{"emptyLinePlaceholder":1084},[425,55949,55950,55952,55954],{"class":427,"line":10924},[425,55951,2057],{"class":701},[425,55953,52555],{"class":52055},[425,55955,52062],{"class":701},[425,55957,55958,55960,55962,55964,55966,55968],{"class":427,"line":17601},[425,55959,52899],{"class":701},[425,55961,52366],{"class":52055},[425,55963,54241],{"class":431},[425,55965,1204],{"class":701},[425,55967,54246],{"class":435},[425,55969,52062],{"class":701},[425,55971,55972,55974,55976,55978,55980,55983],{"class":427,"line":17607},[425,55973,52096],{"class":701},[425,55975,52366],{"class":52055},[425,55977,54241],{"class":431},[425,55979,1204],{"class":701},[425,55981,55982],{"class":435},"\"slider-wrapper\"",[425,55984,52062],{"class":701},[425,55986,55987,55990,55992,55995,55997,56000,56003,56005,56007],{"class":427,"line":17630},[425,55988,55989],{"class":701},"      \u003C",[425,55991,393],{"class":52055},[425,55993,55994],{"class":431}," src",[425,55996,1204],{"class":701},[425,55998,55999],{"class":435},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[425,56001,56002],{"class":431}," alt",[425,56004,1204],{"class":701},[425,56006,8652],{"class":435},[425,56008,52062],{"class":701},[425,56010,56011,56013,56015],{"class":427,"line":17636},[425,56012,52531],{"class":701},[425,56014,52366],{"class":52055},[425,56016,52062],{"class":701},[425,56018,56019,56021,56023,56025,56027,56030],{"class":427,"line":17659},[425,56020,52096],{"class":701},[425,56022,52366],{"class":52055},[425,56024,54241],{"class":431},[425,56026,1204],{"class":701},[425,56028,56029],{"class":435},"\"slider-footer\"",[425,56031,52062],{"class":701},[425,56033,56034,56036,56038,56041,56043],{"class":427,"line":17673},[425,56035,55989],{"class":701},[425,56037,19],{"class":52055},[425,56039,56040],{"class":701},">对人类来说会不会太超前了?\u003C\u002F",[425,56042,19],{"class":52055},[425,56044,52062],{"class":701},[425,56046,56047,56049,56051],{"class":427,"line":17693},[425,56048,55989],{"class":701},[425,56050,447],{"class":52055},[425,56052,52062],{"class":701},[425,56054,56055,56058,56060,56062,56064,56067,56070,56072],{"class":427,"line":17699},[425,56056,56057],{"class":701},"        \u003C",[425,56059,450],{"class":52055},[425,56061,54241],{"class":431},[425,56063,1204],{"class":701},[425,56065,56066],{"class":435},"\"activate\"",[425,56068,56069],{"class":701},">\u003C\u002F",[425,56071,450],{"class":52055},[425,56073,52062],{"class":701},[425,56075,56076,56078,56080,56082,56084],{"class":427,"line":17710},[425,56077,56057],{"class":701},[425,56079,450],{"class":52055},[425,56081,56069],{"class":701},[425,56083,450],{"class":52055},[425,56085,52062],{"class":701},[425,56087,56088,56090,56092,56094,56096],{"class":427,"line":17733},[425,56089,56057],{"class":701},[425,56091,450],{"class":52055},[425,56093,56069],{"class":701},[425,56095,450],{"class":52055},[425,56097,52062],{"class":701},[425,56099,56100,56102,56104,56106,56108],{"class":427,"line":17755},[425,56101,56057],{"class":701},[425,56103,450],{"class":52055},[425,56105,56069],{"class":701},[425,56107,450],{"class":52055},[425,56109,52062],{"class":701},[425,56111,56112,56114,56116,56118,56120],{"class":427,"line":17760},[425,56113,56057],{"class":701},[425,56115,450],{"class":52055},[425,56117,56069],{"class":701},[425,56119,450],{"class":52055},[425,56121,52062],{"class":701},[425,56123,56124,56126,56128,56130,56132],{"class":427,"line":17766},[425,56125,56057],{"class":701},[425,56127,450],{"class":52055},[425,56129,56069],{"class":701},[425,56131,450],{"class":52055},[425,56133,52062],{"class":701},[425,56135,56136,56138,56140,56142,56144],{"class":427,"line":17780},[425,56137,56057],{"class":701},[425,56139,450],{"class":52055},[425,56141,56069],{"class":701},[425,56143,450],{"class":52055},[425,56145,52062],{"class":701},[425,56147,56148,56150,56152,56154,56156],{"class":427,"line":17793},[425,56149,56057],{"class":701},[425,56151,450],{"class":52055},[425,56153,56069],{"class":701},[425,56155,450],{"class":52055},[425,56157,52062],{"class":701},[425,56159,56160,56163,56165],{"class":427,"line":17798},[425,56161,56162],{"class":701},"      \u003C\u002F",[425,56164,447],{"class":52055},[425,56166,52062],{"class":701},[425,56168,56169,56171,56173],{"class":427,"line":17812},[425,56170,52531],{"class":701},[425,56172,52366],{"class":52055},[425,56174,52062],{"class":701},[425,56176,56177,56179,56181],{"class":427,"line":17817},[425,56178,53172],{"class":701},[425,56180,52366],{"class":52055},[425,56182,52062],{"class":701},[425,56184,56185,56187,56189],{"class":427,"line":17823},[425,56186,52899],{"class":701},[425,56188,52568],{"class":52055},[425,56190,52062],{"class":701},[425,56192,56193,56195,56198,56200],{"class":427,"line":17828},[425,56194,12220],{"class":1155},[425,56196,56197],{"class":691}," arrImage",[425,56199,14563],{"class":1155},[425,56201,56202],{"class":701}," [\n",[425,56204,56205,56208,56211,56214,56217,56220,56223],{"class":427,"line":17842},[425,56206,56207],{"class":701},"      { url: ",[425,56209,56210],{"class":435},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[425,56212,56213],{"class":701},", title: ",[425,56215,56216],{"class":435},"'对人类来说会不会太超前了?'",[425,56218,56219],{"class":701},", color: ",[425,56221,56222],{"class":435},"'rgba(100,67,68)'",[425,56224,56225],{"class":701}," },\n",[425,56227,56228,56230,56233,56235,56238,56240,56243],{"class":427,"line":17847},[425,56229,56207],{"class":701},[425,56231,56232],{"class":435},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[425,56234,56213],{"class":701},[425,56236,56237],{"class":435},"'开启剑与雪的黑暗传说!'",[425,56239,56219],{"class":701},[425,56241,56242],{"class":435},"'rgba(43,35,26)'",[425,56244,56225],{"class":701},[425,56246,56247,56249,56252,56254,56257,56259,56262],{"class":427,"line":17852},[425,56248,56207],{"class":701},[425,56250,56251],{"class":435},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[425,56253,56213],{"class":701},[425,56255,56256],{"class":435},"'真正的jo厨出现了!'",[425,56258,56219],{"class":701},[425,56260,56261],{"class":435},"'rgba(36,31,33)'",[425,56263,56225],{"class":701},[425,56265,56266,56268,56271,56273,56276,56278,56281],{"class":427,"line":17866},[425,56267,56207],{"class":701},[425,56269,56270],{"class":435},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[425,56272,56213],{"class":701},[425,56274,56275],{"class":435},"'李玉刚:让世界通过b站看到东方大国文化'",[425,56277,56219],{"class":701},[425,56279,56280],{"class":435},"'rgba(139,98,66)'",[425,56282,56225],{"class":701},[425,56284,56285,56287,56290,56292,56295,56297,56300],{"class":427,"line":17878},[425,56286,56207],{"class":701},[425,56288,56289],{"class":435},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[425,56291,56213],{"class":701},[425,56293,56294],{"class":435},"'快来分享你的寒假日常吧'",[425,56296,56219],{"class":701},[425,56298,56299],{"class":435},"'rgba(67,90,92)'",[425,56301,56225],{"class":701},[425,56303,56304,56306,56309,56311,56314,56316,56319],{"class":427,"line":17883},[425,56305,56207],{"class":701},[425,56307,56308],{"class":435},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[425,56310,56213],{"class":701},[425,56312,56313],{"class":435},"'哔哩哔哩小年YEAR'",[425,56315,56219],{"class":701},[425,56317,56318],{"class":435},"'rgba(166,131,143)'",[425,56320,56225],{"class":701},[425,56322,56323,56325,56328,56330,56333,56335,56338],{"class":427,"line":17896},[425,56324,56207],{"class":701},[425,56326,56327],{"class":435},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[425,56329,56213],{"class":701},[425,56331,56332],{"class":435},"'一站式解决你的电脑配置问题'",[425,56334,56219],{"class":701},[425,56336,56337],{"class":435},"'rgba(53,29,25)'",[425,56339,56225],{"class":701},[425,56341,56342,56344,56347,56349,56352,56354,56357],{"class":427,"line":17901},[425,56343,56207],{"class":701},[425,56345,56346],{"class":435},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[425,56348,56213],{"class":701},[425,56350,56351],{"class":435},"'谁不想和小猫咪贴贴呢?'",[425,56353,56219],{"class":701},[425,56355,56356],{"class":435},"'rgba(99,72,114)'",[425,56358,56359],{"class":701}," }\n",[425,56361,56362],{"class":427,"line":17906},[425,56363,53864],{"class":701},[425,56365,56366,56368,56371,56373,56375,56377,56379,56382],{"class":427,"line":17911},[425,56367,12220],{"class":1155},[425,56369,56370],{"class":691}," img",[425,56372,14563],{"class":1155},[425,56374,55151],{"class":701},[425,56376,55154],{"class":431},[425,56378,1159],{"class":701},[425,56380,56381],{"class":435},"'.slider-wrapper img'",[425,56383,1165],{"class":701},[425,56385,56386,56388,56390,56392,56394,56396,56398,56401],{"class":427,"line":17924},[425,56387,12220],{"class":1155},[425,56389,7825],{"class":691},[425,56391,14563],{"class":1155},[425,56393,55151],{"class":701},[425,56395,55154],{"class":431},[425,56397,1159],{"class":701},[425,56399,56400],{"class":435},"'.slider-footer p'",[425,56402,1165],{"class":701},[425,56404,56405,56407,56410,56412,56414,56416,56418,56421],{"class":427,"line":17929},[425,56406,12220],{"class":1155},[425,56408,56409],{"class":691}," color",[425,56411,14563],{"class":1155},[425,56413,55151],{"class":701},[425,56415,55154],{"class":431},[425,56417,1159],{"class":701},[425,56419,56420],{"class":435},"'.slider-footer'",[425,56422,1165],{"class":701},[425,56424,56425,56427,56430,56432,56434,56437,56439,56442],{"class":427,"line":33388},[425,56426,12220],{"class":1155},[425,56428,56429],{"class":691}," lis",[425,56431,14563],{"class":1155},[425,56433,55151],{"class":701},[425,56435,56436],{"class":431},"querySelectorAll",[425,56438,1159],{"class":701},[425,56440,56441],{"class":435},"'.slider-footer ul li'",[425,56443,1165],{"class":701},[425,56445,56446,56448,56450,56452],{"class":427,"line":33394},[425,56447,52974],{"class":1155},[425,56449,10437],{"class":701},[425,56451,1204],{"class":1155},[425,56453,56454],{"class":691}," 1\n",[425,56456,56457,56459,56462,56464,56466,56468,56470],{"class":427,"line":33400},[425,56458,52974],{"class":1155},[425,56460,56461],{"class":701}," timer ",[425,56463,1204],{"class":1155},[425,56465,55199],{"class":431},[425,56467,1159],{"class":701},[425,56469,55204],{"class":1155},[425,56471,55207],{"class":701},[425,56473,56474,56477,56479],{"class":427,"line":33406},[425,56475,56476],{"class":701},"      img.src ",[425,56478,1204],{"class":1155},[425,56480,56481],{"class":701}," arrImage[i].url\n",[425,56483,56484,56487,56489],{"class":427,"line":33412},[425,56485,56486],{"class":701},"      p.innerHTML ",[425,56488,1204],{"class":1155},[425,56490,56491],{"class":701}," arrImage[i].title\n",[425,56493,56494,56497,56499],{"class":427,"line":33423},[425,56495,56496],{"class":701},"      color.style.backgroundColor ",[425,56498,1204],{"class":1155},[425,56500,56501],{"class":701}," arrImage[i].color\n",[425,56503,56504],{"class":427,"line":33429},[425,56505,56506],{"class":1216},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[425,56508,56509],{"class":427,"line":33449},[425,56510,56511],{"class":1216},"      \u002F\u002F li.classList.add('activate')\n",[425,56513,56514],{"class":427,"line":33455},[425,56515,56516],{"class":1216},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[425,56518,56519],{"class":427,"line":33466},[425,56520,56521],{"class":1216},"      \u002F\u002F lis[i].classList.remove('activate')\n",[425,56523,56524,56527,56529,56531,56534,56537,56540,56542,56545],{"class":427,"line":33472},[425,56525,56526],{"class":701},"      document.",[425,56528,55154],{"class":431},[425,56530,1159],{"class":701},[425,56532,56533],{"class":435},"'.activate'",[425,56535,56536],{"class":701},")?.classList.",[425,56538,56539],{"class":431},"toggle",[425,56541,1159],{"class":701},[425,56543,56544],{"class":435},"'activate'",[425,56546,1165],{"class":701},[425,56548,56549,56552,56554,56556,56558],{"class":427,"line":33478},[425,56550,56551],{"class":701},"      lis[i].classList.",[425,56553,6334],{"class":431},[425,56555,1159],{"class":701},[425,56557,56544],{"class":435},[425,56559,1165],{"class":701},[425,56561,56562],{"class":427,"line":33484},[425,56563,3400],{"emptyLinePlaceholder":1084},[425,56565,56566,56569,56571,56573,56575,56577,56579,56581,56584],{"class":427,"line":33490},[425,56567,56568],{"class":701},"      i ",[425,56570,1204],{"class":1155},[425,56572,55238],{"class":701},[425,56574,1629],{"class":1155},[425,56576,26109],{"class":691},[425,56578,938],{"class":701},[425,56580,1477],{"class":1155},[425,56582,56583],{"class":701}," arrImage.",[425,56585,56586],{"class":691},"length\n",[425,56588,56589],{"class":427,"line":33496},[425,56590,3400],{"emptyLinePlaceholder":1084},[425,56592,56593,56595,56597],{"class":427,"line":33502},[425,56594,55290],{"class":701},[425,56596,7410],{"class":691},[425,56598,1165],{"class":701},[425,56600,56601,56603,56605],{"class":427,"line":33508},[425,56602,53172],{"class":701},[425,56604,52568],{"class":52055},[425,56606,52062],{"class":701},[425,56608,56609,56611,56613],{"class":427,"line":33528},[425,56610,52540],{"class":701},[425,56612,52555],{"class":52055},[425,56614,52062],{"class":701},[425,56616,56617],{"class":427,"line":33534},[425,56618,3400],{"emptyLinePlaceholder":1084},[425,56620,56621,56623,56625],{"class":427,"line":33550},[425,56622,52540],{"class":701},[425,56624,51390],{"class":52055},[425,56626,52062],{"class":701},[19,56628,56629],{},[393,56630],{"alt":395,"src":56631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,56633,56634],{},"?.就是短路保护,确保输出正常进行",[19,56636,56637],{},"不要忘记取余%,有时候可以用",[19,56639,56640],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[972,56642,56643],{"start":698},[450,56644,56645],{},"法2",[416,56647,56649],{"className":51388,"code":56648,"language":51390,"meta":395,"style":395},"\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",[422,56650,56651,56661,56675,56679,56687,56701,56721,56733,56741,56747,56757,56767,56771,56775,56781,56791,56795,56799,56805,56815,56827,56839,56853,56857,56861,56867,56877,56887,56897,56909,56921,56931,56935,56939,56947,56957,56969,56981,56993,56997,57001,57007,57017,57029,57041,57051,57061,57071,57083,57095,57099,57103,57111,57123,57135,57161,57173,57177,57181,57187,57197,57201,57209,57217,57221,57229,57243,57257,57277,57285,57299,57311,57319,57337,57349,57361,57373,57385,57397,57409,57421,57429,57437,57445,57453,57464,57480,57496,57512,57528,57544,57560,57576,57592,57596,57601,57619,57637,57647,57652,57657,57668,57674,57689,57698,57702,57707,57716,57721,57730,57735,57740,57745,57768,57798,57802,57810,57814,57822,57830,57834],{"__ignoreMap":395},[425,56652,56653,56655,56657,56659],{"class":427,"line":428},[425,56654,52052],{"class":701},[425,56656,52056],{"class":52055},[425,56658,52059],{"class":431},[425,56660,52062],{"class":701},[425,56662,56663,56665,56667,56669,56671,56673],{"class":427,"line":698},[425,56664,2057],{"class":701},[425,56666,51390],{"class":52055},[425,56668,52071],{"class":431},[425,56670,1204],{"class":701},[425,56672,52076],{"class":435},[425,56674,52062],{"class":701},[425,56676,56677],{"class":427,"line":710},[425,56678,3400],{"emptyLinePlaceholder":1084},[425,56680,56681,56683,56685],{"class":427,"line":721},[425,56682,2057],{"class":701},[425,56684,52089],{"class":52055},[425,56686,52062],{"class":701},[425,56688,56689,56691,56693,56695,56697,56699],{"class":427,"line":735},[425,56690,52899],{"class":701},[425,56692,52099],{"class":52055},[425,56694,52102],{"class":431},[425,56696,1204],{"class":701},[425,56698,52107],{"class":435},[425,56700,52062],{"class":701},[425,56702,56703,56705,56707,56709,56711,56713,56715,56717,56719],{"class":427,"line":743},[425,56704,52899],{"class":701},[425,56706,52099],{"class":52055},[425,56708,15917],{"class":431},[425,56710,1204],{"class":701},[425,56712,52146],{"class":435},[425,56714,52126],{"class":431},[425,56716,1204],{"class":701},[425,56718,52153],{"class":435},[425,56720,52062],{"class":701},[425,56722,56723,56725,56727,56729,56731],{"class":427,"line":751},[425,56724,52899],{"class":701},[425,56726,52162],{"class":52055},[425,56728,52165],{"class":701},[425,56730,52162],{"class":52055},[425,56732,52062],{"class":701},[425,56734,56735,56737,56739],{"class":427,"line":759},[425,56736,52899],{"class":701},[425,56738,1074],{"class":52055},[425,56740,52062],{"class":701},[425,56742,56743,56745],{"class":427,"line":770},[425,56744,7403],{"class":52055},[425,56746,16569],{"class":701},[425,56748,56749,56751,56753,56755],{"class":427,"line":780},[425,56750,55450],{"class":691},[425,56752,52192],{"class":701},[425,56754,1341],{"class":691},[425,56756,2307],{"class":701},[425,56758,56759,56761,56763,56765],{"class":427,"line":790},[425,56760,55461],{"class":691},[425,56762,52192],{"class":701},[425,56764,1341],{"class":691},[425,56766,2307],{"class":701},[425,56768,56769],{"class":427,"line":805},[425,56770,3187],{"class":701},[425,56772,56773],{"class":427,"line":818},[425,56774,3400],{"emptyLinePlaceholder":1084},[425,56776,56777,56779],{"class":427,"line":831},[425,56778,55480],{"class":52055},[425,56780,16569],{"class":701},[425,56782,56783,56785,56787,56789],{"class":427,"line":841},[425,56784,55487],{"class":691},[425,56786,52192],{"class":701},[425,56788,55492],{"class":691},[425,56790,2307],{"class":701},[425,56792,56793],{"class":427,"line":852},[425,56794,3187],{"class":701},[425,56796,56797],{"class":427,"line":862},[425,56798,3400],{"emptyLinePlaceholder":1084},[425,56800,56801,56803],{"class":427,"line":878},[425,56802,55507],{"class":431},[425,56804,16569],{"class":701},[425,56806,56807,56809,56811,56813],{"class":427,"line":914},[425,56808,55514],{"class":691},[425,56810,52192],{"class":701},[425,56812,55519],{"class":691},[425,56814,2307],{"class":701},[425,56816,56817,56819,56821,56823,56825],{"class":427,"line":943},[425,56818,55526],{"class":691},[425,56820,52192],{"class":701},[425,56822,55531],{"class":691},[425,56824,52247],{"class":1155},[425,56826,2307],{"class":701},[425,56828,56829,56831,56833,56835,56837],{"class":427,"line":956},[425,56830,55540],{"class":691},[425,56832,52192],{"class":701},[425,56834,2552],{"class":691},[425,56836,52247],{"class":1155},[425,56838,2307],{"class":701},[425,56840,56841,56843,56845,56847,56849,56851],{"class":427,"line":964},[425,56842,55461],{"class":691},[425,56844,52192],{"class":701},[425,56846,1460],{"class":691},[425,56848,52247],{"class":1155},[425,56850,52311],{"class":691},[425,56852,2307],{"class":701},[425,56854,56855],{"class":427,"line":2733},[425,56856,3187],{"class":701},[425,56858,56859],{"class":427,"line":2750},[425,56860,3400],{"emptyLinePlaceholder":1084},[425,56862,56863,56865],{"class":427,"line":2755},[425,56864,55575],{"class":431},[425,56866,16569],{"class":701},[425,56868,56869,56871,56873,56875],{"class":427,"line":2760},[425,56870,55514],{"class":691},[425,56872,52192],{"class":701},[425,56874,55586],{"class":691},[425,56876,2307],{"class":701},[425,56878,56879,56881,56883,56885],{"class":427,"line":2765},[425,56880,55593],{"class":691},[425,56882,52192],{"class":701},[425,56884,1341],{"class":691},[425,56886,2307],{"class":701},[425,56888,56889,56891,56893,56895],{"class":427,"line":2779},[425,56890,55604],{"class":691},[425,56892,52192],{"class":701},[425,56894,1341],{"class":691},[425,56896,2307],{"class":701},[425,56898,56899,56901,56903,56905,56907],{"class":427,"line":2784},[425,56900,55526],{"class":691},[425,56902,52192],{"class":701},[425,56904,1460],{"class":691},[425,56906,1477],{"class":1155},[425,56908,2307],{"class":701},[425,56910,56911,56913,56915,56917,56919],{"class":427,"line":3577},[425,56912,55540],{"class":691},[425,56914,52192],{"class":701},[425,56916,1723],{"class":691},[425,56918,1477],{"class":1155},[425,56920,2307],{"class":701},[425,56922,56923,56925,56927,56929],{"class":427,"line":3591},[425,56924,55639],{"class":691},[425,56926,52192],{"class":701},[425,56928,55644],{"class":691},[425,56930,2307],{"class":701},[425,56932,56933],{"class":427,"line":3599},[425,56934,3187],{"class":701},[425,56936,56937],{"class":427,"line":3604},[425,56938,3400],{"emptyLinePlaceholder":1084},[425,56940,56941,56943,56945],{"class":427,"line":3610},[425,56942,55575],{"class":431},[425,56944,7825],{"class":52055},[425,56946,16569],{"class":701},[425,56948,56949,56951,56953,56955],{"class":427,"line":3616},[425,56950,55514],{"class":691},[425,56952,52192],{"class":701},[425,56954,55586],{"class":691},[425,56956,2307],{"class":701},[425,56958,56959,56961,56963,56965,56967],{"class":427,"line":3621},[425,56960,55677],{"class":691},[425,56962,52192],{"class":701},[425,56964,2048],{"class":691},[425,56966,52247],{"class":1155},[425,56968,2307],{"class":701},[425,56970,56971,56973,56975,56977,56979],{"class":427,"line":8948},[425,56972,55593],{"class":691},[425,56974,52192],{"class":701},[425,56976,1848],{"class":691},[425,56978,52247],{"class":1155},[425,56980,2307],{"class":701},[425,56982,56983,56985,56987,56989,56991],{"class":427,"line":8972},[425,56984,55702],{"class":691},[425,56986,52192],{"class":701},[425,56988,1468],{"class":691},[425,56990,52247],{"class":1155},[425,56992,2307],{"class":701},[425,56994,56995],{"class":427,"line":8977},[425,56996,3187],{"class":701},[425,56998,56999],{"class":427,"line":8983},[425,57000,3400],{"emptyLinePlaceholder":1084},[425,57002,57003,57005],{"class":427,"line":9010},[425,57004,55723],{"class":52055},[425,57006,16569],{"class":701},[425,57008,57009,57011,57013,57015],{"class":427,"line":9015},[425,57010,55514],{"class":691},[425,57012,52192],{"class":701},[425,57014,55586],{"class":691},[425,57016,2307],{"class":701},[425,57018,57019,57021,57023,57025,57027],{"class":427,"line":9021},[425,57020,55702],{"class":691},[425,57022,52192],{"class":701},[425,57024,1929],{"class":691},[425,57026,52247],{"class":1155},[425,57028,2307],{"class":701},[425,57030,57031,57033,57035,57037,57039],{"class":427,"line":9033},[425,57032,55593],{"class":691},[425,57034,52192],{"class":701},[425,57036,1848],{"class":691},[425,57038,52247],{"class":1155},[425,57040,2307],{"class":701},[425,57042,57043,57045,57047,57049],{"class":427,"line":9045},[425,57044,55764],{"class":691},[425,57046,52192],{"class":701},[425,57048,52232],{"class":691},[425,57050,2307],{"class":701},[425,57052,57053,57055,57057,57059],{"class":427,"line":9057},[425,57054,55775],{"class":691},[425,57056,52192],{"class":701},[425,57058,52423],{"class":691},[425,57060,2307],{"class":701},[425,57062,57063,57065,57067,57069],{"class":427,"line":10715},[425,57064,55514],{"class":691},[425,57066,52192],{"class":701},[425,57068,55586],{"class":691},[425,57070,2307],{"class":701},[425,57072,57073,57075,57077,57079,57081],{"class":427,"line":10740},[425,57074,55526],{"class":691},[425,57076,52192],{"class":701},[425,57078,4992],{"class":691},[425,57080,52247],{"class":1155},[425,57082,2307],{"class":701},[425,57084,57085,57087,57089,57091,57093],{"class":427,"line":10763},[425,57086,55540],{"class":691},[425,57088,52192],{"class":701},[425,57090,1848],{"class":691},[425,57092,52247],{"class":1155},[425,57094,2307],{"class":701},[425,57096,57097],{"class":427,"line":10787},[425,57098,3187],{"class":701},[425,57100,57101],{"class":427,"line":10792},[425,57102,3400],{"emptyLinePlaceholder":1084},[425,57104,57105,57107,57109],{"class":427,"line":10797},[425,57106,55723],{"class":52055},[425,57108,55830],{"class":52055},[425,57110,16569],{"class":701},[425,57112,57113,57115,57117,57119,57121],{"class":427,"line":10802},[425,57114,55526],{"class":691},[425,57116,52192],{"class":701},[425,57118,1848],{"class":691},[425,57120,52247],{"class":1155},[425,57122,2307],{"class":701},[425,57124,57125,57127,57129,57131,57133],{"class":427,"line":10811},[425,57126,55540],{"class":691},[425,57128,52192],{"class":701},[425,57130,1848],{"class":691},[425,57132,52247],{"class":1155},[425,57134,2307],{"class":701},[425,57136,57137,57139,57141,57143,57145,57147,57149,57151,57153,57155,57157,57159],{"class":427,"line":10816},[425,57138,55639],{"class":691},[425,57140,52192],{"class":701},[425,57142,55865],{"class":691},[425,57144,1159],{"class":701},[425,57146,1341],{"class":691},[425,57148,13434],{"class":701},[425,57150,1341],{"class":691},[425,57152,13434],{"class":701},[425,57154,1341],{"class":691},[425,57156,13434],{"class":701},[425,57158,55882],{"class":691},[425,57160,3719],{"class":701},[425,57162,57163,57165,57167,57169,57171],{"class":427,"line":10822},[425,57164,55889],{"class":691},[425,57166,52192],{"class":701},[425,57168,1594],{"class":691},[425,57170,52247],{"class":1155},[425,57172,2307],{"class":701},[425,57174,57175],{"class":427,"line":10843},[425,57176,3187],{"class":701},[425,57178,57179],{"class":427,"line":10849},[425,57180,3400],{"emptyLinePlaceholder":1084},[425,57182,57183,57185],{"class":427,"line":10863},[425,57184,55910],{"class":431},[425,57186,16569],{"class":701},[425,57188,57189,57191,57193,57195],{"class":427,"line":10869},[425,57190,55639],{"class":691},[425,57192,52192],{"class":701},[425,57194,55921],{"class":691},[425,57196,2307],{"class":701},[425,57198,57199],{"class":427,"line":10896},[425,57200,3187],{"class":701},[425,57202,57203,57205,57207],{"class":427,"line":10905},[425,57204,53172],{"class":701},[425,57206,1074],{"class":52055},[425,57208,52062],{"class":701},[425,57210,57211,57213,57215],{"class":427,"line":10911},[425,57212,52540],{"class":701},[425,57214,52089],{"class":52055},[425,57216,52062],{"class":701},[425,57218,57219],{"class":427,"line":10919},[425,57220,3400],{"emptyLinePlaceholder":1084},[425,57222,57223,57225,57227],{"class":427,"line":10924},[425,57224,2057],{"class":701},[425,57226,52555],{"class":52055},[425,57228,52062],{"class":701},[425,57230,57231,57233,57235,57237,57239,57241],{"class":427,"line":17601},[425,57232,52899],{"class":701},[425,57234,52366],{"class":52055},[425,57236,54241],{"class":431},[425,57238,1204],{"class":701},[425,57240,54246],{"class":435},[425,57242,52062],{"class":701},[425,57244,57245,57247,57249,57251,57253,57255],{"class":427,"line":17607},[425,57246,52096],{"class":701},[425,57248,52366],{"class":52055},[425,57250,54241],{"class":431},[425,57252,1204],{"class":701},[425,57254,55982],{"class":435},[425,57256,52062],{"class":701},[425,57258,57259,57261,57263,57265,57267,57269,57271,57273,57275],{"class":427,"line":17630},[425,57260,55989],{"class":701},[425,57262,393],{"class":52055},[425,57264,55994],{"class":431},[425,57266,1204],{"class":701},[425,57268,55999],{"class":435},[425,57270,56002],{"class":431},[425,57272,1204],{"class":701},[425,57274,8652],{"class":435},[425,57276,52062],{"class":701},[425,57278,57279,57281,57283],{"class":427,"line":17636},[425,57280,52531],{"class":701},[425,57282,52366],{"class":52055},[425,57284,52062],{"class":701},[425,57286,57287,57289,57291,57293,57295,57297],{"class":427,"line":17659},[425,57288,52096],{"class":701},[425,57290,52366],{"class":52055},[425,57292,54241],{"class":431},[425,57294,1204],{"class":701},[425,57296,56029],{"class":435},[425,57298,52062],{"class":701},[425,57300,57301,57303,57305,57307,57309],{"class":427,"line":17673},[425,57302,55989],{"class":701},[425,57304,19],{"class":52055},[425,57306,56040],{"class":701},[425,57308,19],{"class":52055},[425,57310,52062],{"class":701},[425,57312,57313,57315,57317],{"class":427,"line":17693},[425,57314,55989],{"class":701},[425,57316,447],{"class":52055},[425,57318,52062],{"class":701},[425,57320,57321,57323,57325,57327,57329,57331,57333,57335],{"class":427,"line":17699},[425,57322,56057],{"class":701},[425,57324,450],{"class":52055},[425,57326,54241],{"class":431},[425,57328,1204],{"class":701},[425,57330,56066],{"class":435},[425,57332,56069],{"class":701},[425,57334,450],{"class":52055},[425,57336,52062],{"class":701},[425,57338,57339,57341,57343,57345,57347],{"class":427,"line":17710},[425,57340,56057],{"class":701},[425,57342,450],{"class":52055},[425,57344,56069],{"class":701},[425,57346,450],{"class":52055},[425,57348,52062],{"class":701},[425,57350,57351,57353,57355,57357,57359],{"class":427,"line":17733},[425,57352,56057],{"class":701},[425,57354,450],{"class":52055},[425,57356,56069],{"class":701},[425,57358,450],{"class":52055},[425,57360,52062],{"class":701},[425,57362,57363,57365,57367,57369,57371],{"class":427,"line":17755},[425,57364,56057],{"class":701},[425,57366,450],{"class":52055},[425,57368,56069],{"class":701},[425,57370,450],{"class":52055},[425,57372,52062],{"class":701},[425,57374,57375,57377,57379,57381,57383],{"class":427,"line":17760},[425,57376,56057],{"class":701},[425,57378,450],{"class":52055},[425,57380,56069],{"class":701},[425,57382,450],{"class":52055},[425,57384,52062],{"class":701},[425,57386,57387,57389,57391,57393,57395],{"class":427,"line":17766},[425,57388,56057],{"class":701},[425,57390,450],{"class":52055},[425,57392,56069],{"class":701},[425,57394,450],{"class":52055},[425,57396,52062],{"class":701},[425,57398,57399,57401,57403,57405,57407],{"class":427,"line":17780},[425,57400,56057],{"class":701},[425,57402,450],{"class":52055},[425,57404,56069],{"class":701},[425,57406,450],{"class":52055},[425,57408,52062],{"class":701},[425,57410,57411,57413,57415,57417,57419],{"class":427,"line":17793},[425,57412,56057],{"class":701},[425,57414,450],{"class":52055},[425,57416,56069],{"class":701},[425,57418,450],{"class":52055},[425,57420,52062],{"class":701},[425,57422,57423,57425,57427],{"class":427,"line":17798},[425,57424,56162],{"class":701},[425,57426,447],{"class":52055},[425,57428,52062],{"class":701},[425,57430,57431,57433,57435],{"class":427,"line":17812},[425,57432,52531],{"class":701},[425,57434,52366],{"class":52055},[425,57436,52062],{"class":701},[425,57438,57439,57441,57443],{"class":427,"line":17817},[425,57440,53172],{"class":701},[425,57442,52366],{"class":52055},[425,57444,52062],{"class":701},[425,57446,57447,57449,57451],{"class":427,"line":17823},[425,57448,52899],{"class":701},[425,57450,52568],{"class":52055},[425,57452,52062],{"class":701},[425,57454,57455,57457,57460,57462],{"class":427,"line":17828},[425,57456,12220],{"class":1155},[425,57458,57459],{"class":691}," sliderData",[425,57461,14563],{"class":1155},[425,57463,56202],{"class":701},[425,57465,57466,57468,57470,57472,57474,57476,57478],{"class":427,"line":17842},[425,57467,56207],{"class":701},[425,57469,56210],{"class":435},[425,57471,56213],{"class":701},[425,57473,56216],{"class":435},[425,57475,56219],{"class":701},[425,57477,56222],{"class":435},[425,57479,56225],{"class":701},[425,57481,57482,57484,57486,57488,57490,57492,57494],{"class":427,"line":17847},[425,57483,56207],{"class":701},[425,57485,56232],{"class":435},[425,57487,56213],{"class":701},[425,57489,56237],{"class":435},[425,57491,56219],{"class":701},[425,57493,56242],{"class":435},[425,57495,56225],{"class":701},[425,57497,57498,57500,57502,57504,57506,57508,57510],{"class":427,"line":17852},[425,57499,56207],{"class":701},[425,57501,56251],{"class":435},[425,57503,56213],{"class":701},[425,57505,56256],{"class":435},[425,57507,56219],{"class":701},[425,57509,56261],{"class":435},[425,57511,56225],{"class":701},[425,57513,57514,57516,57518,57520,57522,57524,57526],{"class":427,"line":17866},[425,57515,56207],{"class":701},[425,57517,56270],{"class":435},[425,57519,56213],{"class":701},[425,57521,56275],{"class":435},[425,57523,56219],{"class":701},[425,57525,56280],{"class":435},[425,57527,56225],{"class":701},[425,57529,57530,57532,57534,57536,57538,57540,57542],{"class":427,"line":17878},[425,57531,56207],{"class":701},[425,57533,56289],{"class":435},[425,57535,56213],{"class":701},[425,57537,56294],{"class":435},[425,57539,56219],{"class":701},[425,57541,56299],{"class":435},[425,57543,56225],{"class":701},[425,57545,57546,57548,57550,57552,57554,57556,57558],{"class":427,"line":17883},[425,57547,56207],{"class":701},[425,57549,56308],{"class":435},[425,57551,56213],{"class":701},[425,57553,56313],{"class":435},[425,57555,56219],{"class":701},[425,57557,56318],{"class":435},[425,57559,56225],{"class":701},[425,57561,57562,57564,57566,57568,57570,57572,57574],{"class":427,"line":17896},[425,57563,56207],{"class":701},[425,57565,56327],{"class":435},[425,57567,56213],{"class":701},[425,57569,56332],{"class":435},[425,57571,56219],{"class":701},[425,57573,56337],{"class":435},[425,57575,56225],{"class":701},[425,57577,57578,57580,57582,57584,57586,57588,57590],{"class":427,"line":17901},[425,57579,56207],{"class":701},[425,57581,56346],{"class":435},[425,57583,56213],{"class":701},[425,57585,56351],{"class":435},[425,57587,56219],{"class":701},[425,57589,56356],{"class":435},[425,57591,56359],{"class":701},[425,57593,57594],{"class":427,"line":17906},[425,57595,53864],{"class":701},[425,57597,57598],{"class":427,"line":17911},[425,57599,57600],{"class":1216},"    \u002F\u002F 1.获取元素\n",[425,57602,57603,57605,57607,57609,57611,57613,57615,57617],{"class":427,"line":17924},[425,57604,12220],{"class":1155},[425,57606,56370],{"class":691},[425,57608,14563],{"class":1155},[425,57610,55151],{"class":701},[425,57612,55154],{"class":431},[425,57614,1159],{"class":701},[425,57616,56381],{"class":435},[425,57618,1165],{"class":701},[425,57620,57621,57623,57625,57627,57629,57631,57633,57635],{"class":427,"line":17929},[425,57622,12220],{"class":1155},[425,57624,7825],{"class":691},[425,57626,14563],{"class":1155},[425,57628,55151],{"class":701},[425,57630,55154],{"class":431},[425,57632,1159],{"class":701},[425,57634,56400],{"class":435},[425,57636,1165],{"class":701},[425,57638,57639,57641,57643,57645],{"class":427,"line":33388},[425,57640,52974],{"class":1155},[425,57642,10437],{"class":701},[425,57644,1204],{"class":1155},[425,57646,48088],{"class":691},[425,57648,57649],{"class":427,"line":33394},[425,57650,57651],{"class":1216},"    \u002F\u002F 2.开启定时器\n",[425,57653,57654],{"class":427,"line":33400},[425,57655,57656],{"class":1216},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[425,57658,57659,57662,57664,57666],{"class":427,"line":33406},[425,57660,57661],{"class":431},"    setInterval",[425,57663,1159],{"class":701},[425,57665,55204],{"class":1155},[425,57667,55207],{"class":701},[425,57669,57670,57672],{"class":427,"line":33412},[425,57671,55212],{"class":701},[425,57673,3702],{"class":1155},[425,57675,57676,57678,57680,57682,57685,57687],{"class":427,"line":33423},[425,57677,55235],{"class":1155},[425,57679,55238],{"class":701},[425,57681,2712],{"class":1155},[425,57683,57684],{"class":701}," sliderData.",[425,57686,52723],{"class":691},[425,57688,13441],{"class":701},[425,57690,57691,57694,57696],{"class":427,"line":33429},[425,57692,57693],{"class":701},"        i ",[425,57695,1204],{"class":1155},[425,57697,48088],{"class":691},[425,57699,57700],{"class":427,"line":33449},[425,57701,53153],{"class":701},[425,57703,57704],{"class":427,"line":33455},[425,57705,57706],{"class":1216},"      \u002F\u002F 更换图片路径\n",[425,57708,57709,57711,57713],{"class":427,"line":33466},[425,57710,56476],{"class":701},[425,57712,1204],{"class":1155},[425,57714,57715],{"class":701}," sliderData[i].url\n",[425,57717,57718],{"class":427,"line":33472},[425,57719,57720],{"class":1216},"      \u002F\u002F 把文字写到p里面\n",[425,57722,57723,57725,57727],{"class":427,"line":33478},[425,57724,56486],{"class":701},[425,57726,1204],{"class":1155},[425,57728,57729],{"class":701}," sliderData[i].title\n",[425,57731,57732],{"class":427,"line":33484},[425,57733,57734],{"class":1216},"      \u002F\u002F 小圆点\n",[425,57736,57737],{"class":427,"line":33490},[425,57738,57739],{"class":1216},"      \u002F\u002F 先删除以前的active\n",[425,57741,57742],{"class":427,"line":33496},[425,57743,57744],{"class":1216},"      \u002F\u002F 只让当前li添加active\n",[425,57746,57747,57749,57751,57753,57756,57759,57762,57764,57766],{"class":427,"line":33502},[425,57748,56526],{"class":701},[425,57750,55154],{"class":431},[425,57752,1159],{"class":701},[425,57754,57755],{"class":435},"'.slider-footer .activate'",[425,57757,57758],{"class":701},").classList.",[425,57760,57761],{"class":431},"remove",[425,57763,1159],{"class":701},[425,57765,56544],{"class":435},[425,57767,1165],{"class":701},[425,57769,57770,57772,57774,57776,57779,57781,57783,57785,57788,57790,57792,57794,57796],{"class":427,"line":33508},[425,57771,56526],{"class":701},[425,57773,55154],{"class":431},[425,57775,1159],{"class":701},[425,57777,57778],{"class":435},"`.slider-footer ul li:nth-child(${",[425,57780,1589],{"class":701},[425,57782,46321],{"class":1155},[425,57784,26109],{"class":691},[425,57786,57787],{"class":435},"})`",[425,57789,57758],{"class":701},[425,57791,6334],{"class":431},[425,57793,1159],{"class":701},[425,57795,56544],{"class":435},[425,57797,1165],{"class":701},[425,57799,57800],{"class":427,"line":33528},[425,57801,3400],{"emptyLinePlaceholder":1084},[425,57803,57804,57806,57808],{"class":427,"line":33534},[425,57805,55290],{"class":701},[425,57807,7410],{"class":691},[425,57809,1165],{"class":701},[425,57811,57812],{"class":427,"line":33550},[425,57813,3400],{"emptyLinePlaceholder":1084},[425,57815,57816,57818,57820],{"class":427,"line":33556},[425,57817,53172],{"class":701},[425,57819,52568],{"class":52055},[425,57821,52062],{"class":701},[425,57823,57824,57826,57828],{"class":427,"line":33570},[425,57825,52540],{"class":701},[425,57827,52555],{"class":52055},[425,57829,52062],{"class":701},[425,57831,57832],{"class":427,"line":33576},[425,57833,3400],{"emptyLinePlaceholder":1084},[425,57835,57836,57838,57840],{"class":427,"line":33591},[425,57837,52540],{"class":701},[425,57839,51390],{"class":52055},[425,57841,52062],{"class":701},[14,57843,57845],{"id":57844},"_317-重要知识点","3.1.7 重要知识点",[19,57847,57848,57849],{},"浏览器在渲染文本时， ",[400,57850,57851],{},"没有空格或换行符就没有“断行点”",[19,57853,57854],{},[393,57855],{"alt":395,"src":57856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,57858,57859],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,57861,57862],{},[393,57863],{"alt":395,"src":57864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,57866,57867],{},[393,57868],{"alt":395,"src":57869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[1099,57871,57873],{"id":57872},"_32-dom事件基础","3.2 DOM事件基础",[14,57875,57877],{"id":57876},"_321-事件监听","3.2.1 事件监听",[19,57879,57880],{},[393,57881],{"alt":395,"src":57882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,57884,57885],{},"事件监听有响应的发生",[19,57887,57888],{},[393,57889],{"alt":395,"src":57890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,57892,57893],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,57895,57896],{},"对于有名函数,要执行的函数名后边不要加()",[14,57898,57900],{"id":57899},"_322-随机点名案例","3.2.2 随机点名案例",[416,57902,57904],{"className":51388,"code":57903,"language":51390,"meta":395,"style":395},"\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",[422,57905,57906,57916,57930,57934,57942,57956,57976,57988,57996,58002,58012,58022,58026,58030,58037,58048,58052,58056,58062,58074,58088,58098,58110,58123,58127,58131,58138,58142,58155,58167,58179,58183,58187,58191,58198,58208,58212,58216,58225,58237,58249,58264,58268,58276,58284,58288,58296,58309,58323,58336,58356,58364,58379,58399,58419,58427,58431,58439,58444,58480,58500,58505,58524,58529,58540,58545,58556,58561,58580,58595,58600,58626,58636,58645,58650,58666,58671,58676,58681,58696,58700,58704,58709,58728,58745,58753,58758,58773,58777,58781,58789,58797,58801],{"__ignoreMap":395},[425,57907,57908,57910,57912,57914],{"class":427,"line":428},[425,57909,52052],{"class":701},[425,57911,52056],{"class":52055},[425,57913,52059],{"class":431},[425,57915,52062],{"class":701},[425,57917,57918,57920,57922,57924,57926,57928],{"class":427,"line":698},[425,57919,2057],{"class":701},[425,57921,51390],{"class":52055},[425,57923,52071],{"class":431},[425,57925,1204],{"class":701},[425,57927,52076],{"class":435},[425,57929,52062],{"class":701},[425,57931,57932],{"class":427,"line":710},[425,57933,3400],{"emptyLinePlaceholder":1084},[425,57935,57936,57938,57940],{"class":427,"line":721},[425,57937,2057],{"class":701},[425,57939,52089],{"class":52055},[425,57941,52062],{"class":701},[425,57943,57944,57946,57948,57950,57952,57954],{"class":427,"line":735},[425,57945,52899],{"class":701},[425,57947,52099],{"class":52055},[425,57949,52102],{"class":431},[425,57951,1204],{"class":701},[425,57953,52107],{"class":435},[425,57955,52062],{"class":701},[425,57957,57958,57960,57962,57964,57966,57968,57970,57972,57974],{"class":427,"line":743},[425,57959,52899],{"class":701},[425,57961,52099],{"class":52055},[425,57963,15917],{"class":431},[425,57965,1204],{"class":701},[425,57967,52146],{"class":435},[425,57969,52126],{"class":431},[425,57971,1204],{"class":701},[425,57973,52153],{"class":435},[425,57975,52062],{"class":701},[425,57977,57978,57980,57982,57984,57986],{"class":427,"line":751},[425,57979,52899],{"class":701},[425,57981,52162],{"class":52055},[425,57983,52165],{"class":701},[425,57985,52162],{"class":52055},[425,57987,52062],{"class":701},[425,57989,57990,57992,57994],{"class":427,"line":759},[425,57991,52899],{"class":701},[425,57993,1074],{"class":52055},[425,57995,52062],{"class":701},[425,57997,57998,58000],{"class":427,"line":770},[425,57999,7403],{"class":52055},[425,58001,16569],{"class":701},[425,58003,58004,58006,58008,58010],{"class":427,"line":780},[425,58005,55461],{"class":691},[425,58007,52192],{"class":701},[425,58009,1341],{"class":691},[425,58011,2307],{"class":701},[425,58013,58014,58016,58018,58020],{"class":427,"line":790},[425,58015,55450],{"class":691},[425,58017,52192],{"class":701},[425,58019,1341],{"class":691},[425,58021,2307],{"class":701},[425,58023,58024],{"class":427,"line":805},[425,58025,3187],{"class":701},[425,58027,58028],{"class":427,"line":818},[425,58029,3400],{"emptyLinePlaceholder":1084},[425,58031,58032,58035],{"class":427,"line":831},[425,58033,58034],{"class":52055},"    h2",[425,58036,16569],{"class":701},[425,58038,58039,58042,58044,58046],{"class":427,"line":841},[425,58040,58041],{"class":691},"      text-align",[425,58043,52192],{"class":701},[425,58045,52347],{"class":691},[425,58047,2307],{"class":701},[425,58049,58050],{"class":427,"line":852},[425,58051,3187],{"class":701},[425,58053,58054],{"class":427,"line":862},[425,58055,3400],{"emptyLinePlaceholder":1084},[425,58057,58058,58060],{"class":427,"line":878},[425,58059,55507],{"class":431},[425,58061,16569],{"class":701},[425,58063,58064,58066,58068,58070,58072],{"class":427,"line":914},[425,58065,55526],{"class":691},[425,58067,52192],{"class":701},[425,58069,2552],{"class":691},[425,58071,52247],{"class":1155},[425,58073,2307],{"class":701},[425,58075,58076,58078,58080,58082,58084,58086],{"class":427,"line":943},[425,58077,55461],{"class":691},[425,58079,52192],{"class":701},[425,58081,1804],{"class":691},[425,58083,52247],{"class":1155},[425,58085,52311],{"class":691},[425,58087,2307],{"class":701},[425,58089,58090,58092,58094,58096],{"class":427,"line":956},[425,58091,55764],{"class":691},[425,58093,52192],{"class":701},[425,58095,52232],{"class":691},[425,58097,2307],{"class":701},[425,58099,58100,58102,58104,58106,58108],{"class":427,"line":964},[425,58101,55677],{"class":691},[425,58103,52192],{"class":701},[425,58105,1973],{"class":691},[425,58107,52247],{"class":1155},[425,58109,2307],{"class":701},[425,58111,58112,58115,58117,58119,58121],{"class":427,"line":2733},[425,58113,58114],{"class":691},"      line-height",[425,58116,52192],{"class":701},[425,58118,1550],{"class":691},[425,58120,52247],{"class":1155},[425,58122,2307],{"class":701},[425,58124,58125],{"class":427,"line":2750},[425,58126,3187],{"class":701},[425,58128,58129],{"class":427,"line":2755},[425,58130,3400],{"emptyLinePlaceholder":1084},[425,58132,58133,58136],{"class":427,"line":2760},[425,58134,58135],{"class":431},"    .qs",[425,58137,16569],{"class":701},[425,58139,58140],{"class":427,"line":2765},[425,58141,3400],{"emptyLinePlaceholder":1084},[425,58143,58144,58146,58148,58151,58153],{"class":427,"line":2779},[425,58145,55526],{"class":691},[425,58147,52192],{"class":701},[425,58149,58150],{"class":691},"450",[425,58152,52247],{"class":1155},[425,58154,2307],{"class":701},[425,58156,58157,58159,58161,58163,58165],{"class":427,"line":2784},[425,58158,55540],{"class":691},[425,58160,52192],{"class":701},[425,58162,1550],{"class":691},[425,58164,52247],{"class":1155},[425,58166,2307],{"class":701},[425,58168,58169,58172,58174,58177],{"class":427,"line":3577},[425,58170,58171],{"class":691},"      color",[425,58173,52192],{"class":701},[425,58175,58176],{"class":691},"red",[425,58178,2307],{"class":701},[425,58180,58181],{"class":427,"line":3591},[425,58182,3400],{"emptyLinePlaceholder":1084},[425,58184,58185],{"class":427,"line":3599},[425,58186,3187],{"class":701},[425,58188,58189],{"class":427,"line":3604},[425,58190,3400],{"emptyLinePlaceholder":1084},[425,58192,58193,58196],{"class":427,"line":3610},[425,58194,58195],{"class":431},"    .btns",[425,58197,16569],{"class":701},[425,58199,58200,58202,58204,58206],{"class":427,"line":3616},[425,58201,58041],{"class":691},[425,58203,52192],{"class":701},[425,58205,52347],{"class":691},[425,58207,2307],{"class":701},[425,58209,58210],{"class":427,"line":3621},[425,58211,3187],{"class":701},[425,58213,58214],{"class":427,"line":8948},[425,58215,3400],{"emptyLinePlaceholder":1084},[425,58217,58218,58220,58223],{"class":427,"line":8972},[425,58219,58195],{"class":431},[425,58221,58222],{"class":52055}," button",[425,58224,16569],{"class":701},[425,58226,58227,58229,58231,58233,58235],{"class":427,"line":8977},[425,58228,55526],{"class":691},[425,58230,52192],{"class":701},[425,58232,1965],{"class":691},[425,58234,52247],{"class":1155},[425,58236,2307],{"class":701},[425,58238,58239,58241,58243,58245,58247],{"class":427,"line":8983},[425,58240,55540],{"class":691},[425,58242,52192],{"class":701},[425,58244,1422],{"class":691},[425,58246,52247],{"class":1155},[425,58248,2307],{"class":701},[425,58250,58251,58253,58255,58257,58260,58262],{"class":427,"line":9010},[425,58252,55461],{"class":691},[425,58254,52192],{"class":701},[425,58256,1341],{"class":691},[425,58258,58259],{"class":691}," 50",[425,58261,52247],{"class":1155},[425,58263,2307],{"class":701},[425,58265,58266],{"class":427,"line":9015},[425,58267,3187],{"class":701},[425,58269,58270,58272,58274],{"class":427,"line":9021},[425,58271,53172],{"class":701},[425,58273,1074],{"class":52055},[425,58275,52062],{"class":701},[425,58277,58278,58280,58282],{"class":427,"line":9033},[425,58279,52540],{"class":701},[425,58281,52089],{"class":52055},[425,58283,52062],{"class":701},[425,58285,58286],{"class":427,"line":9045},[425,58287,3400],{"emptyLinePlaceholder":1084},[425,58289,58290,58292,58294],{"class":427,"line":9057},[425,58291,2057],{"class":701},[425,58293,52555],{"class":52055},[425,58295,52062],{"class":701},[425,58297,58298,58300,58302,58305,58307],{"class":427,"line":10715},[425,58299,52899],{"class":701},[425,58301,1099],{"class":52055},[425,58303,58304],{"class":701},">随机点名\u003C\u002F",[425,58306,1099],{"class":52055},[425,58308,52062],{"class":701},[425,58310,58311,58313,58315,58317,58319,58321],{"class":427,"line":10740},[425,58312,52899],{"class":701},[425,58314,52366],{"class":52055},[425,58316,54241],{"class":431},[425,58318,1204],{"class":701},[425,58320,54246],{"class":435},[425,58322,52062],{"class":701},[425,58324,58325,58327,58329,58332,58334],{"class":427,"line":10763},[425,58326,52096],{"class":701},[425,58328,425],{"class":52055},[425,58330,58331],{"class":701},">名字是：\u003C\u002F",[425,58333,425],{"class":52055},[425,58335,52062],{"class":701},[425,58337,58338,58340,58342,58344,58346,58349,58352,58354],{"class":427,"line":10787},[425,58339,52096],{"class":701},[425,58341,52366],{"class":52055},[425,58343,54241],{"class":431},[425,58345,1204],{"class":701},[425,58347,58348],{"class":435},"\"qs\"",[425,58350,58351],{"class":701},">这里显示姓名\u003C\u002F",[425,58353,52366],{"class":52055},[425,58355,52062],{"class":701},[425,58357,58358,58360,58362],{"class":427,"line":10792},[425,58359,53172],{"class":701},[425,58361,52366],{"class":52055},[425,58363,52062],{"class":701},[425,58365,58366,58368,58370,58372,58374,58377],{"class":427,"line":10797},[425,58367,52899],{"class":701},[425,58369,52366],{"class":52055},[425,58371,54241],{"class":431},[425,58373,1204],{"class":701},[425,58375,58376],{"class":435},"\"btns\"",[425,58378,52062],{"class":701},[425,58380,58381,58383,58385,58387,58389,58392,58395,58397],{"class":427,"line":10802},[425,58382,52096],{"class":701},[425,58384,54642],{"class":52055},[425,58386,54241],{"class":431},[425,58388,1204],{"class":701},[425,58390,58391],{"class":435},"\"start\"",[425,58393,58394],{"class":701},">开始\u003C\u002F",[425,58396,54642],{"class":52055},[425,58398,52062],{"class":701},[425,58400,58401,58403,58405,58407,58409,58412,58415,58417],{"class":427,"line":10811},[425,58402,52096],{"class":701},[425,58404,54642],{"class":52055},[425,58406,54241],{"class":431},[425,58408,1204],{"class":701},[425,58410,58411],{"class":435},"\"end\"",[425,58413,58414],{"class":701},">结束\u003C\u002F",[425,58416,54642],{"class":52055},[425,58418,52062],{"class":701},[425,58420,58421,58423,58425],{"class":427,"line":10816},[425,58422,53172],{"class":701},[425,58424,52366],{"class":52055},[425,58426,52062],{"class":701},[425,58428,58429],{"class":427,"line":10822},[425,58430,3400],{"emptyLinePlaceholder":1084},[425,58432,58433,58435,58437],{"class":427,"line":10843},[425,58434,52899],{"class":701},[425,58436,52568],{"class":52055},[425,58438,52062],{"class":701},[425,58440,58441],{"class":427,"line":10849},[425,58442,58443],{"class":1216},"    \u002F\u002F 数据数组\n",[425,58445,58446,58448,58451,58453,58455,58458,58460,58463,58465,58468,58470,58473,58475,58478],{"class":427,"line":10863},[425,58447,12220],{"class":1155},[425,58449,58450],{"class":691}," arr",[425,58452,14563],{"class":1155},[425,58454,52981],{"class":701},[425,58456,58457],{"class":435},"'马超'",[425,58459,13434],{"class":701},[425,58461,58462],{"class":435},"'黄忠'",[425,58464,13434],{"class":701},[425,58466,58467],{"class":435},"'赵云'",[425,58469,13434],{"class":701},[425,58471,58472],{"class":435},"'关羽'",[425,58474,13434],{"class":701},[425,58476,58477],{"class":435},"'张飞'",[425,58479,34001],{"class":701},[425,58481,58482,58484,58487,58489,58491,58493,58495,58498],{"class":427,"line":10869},[425,58483,12220],{"class":1155},[425,58485,58486],{"class":691}," qs",[425,58488,14563],{"class":1155},[425,58490,55151],{"class":701},[425,58492,55154],{"class":431},[425,58494,1159],{"class":701},[425,58496,58497],{"class":435},"'.qs'",[425,58499,1165],{"class":701},[425,58501,58502],{"class":427,"line":10896},[425,58503,58504],{"class":1216},"    \u002F\u002F 1.业务1.开始按钮模块\n",[425,58506,58507,58509,58511,58513,58515,58517,58519,58522],{"class":427,"line":10905},[425,58508,12220],{"class":1155},[425,58510,5184],{"class":691},[425,58512,14563],{"class":1155},[425,58514,55151],{"class":701},[425,58516,55154],{"class":431},[425,58518,1159],{"class":701},[425,58520,58521],{"class":435},"'.start'",[425,58523,1165],{"class":701},[425,58525,58526],{"class":427,"line":10911},[425,58527,58528],{"class":1216},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[425,58530,58531,58533,58536,58538],{"class":427,"line":10919},[425,58532,52974],{"class":1155},[425,58534,58535],{"class":701}," timerId ",[425,58537,1204],{"class":1155},[425,58539,48088],{"class":691},[425,58541,58542],{"class":427,"line":10924},[425,58543,58544],{"class":1216},"    \u002F\u002F 随机号要全局变量\n",[425,58546,58547,58549,58552,58554],{"class":427,"line":17601},[425,58548,52974],{"class":1155},[425,58550,58551],{"class":701}," random ",[425,58553,1204],{"class":1155},[425,58555,48088],{"class":691},[425,58557,58558],{"class":427,"line":17607},[425,58559,58560],{"class":1216},"    \u002F\u002F 1.1 添加点击事件\n",[425,58562,58563,58566,58569,58571,58574,58576,58578],{"class":427,"line":17630},[425,58564,58565],{"class":701},"    start.",[425,58567,58568],{"class":431},"addEventListener",[425,58570,1159],{"class":701},[425,58572,58573],{"class":435},"'click'",[425,58575,13434],{"class":701},[425,58577,55204],{"class":1155},[425,58579,55207],{"class":701},[425,58581,58582,58585,58587,58589,58591,58593],{"class":427,"line":17636},[425,58583,58584],{"class":701},"      timerId ",[425,58586,1204],{"class":1155},[425,58588,55199],{"class":431},[425,58590,1159],{"class":701},[425,58592,55204],{"class":1155},[425,58594,55207],{"class":701},[425,58596,58597],{"class":427,"line":17659},[425,58598,58599],{"class":1216},"        \u002F\u002F 随机数\n",[425,58601,58602,58605,58607,58610,58613,58616,58618,58620,58622,58624],{"class":427,"line":17673},[425,58603,58604],{"class":701},"        random ",[425,58606,1204],{"class":1155},[425,58608,58609],{"class":431}," parseInt",[425,58611,58612],{"class":701},"(Math.",[425,58614,58615],{"class":431},"random",[425,58617,14049],{"class":701},[425,58619,1603],{"class":1155},[425,58621,52720],{"class":701},[425,58623,52723],{"class":691},[425,58625,1165],{"class":701},[425,58627,58628,58631,58633],{"class":427,"line":17693},[425,58629,58630],{"class":701},"        qs.innerHTML ",[425,58632,1204],{"class":1155},[425,58634,58635],{"class":701}," arr[random]\n",[425,58637,58638,58641,58643],{"class":427,"line":17699},[425,58639,58640],{"class":701},"      }, ",[425,58642,1422],{"class":691},[425,58644,1165],{"class":701},[425,58646,58647],{"class":427,"line":17710},[425,58648,58649],{"class":1216},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[425,58651,58652,58654,58657,58659,58662,58664],{"class":427,"line":17733},[425,58653,55235],{"class":1155},[425,58655,58656],{"class":701}," (arr.",[425,58658,52723],{"class":691},[425,58660,58661],{"class":1155}," ===",[425,58663,26109],{"class":691},[425,58665,13441],{"class":701},[425,58667,58668],{"class":427,"line":17755},[425,58669,58670],{"class":1216},"        \u002F\u002F start.disabled = true\n",[425,58672,58673],{"class":427,"line":17760},[425,58674,58675],{"class":1216},"        \u002F\u002F end.disabled = true\n",[425,58677,58678],{"class":427,"line":17766},[425,58679,58680],{"class":1216},"        \u002F\u002F 可以合起来写\n",[425,58682,58683,58686,58688,58691,58693],{"class":427,"line":17780},[425,58684,58685],{"class":701},"        start.disabled ",[425,58687,1204],{"class":1155},[425,58689,58690],{"class":701}," end.disabled ",[425,58692,1204],{"class":1155},[425,58694,58695],{"class":691}," true\n",[425,58697,58698],{"class":427,"line":17793},[425,58699,53153],{"class":701},[425,58701,58702],{"class":427,"line":17798},[425,58703,34216],{"class":701},[425,58705,58706],{"class":427,"line":17812},[425,58707,58708],{"class":1216},"    \u002F\u002F 1.2 关闭按钮模块\n",[425,58710,58711,58713,58715,58717,58719,58721,58723,58726],{"class":427,"line":17817},[425,58712,12220],{"class":1155},[425,58714,5200],{"class":691},[425,58716,14563],{"class":1155},[425,58718,55151],{"class":701},[425,58720,55154],{"class":431},[425,58722,1159],{"class":701},[425,58724,58725],{"class":435},"'.end'",[425,58727,1165],{"class":701},[425,58729,58730,58733,58735,58737,58739,58741,58743],{"class":427,"line":17823},[425,58731,58732],{"class":701},"    end.",[425,58734,58568],{"class":431},[425,58736,1159],{"class":701},[425,58738,58573],{"class":435},[425,58740,13434],{"class":701},[425,58742,55204],{"class":1155},[425,58744,55207],{"class":701},[425,58746,58747,58750],{"class":427,"line":17828},[425,58748,58749],{"class":431},"      clearInterval",[425,58751,58752],{"class":701},"(timerId)\n",[425,58754,58755],{"class":427,"line":17842},[425,58756,58757],{"class":1216},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[425,58759,58760,58763,58766,58769,58771],{"class":427,"line":17847},[425,58761,58762],{"class":701},"      arr.",[425,58764,58765],{"class":431},"splice",[425,58767,58768],{"class":701},"(random, ",[425,58770,1367],{"class":691},[425,58772,1165],{"class":701},[425,58774,58775],{"class":427,"line":17852},[425,58776,34216],{"class":701},[425,58778,58779],{"class":427,"line":17866},[425,58780,3400],{"emptyLinePlaceholder":1084},[425,58782,58783,58785,58787],{"class":427,"line":17878},[425,58784,53172],{"class":701},[425,58786,52568],{"class":52055},[425,58788,52062],{"class":701},[425,58790,58791,58793,58795],{"class":427,"line":17883},[425,58792,52540],{"class":701},[425,58794,52555],{"class":52055},[425,58796,52062],{"class":701},[425,58798,58799],{"class":427,"line":17896},[425,58800,3400],{"emptyLinePlaceholder":1084},[425,58802,58803,58805,58807],{"class":427,"line":17901},[425,58804,52540],{"class":701},[425,58806,51390],{"class":52055},[425,58808,52062],{"class":701},[19,58810,58811],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[14,58813,58815],{"id":58814},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[416,58817,58819],{"className":51388,"code":58818,"language":51390,"meta":395,"style":395},"\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",[422,58820,58821,58831,58845,58849,58857,58871,58891,58903,58911,58915,58923,58935,58943,58962,58979,58995,59005,59009,59017,59025,59029],{"__ignoreMap":395},[425,58822,58823,58825,58827,58829],{"class":427,"line":428},[425,58824,52052],{"class":701},[425,58826,52056],{"class":52055},[425,58828,52059],{"class":431},[425,58830,52062],{"class":701},[425,58832,58833,58835,58837,58839,58841,58843],{"class":427,"line":698},[425,58834,2057],{"class":701},[425,58836,51390],{"class":52055},[425,58838,52071],{"class":431},[425,58840,1204],{"class":701},[425,58842,52076],{"class":435},[425,58844,52062],{"class":701},[425,58846,58847],{"class":427,"line":710},[425,58848,3400],{"emptyLinePlaceholder":1084},[425,58850,58851,58853,58855],{"class":427,"line":721},[425,58852,2057],{"class":701},[425,58854,52089],{"class":52055},[425,58856,52062],{"class":701},[425,58858,58859,58861,58863,58865,58867,58869],{"class":427,"line":735},[425,58860,52899],{"class":701},[425,58862,52099],{"class":52055},[425,58864,52102],{"class":431},[425,58866,1204],{"class":701},[425,58868,52107],{"class":435},[425,58870,52062],{"class":701},[425,58872,58873,58875,58877,58879,58881,58883,58885,58887,58889],{"class":427,"line":743},[425,58874,52899],{"class":701},[425,58876,52099],{"class":52055},[425,58878,15917],{"class":431},[425,58880,1204],{"class":701},[425,58882,52146],{"class":435},[425,58884,52126],{"class":431},[425,58886,1204],{"class":701},[425,58888,52153],{"class":435},[425,58890,52062],{"class":701},[425,58892,58893,58895,58897,58899,58901],{"class":427,"line":751},[425,58894,52899],{"class":701},[425,58896,52162],{"class":52055},[425,58898,52165],{"class":701},[425,58900,52162],{"class":52055},[425,58902,52062],{"class":701},[425,58904,58905,58907,58909],{"class":427,"line":759},[425,58906,52540],{"class":701},[425,58908,52089],{"class":52055},[425,58910,52062],{"class":701},[425,58912,58913],{"class":427,"line":770},[425,58914,3400],{"emptyLinePlaceholder":1084},[425,58916,58917,58919,58921],{"class":427,"line":780},[425,58918,2057],{"class":701},[425,58920,52555],{"class":52055},[425,58922,52062],{"class":701},[425,58924,58925,58927,58929,58931,58933],{"class":427,"line":790},[425,58926,52899],{"class":701},[425,58928,54642],{"class":52055},[425,58930,54648],{"class":701},[425,58932,54642],{"class":52055},[425,58934,52062],{"class":701},[425,58936,58937,58939,58941],{"class":427,"line":805},[425,58938,52899],{"class":701},[425,58940,52568],{"class":52055},[425,58942,52062],{"class":701},[425,58944,58945,58947,58949,58951,58953,58955,58957,58960],{"class":427,"line":818},[425,58946,12220],{"class":1155},[425,58948,55146],{"class":691},[425,58950,14563],{"class":1155},[425,58952,55151],{"class":701},[425,58954,55154],{"class":431},[425,58956,1159],{"class":701},[425,58958,58959],{"class":435},"'button'",[425,58961,1165],{"class":701},[425,58963,58964,58967,58969,58971,58973,58975,58977],{"class":427,"line":831},[425,58965,58966],{"class":701},"    btn.",[425,58968,58568],{"class":431},[425,58970,1159],{"class":701},[425,58972,58573],{"class":435},[425,58974,13434],{"class":701},[425,58976,55204],{"class":1155},[425,58978,55207],{"class":701},[425,58980,58981,58984,58986,58988,58991,58993],{"class":427,"line":841},[425,58982,58983],{"class":1155},"      const",[425,58985,3240],{"class":691},[425,58987,14563],{"class":1155},[425,58989,58990],{"class":701}," Math.",[425,58992,58615],{"class":431},[425,58994,2976],{"class":701},[425,58996,58997,59000,59003],{"class":427,"line":852},[425,58998,58999],{"class":701},"      console.",[425,59001,59002],{"class":431},"log",[425,59004,1172],{"class":701},[425,59006,59007],{"class":427,"line":862},[425,59008,34216],{"class":701},[425,59010,59011,59013,59015],{"class":427,"line":878},[425,59012,53172],{"class":701},[425,59014,52568],{"class":52055},[425,59016,52062],{"class":701},[425,59018,59019,59021,59023],{"class":427,"line":914},[425,59020,52540],{"class":701},[425,59022,52555],{"class":52055},[425,59024,52062],{"class":701},[425,59026,59027],{"class":427,"line":943},[425,59028,3400],{"emptyLinePlaceholder":1084},[425,59030,59031,59033,59035],{"class":427,"line":956},[425,59032,52540],{"class":701},[425,59034,51390],{"class":52055},[425,59036,52062],{"class":701},[19,59038,59039],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,59041,59042],{},"常量不可以重新赋值",[19,59044,59045],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[416,59047,59049],{"className":51388,"code":59048,"language":51390,"meta":395,"style":395},"\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",[422,59050,59051,59061,59075,59079,59087,59101,59121,59133,59141,59145,59153,59165,59173,59184,59202,59218,59232,59240,59244,59252,59260,59264],{"__ignoreMap":395},[425,59052,59053,59055,59057,59059],{"class":427,"line":428},[425,59054,52052],{"class":701},[425,59056,52056],{"class":52055},[425,59058,52059],{"class":431},[425,59060,52062],{"class":701},[425,59062,59063,59065,59067,59069,59071,59073],{"class":427,"line":698},[425,59064,2057],{"class":701},[425,59066,51390],{"class":52055},[425,59068,52071],{"class":431},[425,59070,1204],{"class":701},[425,59072,52076],{"class":435},[425,59074,52062],{"class":701},[425,59076,59077],{"class":427,"line":710},[425,59078,3400],{"emptyLinePlaceholder":1084},[425,59080,59081,59083,59085],{"class":427,"line":721},[425,59082,2057],{"class":701},[425,59084,52089],{"class":52055},[425,59086,52062],{"class":701},[425,59088,59089,59091,59093,59095,59097,59099],{"class":427,"line":735},[425,59090,52899],{"class":701},[425,59092,52099],{"class":52055},[425,59094,52102],{"class":431},[425,59096,1204],{"class":701},[425,59098,52107],{"class":435},[425,59100,52062],{"class":701},[425,59102,59103,59105,59107,59109,59111,59113,59115,59117,59119],{"class":427,"line":743},[425,59104,52899],{"class":701},[425,59106,52099],{"class":52055},[425,59108,15917],{"class":431},[425,59110,1204],{"class":701},[425,59112,52146],{"class":435},[425,59114,52126],{"class":431},[425,59116,1204],{"class":701},[425,59118,52153],{"class":435},[425,59120,52062],{"class":701},[425,59122,59123,59125,59127,59129,59131],{"class":427,"line":751},[425,59124,52899],{"class":701},[425,59126,52162],{"class":52055},[425,59128,52165],{"class":701},[425,59130,52162],{"class":52055},[425,59132,52062],{"class":701},[425,59134,59135,59137,59139],{"class":427,"line":759},[425,59136,52540],{"class":701},[425,59138,52089],{"class":52055},[425,59140,52062],{"class":701},[425,59142,59143],{"class":427,"line":770},[425,59144,3400],{"emptyLinePlaceholder":1084},[425,59146,59147,59149,59151],{"class":427,"line":780},[425,59148,2057],{"class":701},[425,59150,52555],{"class":52055},[425,59152,52062],{"class":701},[425,59154,59155,59157,59159,59161,59163],{"class":427,"line":790},[425,59156,52899],{"class":701},[425,59158,54642],{"class":52055},[425,59160,54648],{"class":701},[425,59162,54642],{"class":52055},[425,59164,52062],{"class":701},[425,59166,59167,59169,59171],{"class":427,"line":805},[425,59168,52899],{"class":701},[425,59170,52568],{"class":52055},[425,59172,52062],{"class":701},[425,59174,59175,59177,59179,59181],{"class":427,"line":818},[425,59176,12220],{"class":1155},[425,59178,3240],{"class":691},[425,59180,14563],{"class":1155},[425,59182,59183],{"class":691}," 10\n",[425,59185,59186,59188,59190,59192,59194,59196,59198,59200],{"class":427,"line":831},[425,59187,12220],{"class":1155},[425,59189,55146],{"class":691},[425,59191,14563],{"class":1155},[425,59193,55151],{"class":701},[425,59195,55154],{"class":431},[425,59197,1159],{"class":701},[425,59199,58959],{"class":435},[425,59201,1165],{"class":701},[425,59203,59204,59206,59208,59210,59212,59214,59216],{"class":427,"line":841},[425,59205,58966],{"class":701},[425,59207,58568],{"class":431},[425,59209,1159],{"class":701},[425,59211,58573],{"class":435},[425,59213,13434],{"class":701},[425,59215,55204],{"class":1155},[425,59217,55207],{"class":701},[425,59219,59220,59222,59224,59226,59228,59230],{"class":427,"line":852},[425,59221,58983],{"class":1155},[425,59223,3240],{"class":691},[425,59225,14563],{"class":1155},[425,59227,58990],{"class":701},[425,59229,58615],{"class":431},[425,59231,2976],{"class":701},[425,59233,59234,59236,59238],{"class":427,"line":862},[425,59235,58999],{"class":701},[425,59237,59002],{"class":431},[425,59239,1172],{"class":701},[425,59241,59242],{"class":427,"line":878},[425,59243,34216],{"class":701},[425,59245,59246,59248,59250],{"class":427,"line":914},[425,59247,53172],{"class":701},[425,59249,52568],{"class":52055},[425,59251,52062],{"class":701},[425,59253,59254,59256,59258],{"class":427,"line":943},[425,59255,52540],{"class":701},[425,59257,52555],{"class":52055},[425,59259,52062],{"class":701},[425,59261,59262],{"class":427,"line":956},[425,59263,3400],{"emptyLinePlaceholder":1084},[425,59265,59266,59268,59270],{"class":427,"line":964},[425,59267,52540],{"class":701},[425,59269,51390],{"class":52055},[425,59271,52062],{"class":701},[19,59273,59274],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[416,59276,59278],{"className":51388,"code":59277,"language":51390,"meta":395,"style":395},"\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",[422,59279,59280,59290,59304,59308,59316,59330,59350,59362,59370,59374,59382,59394,59402,59412,59430,59446,59459,59467,59471,59479,59487,59491],{"__ignoreMap":395},[425,59281,59282,59284,59286,59288],{"class":427,"line":428},[425,59283,52052],{"class":701},[425,59285,52056],{"class":52055},[425,59287,52059],{"class":431},[425,59289,52062],{"class":701},[425,59291,59292,59294,59296,59298,59300,59302],{"class":427,"line":698},[425,59293,2057],{"class":701},[425,59295,51390],{"class":52055},[425,59297,52071],{"class":431},[425,59299,1204],{"class":701},[425,59301,52076],{"class":435},[425,59303,52062],{"class":701},[425,59305,59306],{"class":427,"line":710},[425,59307,3400],{"emptyLinePlaceholder":1084},[425,59309,59310,59312,59314],{"class":427,"line":721},[425,59311,2057],{"class":701},[425,59313,52089],{"class":52055},[425,59315,52062],{"class":701},[425,59317,59318,59320,59322,59324,59326,59328],{"class":427,"line":735},[425,59319,52899],{"class":701},[425,59321,52099],{"class":52055},[425,59323,52102],{"class":431},[425,59325,1204],{"class":701},[425,59327,52107],{"class":435},[425,59329,52062],{"class":701},[425,59331,59332,59334,59336,59338,59340,59342,59344,59346,59348],{"class":427,"line":743},[425,59333,52899],{"class":701},[425,59335,52099],{"class":52055},[425,59337,15917],{"class":431},[425,59339,1204],{"class":701},[425,59341,52146],{"class":435},[425,59343,52126],{"class":431},[425,59345,1204],{"class":701},[425,59347,52153],{"class":435},[425,59349,52062],{"class":701},[425,59351,59352,59354,59356,59358,59360],{"class":427,"line":751},[425,59353,52899],{"class":701},[425,59355,52162],{"class":52055},[425,59357,52165],{"class":701},[425,59359,52162],{"class":52055},[425,59361,52062],{"class":701},[425,59363,59364,59366,59368],{"class":427,"line":759},[425,59365,52540],{"class":701},[425,59367,52089],{"class":52055},[425,59369,52062],{"class":701},[425,59371,59372],{"class":427,"line":770},[425,59373,3400],{"emptyLinePlaceholder":1084},[425,59375,59376,59378,59380],{"class":427,"line":780},[425,59377,2057],{"class":701},[425,59379,52555],{"class":52055},[425,59381,52062],{"class":701},[425,59383,59384,59386,59388,59390,59392],{"class":427,"line":790},[425,59385,52899],{"class":701},[425,59387,54642],{"class":52055},[425,59389,54648],{"class":701},[425,59391,54642],{"class":52055},[425,59393,52062],{"class":701},[425,59395,59396,59398,59400],{"class":427,"line":805},[425,59397,52899],{"class":701},[425,59399,52568],{"class":52055},[425,59401,52062],{"class":701},[425,59403,59404,59406,59408,59410],{"class":427,"line":818},[425,59405,12220],{"class":1155},[425,59407,3240],{"class":691},[425,59409,14563],{"class":1155},[425,59411,59183],{"class":691},[425,59413,59414,59416,59418,59420,59422,59424,59426,59428],{"class":427,"line":831},[425,59415,12220],{"class":1155},[425,59417,55146],{"class":691},[425,59419,14563],{"class":1155},[425,59421,55151],{"class":701},[425,59423,55154],{"class":431},[425,59425,1159],{"class":701},[425,59427,58959],{"class":435},[425,59429,1165],{"class":701},[425,59431,59432,59434,59436,59438,59440,59442,59444],{"class":427,"line":841},[425,59433,58966],{"class":701},[425,59435,58568],{"class":431},[425,59437,1159],{"class":701},[425,59439,58573],{"class":435},[425,59441,13434],{"class":701},[425,59443,55204],{"class":1155},[425,59445,55207],{"class":701},[425,59447,59448,59451,59453,59455,59457],{"class":427,"line":852},[425,59449,59450],{"class":701},"      num ",[425,59452,1204],{"class":1155},[425,59454,58990],{"class":701},[425,59456,58615],{"class":431},[425,59458,2976],{"class":701},[425,59460,59461,59463,59465],{"class":427,"line":862},[425,59462,58999],{"class":701},[425,59464,59002],{"class":431},[425,59466,1172],{"class":701},[425,59468,59469],{"class":427,"line":878},[425,59470,34216],{"class":701},[425,59472,59473,59475,59477],{"class":427,"line":914},[425,59474,53172],{"class":701},[425,59476,52568],{"class":52055},[425,59478,52062],{"class":701},[425,59480,59481,59483,59485],{"class":427,"line":943},[425,59482,52540],{"class":701},[425,59484,52555],{"class":52055},[425,59486,52062],{"class":701},[425,59488,59489],{"class":427,"line":956},[425,59490,3400],{"emptyLinePlaceholder":1084},[425,59492,59493,59495,59497],{"class":427,"line":964},[425,59494,52540],{"class":701},[425,59496,51390],{"class":52055},[425,59498,52062],{"class":701},[19,59500,59501],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[14,59503,59505],{"id":59504},"_324-事件监听版本","3.2.4 事件监听版本",[19,59507,59508],{},[393,59509],{"alt":395,"src":59510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,59512,59513],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,59515,59516],{},"这种方式会覆盖前边的事件监听:",[416,59518,59520],{"className":51388,"code":59519,"language":51390,"meta":395,"style":395},"\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",[422,59521,59522,59532,59546,59550,59558,59572,59592,59604,59612,59616,59624,59636,59644,59662,59676,59687,59691,59703,59713,59717,59725,59733,59737],{"__ignoreMap":395},[425,59523,59524,59526,59528,59530],{"class":427,"line":428},[425,59525,52052],{"class":701},[425,59527,52056],{"class":52055},[425,59529,52059],{"class":431},[425,59531,52062],{"class":701},[425,59533,59534,59536,59538,59540,59542,59544],{"class":427,"line":698},[425,59535,2057],{"class":701},[425,59537,51390],{"class":52055},[425,59539,52071],{"class":431},[425,59541,1204],{"class":701},[425,59543,52076],{"class":435},[425,59545,52062],{"class":701},[425,59547,59548],{"class":427,"line":710},[425,59549,3400],{"emptyLinePlaceholder":1084},[425,59551,59552,59554,59556],{"class":427,"line":721},[425,59553,2057],{"class":701},[425,59555,52089],{"class":52055},[425,59557,52062],{"class":701},[425,59559,59560,59562,59564,59566,59568,59570],{"class":427,"line":735},[425,59561,52899],{"class":701},[425,59563,52099],{"class":52055},[425,59565,52102],{"class":431},[425,59567,1204],{"class":701},[425,59569,52107],{"class":435},[425,59571,52062],{"class":701},[425,59573,59574,59576,59578,59580,59582,59584,59586,59588,59590],{"class":427,"line":743},[425,59575,52899],{"class":701},[425,59577,52099],{"class":52055},[425,59579,15917],{"class":431},[425,59581,1204],{"class":701},[425,59583,52146],{"class":435},[425,59585,52126],{"class":431},[425,59587,1204],{"class":701},[425,59589,52153],{"class":435},[425,59591,52062],{"class":701},[425,59593,59594,59596,59598,59600,59602],{"class":427,"line":751},[425,59595,52899],{"class":701},[425,59597,52162],{"class":52055},[425,59599,52165],{"class":701},[425,59601,52162],{"class":52055},[425,59603,52062],{"class":701},[425,59605,59606,59608,59610],{"class":427,"line":759},[425,59607,52540],{"class":701},[425,59609,52089],{"class":52055},[425,59611,52062],{"class":701},[425,59613,59614],{"class":427,"line":770},[425,59615,3400],{"emptyLinePlaceholder":1084},[425,59617,59618,59620,59622],{"class":427,"line":780},[425,59619,2057],{"class":701},[425,59621,52555],{"class":52055},[425,59623,52062],{"class":701},[425,59625,59626,59628,59630,59632,59634],{"class":427,"line":790},[425,59627,52899],{"class":701},[425,59629,54642],{"class":52055},[425,59631,54648],{"class":701},[425,59633,54642],{"class":52055},[425,59635,52062],{"class":701},[425,59637,59638,59640,59642],{"class":427,"line":805},[425,59639,52899],{"class":701},[425,59641,52568],{"class":52055},[425,59643,52062],{"class":701},[425,59645,59646,59648,59650,59652,59654,59656,59658,59660],{"class":427,"line":818},[425,59647,12220],{"class":1155},[425,59649,55146],{"class":691},[425,59651,14563],{"class":1155},[425,59653,55151],{"class":701},[425,59655,55154],{"class":431},[425,59657,1159],{"class":701},[425,59659,58959],{"class":435},[425,59661,1165],{"class":701},[425,59663,59664,59666,59669,59671,59674],{"class":427,"line":831},[425,59665,58966],{"class":701},[425,59667,59668],{"class":431},"onclick",[425,59670,14563],{"class":1155},[425,59672,59673],{"class":1155}," function",[425,59675,55207],{"class":701},[425,59677,59678,59681,59683,59685],{"class":427,"line":841},[425,59679,59680],{"class":431},"      alert",[425,59682,1159],{"class":701},[425,59684,1620],{"class":691},[425,59686,1165],{"class":701},[425,59688,59689],{"class":427,"line":852},[425,59690,3187],{"class":701},[425,59692,59693,59695,59697,59699,59701],{"class":427,"line":862},[425,59694,58966],{"class":701},[425,59696,59668],{"class":431},[425,59698,14563],{"class":1155},[425,59700,59673],{"class":1155},[425,59702,55207],{"class":701},[425,59704,59705,59707,59709,59711],{"class":427,"line":878},[425,59706,59680],{"class":431},[425,59708,1159],{"class":701},[425,59710,1898],{"class":691},[425,59712,1165],{"class":701},[425,59714,59715],{"class":427,"line":914},[425,59716,3187],{"class":701},[425,59718,59719,59721,59723],{"class":427,"line":943},[425,59720,53172],{"class":701},[425,59722,52568],{"class":52055},[425,59724,52062],{"class":701},[425,59726,59727,59729,59731],{"class":427,"line":956},[425,59728,52540],{"class":701},[425,59730,52555],{"class":52055},[425,59732,52062],{"class":701},[425,59734,59735],{"class":427,"line":964},[425,59736,3400],{"emptyLinePlaceholder":1084},[425,59738,59739,59741,59743],{"class":427,"line":2733},[425,59740,52540],{"class":701},[425,59742,51390],{"class":52055},[425,59744,52062],{"class":701},[19,59746,59747],{},"只要点击就输出结果为22,前边11被覆盖了",[416,59749,59751],{"className":51388,"code":59750,"language":51390,"meta":395,"style":395},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[422,59752,59753,59758,59763,59767,59772,59777],{"__ignoreMap":395},[425,59754,59755],{"class":427,"line":428},[425,59756,59757],{"class":701},"  btn.addEventListener('click', function () {\n",[425,59759,59760],{"class":427,"line":698},[425,59761,59762],{"class":701},"      alert(11)\n",[425,59764,59765],{"class":427,"line":710},[425,59766,34216],{"class":701},[425,59768,59769],{"class":427,"line":721},[425,59770,59771],{"class":701},"    btn.addEventListener('click', function () {\n",[425,59773,59774],{"class":427,"line":735},[425,59775,59776],{"class":701},"      alert(22)\n",[425,59778,59779],{"class":427,"line":743},[425,59780,34216],{"class":701},[19,59782,59783],{},"点击第一次输出11,第二次点击为22",[14,59785,59787],{"id":59786},"_325-事件类型","3.2.5 事件类型",[19,59789,59790],{},[393,59791],{"alt":395,"src":59792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22995,59794,59796],{"id":59795},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,59798,59799],{},"补充知识:",[19,59801,59802],{},"轮播图自动播放模块,可以使用",[19,59804,59805],{},"let timerId = setInterval(function () {",[19,59807,59808],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,59810,59811],{},"用js方法模拟进行点击事件,click必须加()",[19,59813,59814],{},"next.click()",[19,59816,59817],{},"}, 1000)",[19,59819,59820],{},[393,59821],{"alt":395,"src":59822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[416,59824,59826],{"className":53822,"code":59825,"language":53824,"meta":395,"style":395},"\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",[422,59827,59828,59832,59842,59856,59860,59868,59883,59903,59923,59936,59944,59949,59954,59958,59962,59967,59972,59977,59982,59986,59990,59995,60000,60005,60009,60013,60018,60022,60027,60032,60036,60040,60045,60050,60055,60060,60065,60069,60073,60078,60083,60088,60093,60098,60102,60106,60111,60116,60121,60126,60131,60136,60141,60146,60151,60156,60160,60164,60169,60174,60178,60182,60187,60192,60196,60201,60206,60210,60214,60219,60223,60228,60233,60237,60242,60246,60250,60255,60260,60265,60270,60275,60280,60285,60289,60293,60297,60302,60307,60312,60317,60321,60329,60337,60341,60349,60364,60378,60399,60407,60421,60434,60449,60468,60480,60492,60504,60516,60528,60540,60552,60560,60575,60599,60623,60631,60639,60647,60655,60660,60665,60670,60675,60680,60685,60690,60695,60700,60705,60709,60714,60719,60724,60729,60734,60739,60744,60749,60754,60758,60763,60768,60773,60778,60783,60788,60793,60798,60803,60808,60813,60818,60822,60826,60831,60836,60841,60845,60850,60855,60860,60865,60870,60874,60879,60883,60887,60891,60895,60899,60903,60908,60913,60918,60923,60928,60933,60938,60943,60948,60952,60956,60961,60966,60971,60976,60981,60985,60990,60995,61000,61005,61010,61015,61019,61023,61028,61032,61037,61041,61046,61051,61056,61061,61066,61071,61075,61083,61091,61095],{"__ignoreMap":395},[425,59829,59830],{"class":427,"line":428},[425,59831,3400],{"emptyLinePlaceholder":1084},[425,59833,59834,59836,59838,59840],{"class":427,"line":698},[425,59835,52052],{"class":701},[425,59837,52056],{"class":1155},[425,59839,52059],{"class":691},[425,59841,52062],{"class":701},[425,59843,59844,59846,59848,59850,59852,59854],{"class":427,"line":710},[425,59845,2057],{"class":701},[425,59847,51390],{"class":52055},[425,59849,52071],{"class":431},[425,59851,1204],{"class":701},[425,59853,52076],{"class":435},[425,59855,52062],{"class":701},[425,59857,59858],{"class":427,"line":721},[425,59859,3400],{"emptyLinePlaceholder":1084},[425,59861,59862,59864,59866],{"class":427,"line":735},[425,59863,2057],{"class":701},[425,59865,52089],{"class":52055},[425,59867,52062],{"class":701},[425,59869,59870,59872,59874,59876,59878,59880],{"class":427,"line":743},[425,59871,52899],{"class":701},[425,59873,52099],{"class":52055},[425,59875,52102],{"class":431},[425,59877,1204],{"class":701},[425,59879,52107],{"class":435},[425,59881,59882],{"class":701}," \u002F>\n",[425,59884,59885,59887,59889,59891,59893,59895,59897,59899,59901],{"class":427,"line":751},[425,59886,52899],{"class":701},[425,59888,52099],{"class":52055},[425,59890,52118],{"class":431},[425,59892,1204],{"class":701},[425,59894,52123],{"class":435},[425,59896,52126],{"class":431},[425,59898,1204],{"class":701},[425,59900,52131],{"class":435},[425,59902,59882],{"class":701},[425,59904,59905,59907,59909,59911,59913,59915,59917,59919,59921],{"class":427,"line":759},[425,59906,52899],{"class":701},[425,59908,52099],{"class":52055},[425,59910,15917],{"class":431},[425,59912,1204],{"class":701},[425,59914,52146],{"class":435},[425,59916,52126],{"class":431},[425,59918,1204],{"class":701},[425,59920,52153],{"class":435},[425,59922,59882],{"class":701},[425,59924,59925,59927,59929,59932,59934],{"class":427,"line":770},[425,59926,52899],{"class":701},[425,59928,52162],{"class":52055},[425,59930,59931],{"class":701},">轮播图点击切换\u003C\u002F",[425,59933,52162],{"class":52055},[425,59935,52062],{"class":701},[425,59937,59938,59940,59942],{"class":427,"line":780},[425,59939,52899],{"class":701},[425,59941,1074],{"class":52055},[425,59943,52062],{"class":701},[425,59945,59946],{"class":427,"line":790},[425,59947,59948],{"class":701},"    * {\n",[425,59950,59951],{"class":427,"line":805},[425,59952,59953],{"class":701},"      box-sizing: border-box;\n",[425,59955,59956],{"class":427,"line":818},[425,59957,3187],{"class":701},[425,59959,59960],{"class":427,"line":831},[425,59961,3400],{"emptyLinePlaceholder":1084},[425,59963,59964],{"class":427,"line":841},[425,59965,59966],{"class":701},"    .slider {\n",[425,59968,59969],{"class":427,"line":852},[425,59970,59971],{"class":701},"      width: 560px;\n",[425,59973,59974],{"class":427,"line":862},[425,59975,59976],{"class":701},"      height: 400px;\n",[425,59978,59979],{"class":427,"line":878},[425,59980,59981],{"class":701},"      overflow: hidden;\n",[425,59983,59984],{"class":427,"line":914},[425,59985,3187],{"class":701},[425,59987,59988],{"class":427,"line":943},[425,59989,3400],{"emptyLinePlaceholder":1084},[425,59991,59992],{"class":427,"line":956},[425,59993,59994],{"class":701},"    .slider-wrapper {\n",[425,59996,59997],{"class":427,"line":964},[425,59998,59999],{"class":701},"      width: 100%;\n",[425,60001,60002],{"class":427,"line":2733},[425,60003,60004],{"class":701},"      height: 320px;\n",[425,60006,60007],{"class":427,"line":2750},[425,60008,3187],{"class":701},[425,60010,60011],{"class":427,"line":2755},[425,60012,3400],{"emptyLinePlaceholder":1084},[425,60014,60015],{"class":427,"line":2760},[425,60016,60017],{"class":701},"    .slider-wrapper img {\n",[425,60019,60020],{"class":427,"line":2765},[425,60021,59999],{"class":701},[425,60023,60024],{"class":427,"line":2779},[425,60025,60026],{"class":701},"      height: 100%;\n",[425,60028,60029],{"class":427,"line":2784},[425,60030,60031],{"class":701},"      display: block;\n",[425,60033,60034],{"class":427,"line":3577},[425,60035,3187],{"class":701},[425,60037,60038],{"class":427,"line":3591},[425,60039,3400],{"emptyLinePlaceholder":1084},[425,60041,60042],{"class":427,"line":3599},[425,60043,60044],{"class":701},"    .slider-footer {\n",[425,60046,60047],{"class":427,"line":3604},[425,60048,60049],{"class":701},"      height: 80px;\n",[425,60051,60052],{"class":427,"line":3610},[425,60053,60054],{"class":701},"      background-color: rgb(100, 67, 68);\n",[425,60056,60057],{"class":427,"line":3616},[425,60058,60059],{"class":701},"      padding: 12px 12px 0 12px;\n",[425,60061,60062],{"class":427,"line":3621},[425,60063,60064],{"class":701},"      position: relative;\n",[425,60066,60067],{"class":427,"line":8948},[425,60068,3187],{"class":701},[425,60070,60071],{"class":427,"line":8972},[425,60072,3400],{"emptyLinePlaceholder":1084},[425,60074,60075],{"class":427,"line":8977},[425,60076,60077],{"class":701},"    .slider-footer .toggle {\n",[425,60079,60080],{"class":427,"line":8983},[425,60081,60082],{"class":701},"      position: absolute;\n",[425,60084,60085],{"class":427,"line":9010},[425,60086,60087],{"class":701},"      right: 0;\n",[425,60089,60090],{"class":427,"line":9015},[425,60091,60092],{"class":701},"      top: 12px;\n",[425,60094,60095],{"class":427,"line":9021},[425,60096,60097],{"class":701},"      display: flex;\n",[425,60099,60100],{"class":427,"line":9033},[425,60101,3187],{"class":701},[425,60103,60104],{"class":427,"line":9045},[425,60105,3400],{"emptyLinePlaceholder":1084},[425,60107,60108],{"class":427,"line":9057},[425,60109,60110],{"class":701},"    .slider-footer .toggle button {\n",[425,60112,60113],{"class":427,"line":10715},[425,60114,60115],{"class":701},"      margin-right: 12px;\n",[425,60117,60118],{"class":427,"line":10740},[425,60119,60120],{"class":701},"      width: 28px;\n",[425,60122,60123],{"class":427,"line":10763},[425,60124,60125],{"class":701},"      height: 28px;\n",[425,60127,60128],{"class":427,"line":10787},[425,60129,60130],{"class":701},"      appearance: none;\n",[425,60132,60133],{"class":427,"line":10792},[425,60134,60135],{"class":701},"      border: none;\n",[425,60137,60138],{"class":427,"line":10797},[425,60139,60140],{"class":701},"      background: rgba(255, 255, 255, 0.1);\n",[425,60142,60143],{"class":427,"line":10802},[425,60144,60145],{"class":701},"      color: #fff;\n",[425,60147,60148],{"class":427,"line":10811},[425,60149,60150],{"class":701},"      border-radius: 4px;\n",[425,60152,60153],{"class":427,"line":10816},[425,60154,60155],{"class":701},"      cursor: pointer;\n",[425,60157,60158],{"class":427,"line":10822},[425,60159,3187],{"class":701},[425,60161,60162],{"class":427,"line":10843},[425,60163,3400],{"emptyLinePlaceholder":1084},[425,60165,60166],{"class":427,"line":10849},[425,60167,60168],{"class":701},"    .slider-footer .toggle button:hover {\n",[425,60170,60171],{"class":427,"line":10863},[425,60172,60173],{"class":701},"      background: rgba(255, 255, 255, 0.2);\n",[425,60175,60176],{"class":427,"line":10869},[425,60177,3187],{"class":701},[425,60179,60180],{"class":427,"line":10896},[425,60181,3400],{"emptyLinePlaceholder":1084},[425,60183,60184],{"class":427,"line":10905},[425,60185,60186],{"class":701},"    .slider-footer p {\n",[425,60188,60189],{"class":427,"line":10911},[425,60190,60191],{"class":701},"      margin: 0;\n",[425,60193,60194],{"class":427,"line":10919},[425,60195,60145],{"class":701},[425,60197,60198],{"class":427,"line":10924},[425,60199,60200],{"class":701},"      font-size: 18px;\n",[425,60202,60203],{"class":427,"line":17601},[425,60204,60205],{"class":701},"      margin-bottom: 10px;\n",[425,60207,60208],{"class":427,"line":17607},[425,60209,3187],{"class":701},[425,60211,60212],{"class":427,"line":17630},[425,60213,3400],{"emptyLinePlaceholder":1084},[425,60215,60216],{"class":427,"line":17636},[425,60217,60218],{"class":701},"    .slider-indicator {\n",[425,60220,60221],{"class":427,"line":17659},[425,60222,60191],{"class":701},[425,60224,60225],{"class":427,"line":17673},[425,60226,60227],{"class":701},"      padding: 0;\n",[425,60229,60230],{"class":427,"line":17693},[425,60231,60232],{"class":701},"      list-style: none;\n",[425,60234,60235],{"class":427,"line":17699},[425,60236,60097],{"class":701},[425,60238,60239],{"class":427,"line":17710},[425,60240,60241],{"class":701},"      align-items: center;\n",[425,60243,60244],{"class":427,"line":17733},[425,60245,3187],{"class":701},[425,60247,60248],{"class":427,"line":17755},[425,60249,3400],{"emptyLinePlaceholder":1084},[425,60251,60252],{"class":427,"line":17760},[425,60253,60254],{"class":701},"    .slider-indicator li {\n",[425,60256,60257],{"class":427,"line":17766},[425,60258,60259],{"class":701},"      width: 8px;\n",[425,60261,60262],{"class":427,"line":17780},[425,60263,60264],{"class":701},"      height: 8px;\n",[425,60266,60267],{"class":427,"line":17793},[425,60268,60269],{"class":701},"      margin: 4px;\n",[425,60271,60272],{"class":427,"line":17798},[425,60273,60274],{"class":701},"      border-radius: 50%;\n",[425,60276,60277],{"class":427,"line":17812},[425,60278,60279],{"class":701},"      background: #fff;\n",[425,60281,60282],{"class":427,"line":17817},[425,60283,60284],{"class":701},"      opacity: 0.4;\n",[425,60286,60287],{"class":427,"line":17823},[425,60288,60155],{"class":701},[425,60290,60291],{"class":427,"line":17828},[425,60292,3187],{"class":701},[425,60294,60295],{"class":427,"line":17842},[425,60296,3400],{"emptyLinePlaceholder":1084},[425,60298,60299],{"class":427,"line":17847},[425,60300,60301],{"class":701},"    .slider-indicator li.active {\n",[425,60303,60304],{"class":427,"line":17852},[425,60305,60306],{"class":701},"      width: 12px;\n",[425,60308,60309],{"class":427,"line":17866},[425,60310,60311],{"class":701},"      height: 12px;\n",[425,60313,60314],{"class":427,"line":17878},[425,60315,60316],{"class":701},"      opacity: 1;\n",[425,60318,60319],{"class":427,"line":17883},[425,60320,3187],{"class":701},[425,60322,60323,60325,60327],{"class":427,"line":17896},[425,60324,53172],{"class":701},[425,60326,1074],{"class":52055},[425,60328,52062],{"class":701},[425,60330,60331,60333,60335],{"class":427,"line":17901},[425,60332,52540],{"class":701},[425,60334,52089],{"class":52055},[425,60336,52062],{"class":701},[425,60338,60339],{"class":427,"line":17906},[425,60340,3400],{"emptyLinePlaceholder":1084},[425,60342,60343,60345,60347],{"class":427,"line":17911},[425,60344,2057],{"class":701},[425,60346,52555],{"class":52055},[425,60348,52062],{"class":701},[425,60350,60351,60353,60355,60357,60359,60362],{"class":427,"line":17924},[425,60352,52899],{"class":701},[425,60354,52366],{"class":52055},[425,60356,54241],{"class":431},[425,60358,1204],{"class":701},[425,60360,60361],{"class":435},"\"slider\"",[425,60363,52062],{"class":701},[425,60365,60366,60368,60370,60372,60374,60376],{"class":427,"line":17929},[425,60367,52096],{"class":701},[425,60369,52366],{"class":52055},[425,60371,54241],{"class":431},[425,60373,1204],{"class":701},[425,60375,55982],{"class":435},[425,60377,52062],{"class":701},[425,60379,60380,60382,60384,60386,60388,60391,60393,60395,60397],{"class":427,"line":33388},[425,60381,55989],{"class":701},[425,60383,393],{"class":52055},[425,60385,55994],{"class":431},[425,60387,1204],{"class":701},[425,60389,60390],{"class":435},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[425,60392,56002],{"class":431},[425,60394,1204],{"class":701},[425,60396,8652],{"class":435},[425,60398,59882],{"class":701},[425,60400,60401,60403,60405],{"class":427,"line":33394},[425,60402,52531],{"class":701},[425,60404,52366],{"class":52055},[425,60406,52062],{"class":701},[425,60408,60409,60411,60413,60415,60417,60419],{"class":427,"line":33400},[425,60410,52096],{"class":701},[425,60412,52366],{"class":52055},[425,60414,54241],{"class":431},[425,60416,1204],{"class":701},[425,60418,56029],{"class":435},[425,60420,52062],{"class":701},[425,60422,60423,60425,60427,60430,60432],{"class":427,"line":33406},[425,60424,55989],{"class":701},[425,60426,19],{"class":52055},[425,60428,60429],{"class":701},">对人类来说会不会太超前了？\u003C\u002F",[425,60431,19],{"class":52055},[425,60433,52062],{"class":701},[425,60435,60436,60438,60440,60442,60444,60447],{"class":427,"line":33412},[425,60437,55989],{"class":701},[425,60439,447],{"class":52055},[425,60441,54241],{"class":431},[425,60443,1204],{"class":701},[425,60445,60446],{"class":435},"\"slider-indicator\"",[425,60448,52062],{"class":701},[425,60450,60451,60453,60455,60457,60459,60462,60464,60466],{"class":427,"line":33423},[425,60452,56057],{"class":701},[425,60454,450],{"class":52055},[425,60456,54241],{"class":431},[425,60458,1204],{"class":701},[425,60460,60461],{"class":435},"\"active\"",[425,60463,56069],{"class":701},[425,60465,450],{"class":52055},[425,60467,52062],{"class":701},[425,60469,60470,60472,60474,60476,60478],{"class":427,"line":33429},[425,60471,56057],{"class":701},[425,60473,450],{"class":52055},[425,60475,56069],{"class":701},[425,60477,450],{"class":52055},[425,60479,52062],{"class":701},[425,60481,60482,60484,60486,60488,60490],{"class":427,"line":33449},[425,60483,56057],{"class":701},[425,60485,450],{"class":52055},[425,60487,56069],{"class":701},[425,60489,450],{"class":52055},[425,60491,52062],{"class":701},[425,60493,60494,60496,60498,60500,60502],{"class":427,"line":33455},[425,60495,56057],{"class":701},[425,60497,450],{"class":52055},[425,60499,56069],{"class":701},[425,60501,450],{"class":52055},[425,60503,52062],{"class":701},[425,60505,60506,60508,60510,60512,60514],{"class":427,"line":33466},[425,60507,56057],{"class":701},[425,60509,450],{"class":52055},[425,60511,56069],{"class":701},[425,60513,450],{"class":52055},[425,60515,52062],{"class":701},[425,60517,60518,60520,60522,60524,60526],{"class":427,"line":33472},[425,60519,56057],{"class":701},[425,60521,450],{"class":52055},[425,60523,56069],{"class":701},[425,60525,450],{"class":52055},[425,60527,52062],{"class":701},[425,60529,60530,60532,60534,60536,60538],{"class":427,"line":33478},[425,60531,56057],{"class":701},[425,60533,450],{"class":52055},[425,60535,56069],{"class":701},[425,60537,450],{"class":52055},[425,60539,52062],{"class":701},[425,60541,60542,60544,60546,60548,60550],{"class":427,"line":33484},[425,60543,56057],{"class":701},[425,60545,450],{"class":52055},[425,60547,56069],{"class":701},[425,60549,450],{"class":52055},[425,60551,52062],{"class":701},[425,60553,60554,60556,60558],{"class":427,"line":33490},[425,60555,56162],{"class":701},[425,60557,447],{"class":52055},[425,60559,52062],{"class":701},[425,60561,60562,60564,60566,60568,60570,60573],{"class":427,"line":33496},[425,60563,55989],{"class":701},[425,60565,52366],{"class":52055},[425,60567,54241],{"class":431},[425,60569,1204],{"class":701},[425,60571,60572],{"class":435},"\"toggle\"",[425,60574,52062],{"class":701},[425,60576,60577,60579,60581,60583,60585,60588,60590,60593,60595,60597],{"class":427,"line":33502},[425,60578,56057],{"class":701},[425,60580,54642],{"class":52055},[425,60582,54241],{"class":431},[425,60584,1204],{"class":701},[425,60586,60587],{"class":435},"\"prev\"",[425,60589,2107],{"class":701},[425,60591,60592],{"class":691},"&lt;",[425,60594,52540],{"class":701},[425,60596,54642],{"class":52055},[425,60598,52062],{"class":701},[425,60600,60601,60603,60605,60607,60609,60612,60614,60617,60619,60621],{"class":427,"line":33508},[425,60602,56057],{"class":701},[425,60604,54642],{"class":52055},[425,60606,54241],{"class":431},[425,60608,1204],{"class":701},[425,60610,60611],{"class":435},"\"next\"",[425,60613,2107],{"class":701},[425,60615,60616],{"class":691},"&gt;",[425,60618,52540],{"class":701},[425,60620,54642],{"class":52055},[425,60622,52062],{"class":701},[425,60624,60625,60627,60629],{"class":427,"line":33528},[425,60626,56162],{"class":701},[425,60628,52366],{"class":52055},[425,60630,52062],{"class":701},[425,60632,60633,60635,60637],{"class":427,"line":33534},[425,60634,52531],{"class":701},[425,60636,52366],{"class":52055},[425,60638,52062],{"class":701},[425,60640,60641,60643,60645],{"class":427,"line":33550},[425,60642,53172],{"class":701},[425,60644,52366],{"class":52055},[425,60646,52062],{"class":701},[425,60648,60649,60651,60653],{"class":427,"line":33556},[425,60650,52899],{"class":701},[425,60652,52568],{"class":52055},[425,60654,52062],{"class":701},[425,60656,60657],{"class":427,"line":33570},[425,60658,60659],{"class":701},"    \u002F\u002F 1. 初始数据\n",[425,60661,60662],{"class":427,"line":33576},[425,60663,60664],{"class":701},"    const data = [\n",[425,60666,60667],{"class":427,"line":33591},[425,60668,60669],{"class":701},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[425,60671,60672],{"class":427,"line":33597},[425,60673,60674],{"class":701},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[425,60676,60677],{"class":427,"line":33606},[425,60678,60679],{"class":701},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[425,60681,60682],{"class":427,"line":33612},[425,60683,60684],{"class":701},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[425,60686,60687],{"class":427,"line":33621},[425,60688,60689],{"class":701},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[425,60691,60692],{"class":427,"line":33627},[425,60693,60694],{"class":701},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[425,60696,60697],{"class":427,"line":33633},[425,60698,60699],{"class":701},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[425,60701,60702],{"class":427,"line":33642},[425,60703,60704],{"class":701},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[425,60706,60707],{"class":427,"line":33648},[425,60708,53864],{"class":701},[425,60710,60711],{"class":427,"line":33659},[425,60712,60713],{"class":701},"    \u002F\u002F 获取元素\n",[425,60715,60716],{"class":427,"line":33665},[425,60717,60718],{"class":701},"    const img = document.querySelector('.slider-wrapper img')\n",[425,60720,60721],{"class":427,"line":33684},[425,60722,60723],{"class":701},"    const p = document.querySelector('.slider-footer p')\n",[425,60725,60726],{"class":427,"line":33690},[425,60727,60728],{"class":701},"    const footer = document.querySelector('.slider-footer')\n",[425,60730,60731],{"class":427,"line":33701},[425,60732,60733],{"class":701},"    \u002F\u002F 1. 右按钮业务\n",[425,60735,60736],{"class":427,"line":33707},[425,60737,60738],{"class":701},"    \u002F\u002F 1.1 获取右侧按钮 \n",[425,60740,60741],{"class":427,"line":33727},[425,60742,60743],{"class":701},"    const next = document.querySelector('.next')\n",[425,60745,60746],{"class":427,"line":33743},[425,60747,60748],{"class":701},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[425,60750,60751],{"class":427,"line":33749},[425,60752,60753],{"class":701},"    \u002F\u002F 1.2 注册点击事件\n",[425,60755,60756],{"class":427,"line":33763},[425,60757,3400],{"emptyLinePlaceholder":1084},[425,60759,60760],{"class":427,"line":33769},[425,60761,60762],{"class":701},"    next.addEventListener('click', function () {\n",[425,60764,60765],{"class":427,"line":33775},[425,60766,60767],{"class":701},"      \u002F\u002F console.log(11)\n",[425,60769,60770],{"class":427,"line":33786},[425,60771,60772],{"class":701},"      i++\n",[425,60774,60775],{"class":427,"line":33792},[425,60776,60777],{"class":701},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[425,60779,60780],{"class":427,"line":33798},[425,60781,60782],{"class":701},"      \u002F\u002F if (i >= 8) {\n",[425,60784,60785],{"class":427,"line":33808},[425,60786,60787],{"class":701},"      \u002F\u002F   i = 0\n",[425,60789,60790],{"class":427,"line":33814},[425,60791,60792],{"class":701},"      \u002F\u002F }\n",[425,60794,60795],{"class":427,"line":33825},[425,60796,60797],{"class":701},"      i = i >= data.length ? 0 : i\n",[425,60799,60800],{"class":427,"line":33831},[425,60801,60802],{"class":701},"      \u002F\u002F 1.3 得到对应的对象\n",[425,60804,60805],{"class":427,"line":33841},[425,60806,60807],{"class":701},"      \u002F\u002F console.log(data[i])\n",[425,60809,60810],{"class":427,"line":33846},[425,60811,60812],{"class":701},"      \u002F\u002F 调用函数\n",[425,60814,60815],{"class":427,"line":33852},[425,60816,60817],{"class":701},"      toggle()\n",[425,60819,60820],{"class":427,"line":33901},[425,60821,34216],{"class":701},[425,60823,60824],{"class":427,"line":33948},[425,60825,3400],{"emptyLinePlaceholder":1084},[425,60827,60828],{"class":427,"line":33953},[425,60829,60830],{"class":701},"    \u002F\u002F 2. 左侧按钮业务\n",[425,60832,60833],{"class":427,"line":33959},[425,60834,60835],{"class":701},"    \u002F\u002F 2.1 获取左侧按钮 \n",[425,60837,60838],{"class":427,"line":33978},[425,60839,60840],{"class":701},"    const prev = document.querySelector('.prev')\n",[425,60842,60843],{"class":427,"line":33984},[425,60844,60753],{"class":701},[425,60846,60847],{"class":427,"line":34004},[425,60848,60849],{"class":701},"    prev.addEventListener('click', function () {\n",[425,60851,60852],{"class":427,"line":34010},[425,60853,60854],{"class":701},"      i--\n",[425,60856,60857],{"class":427,"line":34016},[425,60858,60859],{"class":701},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[425,60861,60862],{"class":427,"line":34026},[425,60863,60864],{"class":701},"      \u002F\u002F if (i \u003C 0) {\n",[425,60866,60867],{"class":427,"line":34031},[425,60868,60869],{"class":701},"      \u002F\u002F   i = 7\n",[425,60871,60872],{"class":427,"line":34037},[425,60873,60792],{"class":701},[425,60875,60876],{"class":427,"line":34053},[425,60877,60878],{"class":701},"      i = i \u003C 0 ? data.length - 1 : i\n",[425,60880,60881],{"class":427,"line":34098},[425,60882,60802],{"class":701},[425,60884,60885],{"class":427,"line":34104},[425,60886,60807],{"class":701},[425,60888,60889],{"class":427,"line":34110},[425,60890,60812],{"class":701},[425,60892,60893],{"class":427,"line":34116},[425,60894,60817],{"class":701},[425,60896,60897],{"class":427,"line":34127},[425,60898,34216],{"class":701},[425,60900,60901],{"class":427,"line":34133},[425,60902,3400],{"emptyLinePlaceholder":1084},[425,60904,60905],{"class":427,"line":34139},[425,60906,60907],{"class":701},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[425,60909,60910],{"class":427,"line":34145},[425,60911,60912],{"class":701},"    function toggle() {\n",[425,60914,60915],{"class":427,"line":34163},[425,60916,60917],{"class":701},"      \u002F\u002F 1.4 渲染对应的数据\n",[425,60919,60920],{"class":427,"line":34177},[425,60921,60922],{"class":701},"      img.src = data[i].url\n",[425,60924,60925],{"class":427,"line":34186},[425,60926,60927],{"class":701},"      p.innerHTML = data[i].title\n",[425,60929,60930],{"class":427,"line":34195},[425,60931,60932],{"class":701},"      footer.style.backgroundColor = data[i].color\n",[425,60934,60935],{"class":427,"line":34204},[425,60936,60937],{"class":701},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[425,60939,60940],{"class":427,"line":34213},[425,60941,60942],{"class":701},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[425,60944,60945],{"class":427,"line":34219},[425,60946,60947],{"class":701},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[425,60949,60950],{"class":427,"line":34225},[425,60951,3187],{"class":701},[425,60953,60954],{"class":427,"line":34233},[425,60955,3400],{"emptyLinePlaceholder":1084},[425,60957,60958],{"class":427,"line":34238},[425,60959,60960],{"class":701},"    \u002F\u002F 3. 自动播放模块\n",[425,60962,60963],{"class":427,"line":34244},[425,60964,60965],{"class":701},"    let timerId = setInterval(function () {\n",[425,60967,60968],{"class":427,"line":34255},[425,60969,60970],{"class":701},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[425,60972,60973],{"class":427,"line":34261},[425,60974,60975],{"class":701},"      next.click()\n",[425,60977,60978],{"class":427,"line":34281},[425,60979,60980],{"class":701},"    }, 1000)\n",[425,60982,60983],{"class":427,"line":34287},[425,60984,3400],{"emptyLinePlaceholder":1084},[425,60986,60987],{"class":427,"line":34293},[425,60988,60989],{"class":701},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[425,60991,60992],{"class":427,"line":34299},[425,60993,60994],{"class":701},"    const slider = document.querySelector('.slider')\n",[425,60996,60997],{"class":427,"line":34316},[425,60998,60999],{"class":701},"    \u002F\u002F 注册事件\n",[425,61001,61002],{"class":427,"line":34322},[425,61003,61004],{"class":701},"    slider.addEventListener('mouseenter', function () {\n",[425,61006,61007],{"class":427,"line":34328},[425,61008,61009],{"class":701},"      \u002F\u002F 停止定时器\n",[425,61011,61012],{"class":427,"line":34334},[425,61013,61014],{"class":701},"      clearInterval(timerId)\n",[425,61016,61017],{"class":427,"line":34340},[425,61018,34216],{"class":701},[425,61020,61021],{"class":427,"line":34346},[425,61022,3400],{"emptyLinePlaceholder":1084},[425,61024,61025],{"class":427,"line":34373},[425,61026,61027],{"class":701},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[425,61029,61030],{"class":427,"line":34397},[425,61031,60999],{"class":701},[425,61033,61034],{"class":427,"line":34403},[425,61035,61036],{"class":701},"    slider.addEventListener('mouseleave', function () {\n",[425,61038,61039],{"class":427,"line":34409},[425,61040,61009],{"class":701},[425,61042,61043],{"class":427,"line":34415},[425,61044,61045],{"class":701},"      if (timerId) clearInterval(timerId)\n",[425,61047,61048],{"class":427,"line":34426},[425,61049,61050],{"class":701},"      \u002F\u002F 开启定时器\n",[425,61052,61053],{"class":427,"line":34437},[425,61054,61055],{"class":701},"      timerId = setInterval(function () {\n",[425,61057,61058],{"class":427,"line":34443},[425,61059,61060],{"class":701},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[425,61062,61063],{"class":427,"line":34460},[425,61064,61065],{"class":701},"        next.click()\n",[425,61067,61068],{"class":427,"line":34483},[425,61069,61070],{"class":701},"      }, 1000)\n",[425,61072,61073],{"class":427,"line":34506},[425,61074,34216],{"class":701},[425,61076,61077,61079,61081],{"class":427,"line":34512},[425,61078,53172],{"class":701},[425,61080,52568],{"class":52055},[425,61082,52062],{"class":701},[425,61084,61085,61087,61089],{"class":427,"line":34517},[425,61086,52540],{"class":701},[425,61088,52555],{"class":52055},[425,61090,52062],{"class":701},[425,61092,61093],{"class":427,"line":34526},[425,61094,3400],{"emptyLinePlaceholder":1084},[425,61096,61097,61099,61101],{"class":427,"line":34536},[425,61098,52540],{"class":701},[425,61100,51390],{"class":52055},[425,61102,52062],{"class":701},[22995,61104,61106],{"id":61105},"_3252-焦点事件","3.2.5.2 焦点事件",[19,61108,61109],{},"小米搜索框案例：",[416,61111,61113],{"className":51388,"code":61112,"language":51390,"meta":395,"style":395},"\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",[422,61114,61115,61125,61139,61143,61151,61165,61185,61205,61217,61225,61231,61241,61251,61263,61267,61271,61278,61282,61293,61297,61301,61308,61319,61332,61346,61350,61354,61363,61375,61387,61401,61414,61427,61445,61456,61460,61464,61473,61490,61494,61498,61505,61515,61525,61536,61549,61561,61577,61588,61600,61604,61608,61616,61627,61644,61656,61668,61679,61683,61687,61698,61709,61713,61721,61725,61733,61737,61745,61760,61783,61798,61829,61856,61883,61910,61937,61964,61991,62000,62008,62016,62021,62041,62061,62066,62071,62089,62094,62104,62109,62123,62128,62133,62150,62159,62171,62175,62183,62191,62195],{"__ignoreMap":395},[425,61116,61117,61119,61121,61123],{"class":427,"line":428},[425,61118,52052],{"class":701},[425,61120,52056],{"class":52055},[425,61122,52059],{"class":431},[425,61124,52062],{"class":701},[425,61126,61127,61129,61131,61133,61135,61137],{"class":427,"line":698},[425,61128,2057],{"class":701},[425,61130,51390],{"class":52055},[425,61132,52071],{"class":431},[425,61134,1204],{"class":701},[425,61136,52076],{"class":435},[425,61138,52062],{"class":701},[425,61140,61141],{"class":427,"line":710},[425,61142,3400],{"emptyLinePlaceholder":1084},[425,61144,61145,61147,61149],{"class":427,"line":721},[425,61146,2057],{"class":701},[425,61148,52089],{"class":52055},[425,61150,52062],{"class":701},[425,61152,61153,61155,61157,61159,61161,61163],{"class":427,"line":735},[425,61154,52096],{"class":701},[425,61156,52099],{"class":52055},[425,61158,52102],{"class":431},[425,61160,1204],{"class":701},[425,61162,52107],{"class":435},[425,61164,52062],{"class":701},[425,61166,61167,61169,61171,61173,61175,61177,61179,61181,61183],{"class":427,"line":743},[425,61168,52096],{"class":701},[425,61170,52099],{"class":52055},[425,61172,52118],{"class":431},[425,61174,1204],{"class":701},[425,61176,52123],{"class":435},[425,61178,52126],{"class":431},[425,61180,1204],{"class":701},[425,61182,52131],{"class":435},[425,61184,52062],{"class":701},[425,61186,61187,61189,61191,61193,61195,61197,61199,61201,61203],{"class":427,"line":751},[425,61188,52096],{"class":701},[425,61190,52099],{"class":52055},[425,61192,15917],{"class":431},[425,61194,1204],{"class":701},[425,61196,52146],{"class":435},[425,61198,52126],{"class":431},[425,61200,1204],{"class":701},[425,61202,52153],{"class":435},[425,61204,52062],{"class":701},[425,61206,61207,61209,61211,61213,61215],{"class":427,"line":759},[425,61208,52096],{"class":701},[425,61210,52162],{"class":52055},[425,61212,52165],{"class":701},[425,61214,52162],{"class":52055},[425,61216,52062],{"class":701},[425,61218,61219,61221,61223],{"class":427,"line":770},[425,61220,52096],{"class":701},[425,61222,1074],{"class":52055},[425,61224,52062],{"class":701},[425,61226,61227,61229],{"class":427,"line":780},[425,61228,52182],{"class":52055},[425,61230,16569],{"class":701},[425,61232,61233,61235,61237,61239],{"class":427,"line":790},[425,61234,52189],{"class":691},[425,61236,52192],{"class":701},[425,61238,1341],{"class":691},[425,61240,2307],{"class":701},[425,61242,61243,61245,61247,61249],{"class":427,"line":805},[425,61244,52201],{"class":691},[425,61246,52192],{"class":701},[425,61248,1341],{"class":691},[425,61250,2307],{"class":701},[425,61252,61253,61256,61258,61261],{"class":427,"line":818},[425,61254,61255],{"class":691},"            box-sizing",[425,61257,52192],{"class":701},[425,61259,61260],{"class":691},"border-box",[425,61262,2307],{"class":701},[425,61264,61265],{"class":427,"line":831},[425,61266,3529],{"class":701},[425,61268,61269],{"class":427,"line":841},[425,61270,3400],{"emptyLinePlaceholder":1084},[425,61272,61273,61276],{"class":427,"line":852},[425,61274,61275],{"class":52055},"        ul",[425,61277,16569],{"class":701},[425,61279,61280],{"class":427,"line":862},[425,61281,3400],{"emptyLinePlaceholder":1084},[425,61283,61284,61287,61289,61291],{"class":427,"line":878},[425,61285,61286],{"class":691},"            list-style",[425,61288,52192],{"class":701},[425,61290,55492],{"class":691},[425,61292,2307],{"class":701},[425,61294,61295],{"class":427,"line":914},[425,61296,3529],{"class":701},[425,61298,61299],{"class":427,"line":943},[425,61300,3400],{"emptyLinePlaceholder":1084},[425,61302,61303,61306],{"class":427,"line":956},[425,61304,61305],{"class":431},"        .mi",[425,61307,16569],{"class":701},[425,61309,61310,61313,61315,61317],{"class":427,"line":964},[425,61311,61312],{"class":691},"            position",[425,61314,52192],{"class":701},[425,61316,55519],{"class":691},[425,61318,2307],{"class":701},[425,61320,61321,61323,61325,61328,61330],{"class":427,"line":2733},[425,61322,52239],{"class":691},[425,61324,52192],{"class":701},[425,61326,61327],{"class":691},"223",[425,61329,52247],{"class":1155},[425,61331,2307],{"class":701},[425,61333,61334,61336,61338,61340,61342,61344],{"class":427,"line":2750},[425,61335,52189],{"class":691},[425,61337,52192],{"class":701},[425,61339,1460],{"class":691},[425,61341,52247],{"class":1155},[425,61343,52311],{"class":691},[425,61345,2307],{"class":701},[425,61347,61348],{"class":427,"line":2755},[425,61349,3529],{"class":701},[425,61351,61352],{"class":427,"line":2760},[425,61353,3400],{"emptyLinePlaceholder":1084},[425,61355,61356,61358,61361],{"class":427,"line":2765},[425,61357,61305],{"class":431},[425,61359,61360],{"class":52055}," input",[425,61362,16569],{"class":701},[425,61364,61365,61367,61369,61371,61373],{"class":427,"line":2779},[425,61366,52239],{"class":691},[425,61368,52192],{"class":701},[425,61370,61327],{"class":691},[425,61372,52247],{"class":1155},[425,61374,2307],{"class":701},[425,61376,61377,61379,61381,61383,61385],{"class":427,"line":2784},[425,61378,52254],{"class":691},[425,61380,52192],{"class":701},[425,61382,1755],{"class":691},[425,61384,52247],{"class":1155},[425,61386,2307],{"class":701},[425,61388,61389,61391,61393,61395,61397,61399],{"class":427,"line":3577},[425,61390,52201],{"class":691},[425,61392,52192],{"class":701},[425,61394,1341],{"class":691},[425,61396,3038],{"class":691},[425,61398,52247],{"class":1155},[425,61400,2307],{"class":701},[425,61402,61403,61406,61408,61410,61412],{"class":427,"line":3591},[425,61404,61405],{"class":691},"            font-size",[425,61407,52192],{"class":701},[425,61409,1697],{"class":691},[425,61411,52247],{"class":1155},[425,61413,2307],{"class":701},[425,61415,61416,61419,61421,61423,61425],{"class":427,"line":3599},[425,61417,61418],{"class":691},"            line-height",[425,61420,52192],{"class":701},[425,61422,1755],{"class":691},[425,61424,52247],{"class":1155},[425,61426,2307],{"class":701},[425,61428,61429,61432,61434,61436,61438,61440,61443],{"class":427,"line":3604},[425,61430,61431],{"class":691},"            border",[425,61433,52192],{"class":701},[425,61435,1367],{"class":691},[425,61437,52247],{"class":1155},[425,61439,52276],{"class":691},[425,61441,61442],{"class":691}," #e0e0e0",[425,61444,2307],{"class":701},[425,61446,61447,61450,61452,61454],{"class":427,"line":3610},[425,61448,61449],{"class":691},"            outline",[425,61451,52192],{"class":701},[425,61453,55492],{"class":691},[425,61455,2307],{"class":701},[425,61457,61458],{"class":427,"line":3616},[425,61459,3529],{"class":701},[425,61461,61462],{"class":427,"line":3621},[425,61463,3400],{"emptyLinePlaceholder":1084},[425,61465,61466,61468,61471],{"class":427,"line":8948},[425,61467,61305],{"class":431},[425,61469,61470],{"class":431}," .search",[425,61472,16569],{"class":701},[425,61474,61475,61477,61479,61481,61483,61485,61488],{"class":427,"line":8972},[425,61476,61431],{"class":691},[425,61478,52192],{"class":701},[425,61480,1367],{"class":691},[425,61482,52247],{"class":1155},[425,61484,52276],{"class":691},[425,61486,61487],{"class":691}," #ff6700",[425,61489,2307],{"class":701},[425,61491,61492],{"class":427,"line":8977},[425,61493,3529],{"class":701},[425,61495,61496],{"class":427,"line":8983},[425,61497,3400],{"emptyLinePlaceholder":1084},[425,61499,61500,61503],{"class":427,"line":9010},[425,61501,61502],{"class":431},"        .result-list",[425,61504,16569],{"class":701},[425,61506,61507,61509,61511,61513],{"class":427,"line":9015},[425,61508,52227],{"class":691},[425,61510,52192],{"class":701},[425,61512,55492],{"class":691},[425,61514,2307],{"class":701},[425,61516,61517,61519,61521,61523],{"class":427,"line":9021},[425,61518,61312],{"class":691},[425,61520,52192],{"class":701},[425,61522,55586],{"class":691},[425,61524,2307],{"class":701},[425,61526,61527,61530,61532,61534],{"class":427,"line":9033},[425,61528,61529],{"class":691},"            left",[425,61531,52192],{"class":701},[425,61533,1341],{"class":691},[425,61535,2307],{"class":701},[425,61537,61538,61541,61543,61545,61547],{"class":427,"line":9045},[425,61539,61540],{"class":691},"            top",[425,61542,52192],{"class":701},[425,61544,1755],{"class":691},[425,61546,52247],{"class":1155},[425,61548,2307],{"class":701},[425,61550,61551,61553,61555,61557,61559],{"class":427,"line":9057},[425,61552,52239],{"class":691},[425,61554,52192],{"class":701},[425,61556,61327],{"class":691},[425,61558,52247],{"class":1155},[425,61560,2307],{"class":701},[425,61562,61563,61565,61567,61569,61571,61573,61575],{"class":427,"line":10715},[425,61564,61431],{"class":691},[425,61566,52192],{"class":701},[425,61568,1367],{"class":691},[425,61570,52247],{"class":1155},[425,61572,52276],{"class":691},[425,61574,61487],{"class":691},[425,61576,2307],{"class":701},[425,61578,61579,61582,61584,61586],{"class":427,"line":10740},[425,61580,61581],{"class":691},"            border-top",[425,61583,52192],{"class":701},[425,61585,1341],{"class":691},[425,61587,2307],{"class":701},[425,61589,61590,61593,61595,61598],{"class":427,"line":10763},[425,61591,61592],{"class":691},"            background",[425,61594,52192],{"class":701},[425,61596,61597],{"class":691},"#fff",[425,61599,2307],{"class":701},[425,61601,61602],{"class":427,"line":10787},[425,61603,3529],{"class":701},[425,61605,61606],{"class":427,"line":10792},[425,61607,3400],{"emptyLinePlaceholder":1084},[425,61609,61610,61612,61614],{"class":427,"line":10797},[425,61611,61502],{"class":431},[425,61613,2412],{"class":52055},[425,61615,16569],{"class":701},[425,61617,61618,61620,61622,61625],{"class":427,"line":10802},[425,61619,52227],{"class":691},[425,61621,52192],{"class":701},[425,61623,61624],{"class":691},"block",[425,61626,2307],{"class":701},[425,61628,61629,61631,61633,61635,61637,61640,61642],{"class":427,"line":10811},[425,61630,52201],{"class":691},[425,61632,52192],{"class":701},[425,61634,1493],{"class":691},[425,61636,52247],{"class":1155},[425,61638,61639],{"class":691}," 15",[425,61641,52247],{"class":1155},[425,61643,2307],{"class":701},[425,61645,61646,61648,61650,61652,61654],{"class":427,"line":10816},[425,61647,61405],{"class":691},[425,61649,52192],{"class":701},[425,61651,1646],{"class":691},[425,61653,52247],{"class":1155},[425,61655,2307],{"class":701},[425,61657,61658,61661,61663,61666],{"class":427,"line":10822},[425,61659,61660],{"class":691},"            color",[425,61662,52192],{"class":701},[425,61664,61665],{"class":691},"#424242",[425,61667,2307],{"class":701},[425,61669,61670,61673,61675,61677],{"class":427,"line":10843},[425,61671,61672],{"class":691},"            text-decoration",[425,61674,52192],{"class":701},[425,61676,55492],{"class":691},[425,61678,2307],{"class":701},[425,61680,61681],{"class":427,"line":10849},[425,61682,3529],{"class":701},[425,61684,61685],{"class":427,"line":10863},[425,61686,3400],{"emptyLinePlaceholder":1084},[425,61688,61689,61691,61693,61696],{"class":427,"line":10869},[425,61690,61502],{"class":431},[425,61692,2412],{"class":52055},[425,61694,61695],{"class":431},":hover",[425,61697,16569],{"class":701},[425,61699,61700,61702,61704,61707],{"class":427,"line":10896},[425,61701,52395],{"class":691},[425,61703,52192],{"class":701},[425,61705,61706],{"class":691},"#eee",[425,61708,2307],{"class":701},[425,61710,61711],{"class":427,"line":10905},[425,61712,3529],{"class":701},[425,61714,61715,61717,61719],{"class":427,"line":10911},[425,61716,52531],{"class":701},[425,61718,1074],{"class":52055},[425,61720,52062],{"class":701},[425,61722,61723],{"class":427,"line":10919},[425,61724,3400],{"emptyLinePlaceholder":1084},[425,61726,61727,61729,61731],{"class":427,"line":10924},[425,61728,52540],{"class":701},[425,61730,52089],{"class":52055},[425,61732,52062],{"class":701},[425,61734,61735],{"class":427,"line":17601},[425,61736,3400],{"emptyLinePlaceholder":1084},[425,61738,61739,61741,61743],{"class":427,"line":17607},[425,61740,2057],{"class":701},[425,61742,52555],{"class":52055},[425,61744,52062],{"class":701},[425,61746,61747,61749,61751,61753,61755,61758],{"class":427,"line":17630},[425,61748,52096],{"class":701},[425,61750,52366],{"class":52055},[425,61752,54241],{"class":431},[425,61754,1204],{"class":701},[425,61756,61757],{"class":435},"\"mi\"",[425,61759,52062],{"class":701},[425,61761,61762,61764,61766,61768,61770,61773,61776,61778,61781],{"class":427,"line":17636},[425,61763,56057],{"class":701},[425,61765,54576],{"class":52055},[425,61767,54579],{"class":431},[425,61769,1204],{"class":701},[425,61771,61772],{"class":435},"\"search\"",[425,61774,61775],{"class":431}," placeholder",[425,61777,1204],{"class":701},[425,61779,61780],{"class":435},"\"小米笔记本\"",[425,61782,52062],{"class":701},[425,61784,61785,61787,61789,61791,61793,61796],{"class":427,"line":17659},[425,61786,56057],{"class":701},[425,61788,447],{"class":52055},[425,61790,54241],{"class":431},[425,61792,1204],{"class":701},[425,61794,61795],{"class":435},"\"result-list\"",[425,61797,52062],{"class":701},[425,61799,61800,61803,61805,61808,61810,61813,61815,61818,61821,61823,61825,61827],{"class":427,"line":17673},[425,61801,61802],{"class":701},"            \u003C",[425,61804,450],{"class":52055},[425,61806,61807],{"class":701},">\u003C",[425,61809,22],{"class":52055},[425,61811,61812],{"class":431}," href",[425,61814,1204],{"class":701},[425,61816,61817],{"class":435},"\"#\"",[425,61819,61820],{"class":701},">全部商品\u003C\u002F",[425,61822,22],{"class":52055},[425,61824,56069],{"class":701},[425,61826,450],{"class":52055},[425,61828,52062],{"class":701},[425,61830,61831,61833,61835,61837,61839,61841,61843,61845,61848,61850,61852,61854],{"class":427,"line":17693},[425,61832,61802],{"class":701},[425,61834,450],{"class":52055},[425,61836,61807],{"class":701},[425,61838,22],{"class":52055},[425,61840,61812],{"class":431},[425,61842,1204],{"class":701},[425,61844,61817],{"class":435},[425,61846,61847],{"class":701},">小米11\u003C\u002F",[425,61849,22],{"class":52055},[425,61851,56069],{"class":701},[425,61853,450],{"class":52055},[425,61855,52062],{"class":701},[425,61857,61858,61860,61862,61864,61866,61868,61870,61872,61875,61877,61879,61881],{"class":427,"line":17699},[425,61859,61802],{"class":701},[425,61861,450],{"class":52055},[425,61863,61807],{"class":701},[425,61865,22],{"class":52055},[425,61867,61812],{"class":431},[425,61869,1204],{"class":701},[425,61871,61817],{"class":435},[425,61873,61874],{"class":701},">小米10S\u003C\u002F",[425,61876,22],{"class":52055},[425,61878,56069],{"class":701},[425,61880,450],{"class":52055},[425,61882,52062],{"class":701},[425,61884,61885,61887,61889,61891,61893,61895,61897,61899,61902,61904,61906,61908],{"class":427,"line":17710},[425,61886,61802],{"class":701},[425,61888,450],{"class":52055},[425,61890,61807],{"class":701},[425,61892,22],{"class":52055},[425,61894,61812],{"class":431},[425,61896,1204],{"class":701},[425,61898,61817],{"class":435},[425,61900,61901],{"class":701},">小米笔记本\u003C\u002F",[425,61903,22],{"class":52055},[425,61905,56069],{"class":701},[425,61907,450],{"class":52055},[425,61909,52062],{"class":701},[425,61911,61912,61914,61916,61918,61920,61922,61924,61926,61929,61931,61933,61935],{"class":427,"line":17733},[425,61913,61802],{"class":701},[425,61915,450],{"class":52055},[425,61917,61807],{"class":701},[425,61919,22],{"class":52055},[425,61921,61812],{"class":431},[425,61923,1204],{"class":701},[425,61925,61817],{"class":435},[425,61927,61928],{"class":701},">小米手机\u003C\u002F",[425,61930,22],{"class":52055},[425,61932,56069],{"class":701},[425,61934,450],{"class":52055},[425,61936,52062],{"class":701},[425,61938,61939,61941,61943,61945,61947,61949,61951,61953,61956,61958,61960,61962],{"class":427,"line":17755},[425,61940,61802],{"class":701},[425,61942,450],{"class":52055},[425,61944,61807],{"class":701},[425,61946,22],{"class":52055},[425,61948,61812],{"class":431},[425,61950,1204],{"class":701},[425,61952,61817],{"class":435},[425,61954,61955],{"class":701},">黑鲨4\u003C\u002F",[425,61957,22],{"class":52055},[425,61959,56069],{"class":701},[425,61961,450],{"class":52055},[425,61963,52062],{"class":701},[425,61965,61966,61968,61970,61972,61974,61976,61978,61980,61983,61985,61987,61989],{"class":427,"line":17760},[425,61967,61802],{"class":701},[425,61969,450],{"class":52055},[425,61971,61807],{"class":701},[425,61973,22],{"class":52055},[425,61975,61812],{"class":431},[425,61977,1204],{"class":701},[425,61979,61817],{"class":435},[425,61981,61982],{"class":701},">空调\u003C\u002F",[425,61984,22],{"class":52055},[425,61986,56069],{"class":701},[425,61988,450],{"class":52055},[425,61990,52062],{"class":701},[425,61992,61993,61996,61998],{"class":427,"line":17766},[425,61994,61995],{"class":701},"        \u003C\u002F",[425,61997,447],{"class":52055},[425,61999,52062],{"class":701},[425,62001,62002,62004,62006],{"class":427,"line":17780},[425,62003,52531],{"class":701},[425,62005,52366],{"class":52055},[425,62007,52062],{"class":701},[425,62009,62010,62012,62014],{"class":427,"line":17793},[425,62011,52096],{"class":701},[425,62013,52568],{"class":52055},[425,62015,52062],{"class":701},[425,62017,62018],{"class":427,"line":17798},[425,62019,62020],{"class":1216},"        \u002F\u002F 1. 获取元素\n",[425,62022,62023,62026,62028,62030,62032,62034,62036,62039],{"class":427,"line":17812},[425,62024,62025],{"class":1155},"        const",[425,62027,61360],{"class":691},[425,62029,14563],{"class":1155},[425,62031,55151],{"class":701},[425,62033,55154],{"class":431},[425,62035,1159],{"class":701},[425,62037,62038],{"class":435},"'[type=search]'",[425,62040,1165],{"class":701},[425,62042,62043,62045,62048,62050,62052,62054,62056,62059],{"class":427,"line":17817},[425,62044,62025],{"class":1155},[425,62046,62047],{"class":691}," ul",[425,62049,14563],{"class":1155},[425,62051,55151],{"class":701},[425,62053,55154],{"class":431},[425,62055,1159],{"class":701},[425,62057,62058],{"class":435},"'.result-list'",[425,62060,1165],{"class":701},[425,62062,62063],{"class":427,"line":17823},[425,62064,62065],{"class":1216},"        \u002F\u002F console.log(input)\n",[425,62067,62068],{"class":427,"line":17828},[425,62069,62070],{"class":1216},"        \u002F\u002F 2. 监听事件 获得焦点\n",[425,62072,62073,62076,62078,62080,62083,62085,62087],{"class":427,"line":17842},[425,62074,62075],{"class":701},"        input.",[425,62077,58568],{"class":431},[425,62079,1159],{"class":701},[425,62081,62082],{"class":435},"'focus'",[425,62084,13434],{"class":701},[425,62086,55204],{"class":1155},[425,62088,55207],{"class":701},[425,62090,62091],{"class":427,"line":17847},[425,62092,62093],{"class":1216},"            \u002F\u002F ul显示\n",[425,62095,62096,62099,62101],{"class":427,"line":17852},[425,62097,62098],{"class":701},"            ul.style.display ",[425,62100,1204],{"class":1155},[425,62102,62103],{"class":435}," 'block'\n",[425,62105,62106],{"class":427,"line":17866},[425,62107,62108],{"class":1216},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[425,62110,62111,62114,62116,62118,62121],{"class":427,"line":17878},[425,62112,62113],{"class":701},"            input.classList.",[425,62115,6334],{"class":431},[425,62117,1159],{"class":701},[425,62119,62120],{"class":435},"'search'",[425,62122,1165],{"class":701},[425,62124,62125],{"class":427,"line":17883},[425,62126,62127],{"class":701},"        })\n",[425,62129,62130],{"class":427,"line":17896},[425,62131,62132],{"class":1216},"        \u002F\u002F 3. 监听事件 失去焦点\n",[425,62134,62135,62137,62139,62141,62144,62146,62148],{"class":427,"line":17901},[425,62136,62075],{"class":701},[425,62138,58568],{"class":431},[425,62140,1159],{"class":701},[425,62142,62143],{"class":435},"'blur'",[425,62145,13434],{"class":701},[425,62147,55204],{"class":1155},[425,62149,55207],{"class":701},[425,62151,62152,62154,62156],{"class":427,"line":17906},[425,62153,62098],{"class":701},[425,62155,1204],{"class":1155},[425,62157,62158],{"class":435}," 'none'\n",[425,62160,62161,62163,62165,62167,62169],{"class":427,"line":17911},[425,62162,62113],{"class":701},[425,62164,57761],{"class":431},[425,62166,1159],{"class":701},[425,62168,62120],{"class":435},[425,62170,1165],{"class":701},[425,62172,62173],{"class":427,"line":17924},[425,62174,62127],{"class":701},[425,62176,62177,62179,62181],{"class":427,"line":17929},[425,62178,52531],{"class":701},[425,62180,52568],{"class":52055},[425,62182,52062],{"class":701},[425,62184,62185,62187,62189],{"class":427,"line":33388},[425,62186,52540],{"class":701},[425,62188,52555],{"class":52055},[425,62190,52062],{"class":701},[425,62192,62193],{"class":427,"line":33394},[425,62194,3400],{"emptyLinePlaceholder":1084},[425,62196,62197,62199,62201],{"class":427,"line":33400},[425,62198,52540],{"class":701},[425,62200,51390],{"class":52055},[425,62202,52062],{"class":701},[22995,62204,62206],{"id":62205},"_3253-键盘事件","3.2.5.3 键盘事件",[19,62208,62209],{},"评论字数统计案例",[19,62211,62212],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,62214,62215],{},"牢记focus伪类选择器",[52099,62217],{"charSet":62218},"UTF-8",[52099,62220],{"name":62221,"content":62222},"viewport","width=device-width, initial-scale=1.0",[52162,62224,62225],{},"Document",[1074,62227,62228],{},"\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",[54576,62230],{"type":6187},[447,62232,62233,62236],{},[450,62234,62235],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[450,62237,62238],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[416,62240,62242],{"className":51388,"code":62241,"language":51390,"meta":395,"style":395},"\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",[422,62243,62244,62254,62268,62272,62280,62294,62314,62334,62347,62355,62362,62375,62389,62399,62409,62413,62417,62424,62436,62448,62460,62472,62501,62514,62518,62522,62531,62542,62554,62565,62576,62588,62599,62611,62627,62639,62643,62647,62658,62669,62679,62691,62695,62699,62707,62718,62728,62739,62751,62764,62776,62788,62792,62796,62805,62817,62828,62841,62852,62866,62870,62874,62881,62893,62905,62915,62919,62923,62932,62944,62954,62958,62962,62973,62983,63002,63015,63019,63023,63033,63043,63047,63051,63062,63073,63085,63097,63101,63105,63116,63127,63141,63145,63149,63160,63170,63182,63186,63194,63202,63206,63214,63229,63248,63288,63301,63309,63323,63343,63351,63366,63389,63407,63422,63442,63462,63482,63490,63498,63506,63514,63534,63554,63559,63576,63585,63589,63594,63610,63618,63622,63627,63644,63649,63674,63678,63682,63687,63692,63700,63708,63712],{"__ignoreMap":395},[425,62245,62246,62248,62250,62252],{"class":427,"line":428},[425,62247,52052],{"class":701},[425,62249,52056],{"class":52055},[425,62251,52059],{"class":431},[425,62253,52062],{"class":701},[425,62255,62256,62258,62260,62262,62264,62266],{"class":427,"line":698},[425,62257,2057],{"class":701},[425,62259,51390],{"class":52055},[425,62261,52071],{"class":431},[425,62263,1204],{"class":701},[425,62265,52076],{"class":435},[425,62267,52062],{"class":701},[425,62269,62270],{"class":427,"line":710},[425,62271,3400],{"emptyLinePlaceholder":1084},[425,62273,62274,62276,62278],{"class":427,"line":721},[425,62275,2057],{"class":701},[425,62277,52089],{"class":52055},[425,62279,52062],{"class":701},[425,62281,62282,62284,62286,62288,62290,62292],{"class":427,"line":735},[425,62283,52899],{"class":701},[425,62285,52099],{"class":52055},[425,62287,52102],{"class":431},[425,62289,1204],{"class":701},[425,62291,52107],{"class":435},[425,62293,52062],{"class":701},[425,62295,62296,62298,62300,62302,62304,62306,62308,62310,62312],{"class":427,"line":743},[425,62297,52899],{"class":701},[425,62299,52099],{"class":52055},[425,62301,52118],{"class":431},[425,62303,1204],{"class":701},[425,62305,52123],{"class":435},[425,62307,52126],{"class":431},[425,62309,1204],{"class":701},[425,62311,52131],{"class":435},[425,62313,52062],{"class":701},[425,62315,62316,62318,62320,62322,62324,62326,62328,62330,62332],{"class":427,"line":751},[425,62317,52899],{"class":701},[425,62319,52099],{"class":52055},[425,62321,15917],{"class":431},[425,62323,1204],{"class":701},[425,62325,52146],{"class":435},[425,62327,52126],{"class":431},[425,62329,1204],{"class":701},[425,62331,52153],{"class":435},[425,62333,52062],{"class":701},[425,62335,62336,62338,62340,62343,62345],{"class":427,"line":759},[425,62337,52899],{"class":701},[425,62339,52162],{"class":52055},[425,62341,62342],{"class":701},">评论回车发布\u003C\u002F",[425,62344,52162],{"class":52055},[425,62346,52062],{"class":701},[425,62348,62349,62351,62353],{"class":427,"line":770},[425,62350,52899],{"class":701},[425,62352,1074],{"class":52055},[425,62354,52062],{"class":701},[425,62356,62357,62360],{"class":427,"line":780},[425,62358,62359],{"class":431},"    .wrapper",[425,62361,16569],{"class":701},[425,62363,62364,62367,62369,62371,62373],{"class":427,"line":790},[425,62365,62366],{"class":691},"      min-width",[425,62368,52192],{"class":701},[425,62370,4987],{"class":691},[425,62372,52247],{"class":1155},[425,62374,2307],{"class":701},[425,62376,62377,62380,62382,62385,62387],{"class":427,"line":805},[425,62378,62379],{"class":691},"      max-width",[425,62381,52192],{"class":701},[425,62383,62384],{"class":691},"800",[425,62386,52247],{"class":1155},[425,62388,2307],{"class":701},[425,62390,62391,62393,62395,62397],{"class":427,"line":818},[425,62392,55764],{"class":691},[425,62394,52192],{"class":701},[425,62396,52232],{"class":691},[425,62398,2307],{"class":701},[425,62400,62401,62403,62405,62407],{"class":427,"line":831},[425,62402,55775],{"class":691},[425,62404,52192],{"class":701},[425,62406,52335],{"class":691},[425,62408,2307],{"class":701},[425,62410,62411],{"class":427,"line":841},[425,62412,3187],{"class":701},[425,62414,62415],{"class":427,"line":852},[425,62416,3400],{"emptyLinePlaceholder":1084},[425,62418,62419,62422],{"class":427,"line":862},[425,62420,62421],{"class":431},"    .avatar",[425,62423,16569],{"class":701},[425,62425,62426,62428,62430,62432,62434],{"class":427,"line":878},[425,62427,55526],{"class":691},[425,62429,52192],{"class":701},[425,62431,1755],{"class":691},[425,62433,52247],{"class":1155},[425,62435,2307],{"class":701},[425,62437,62438,62440,62442,62444,62446],{"class":427,"line":914},[425,62439,55540],{"class":691},[425,62441,52192],{"class":701},[425,62443,1755],{"class":691},[425,62445,52247],{"class":1155},[425,62447,2307],{"class":701},[425,62449,62450,62452,62454,62456,62458],{"class":427,"line":943},[425,62451,55889],{"class":691},[425,62453,52192],{"class":701},[425,62455,1804],{"class":691},[425,62457,1477],{"class":1155},[425,62459,2307],{"class":701},[425,62461,62462,62465,62467,62470],{"class":427,"line":956},[425,62463,62464],{"class":691},"      overflow",[425,62466,52192],{"class":701},[425,62468,62469],{"class":691},"hidden",[425,62471,2307],{"class":701},[425,62473,62474,62477,62479,62482,62484,62487,62489,62492,62494,62496,62499],{"class":427,"line":964},[425,62475,62476],{"class":691},"      background",[425,62478,52192],{"class":701},[425,62480,62481],{"class":691},"url",[425,62483,1159],{"class":701},[425,62485,62486],{"class":6216},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[425,62488,938],{"class":701},[425,62490,62491],{"class":691},"no-repeat",[425,62493,18141],{"class":691},[425,62495,25970],{"class":701},[425,62497,62498],{"class":691},"cover",[425,62500,2307],{"class":701},[425,62502,62503,62506,62508,62510,62512],{"class":427,"line":2733},[425,62504,62505],{"class":691},"      margin-right",[425,62507,52192],{"class":701},[425,62509,1848],{"class":691},[425,62511,52247],{"class":1155},[425,62513,2307],{"class":701},[425,62515,62516],{"class":427,"line":2750},[425,62517,3187],{"class":701},[425,62519,62520],{"class":427,"line":2755},[425,62521,3400],{"emptyLinePlaceholder":1084},[425,62523,62524,62526,62529],{"class":427,"line":2760},[425,62525,62359],{"class":431},[425,62527,62528],{"class":52055}," textarea",[425,62530,16569],{"class":701},[425,62532,62533,62536,62538,62540],{"class":427,"line":2765},[425,62534,62535],{"class":691},"      outline",[425,62537,52192],{"class":701},[425,62539,55492],{"class":691},[425,62541,2307],{"class":701},[425,62543,62544,62547,62549,62552],{"class":427,"line":2779},[425,62545,62546],{"class":691},"      border-color",[425,62548,52192],{"class":701},[425,62550,62551],{"class":691},"transparent",[425,62553,2307],{"class":701},[425,62555,62556,62559,62561,62563],{"class":427,"line":2784},[425,62557,62558],{"class":691},"      resize",[425,62560,52192],{"class":701},[425,62562,55492],{"class":691},[425,62564,2307],{"class":701},[425,62566,62567,62569,62571,62574],{"class":427,"line":3577},[425,62568,62476],{"class":691},[425,62570,52192],{"class":701},[425,62572,62573],{"class":691},"#f5f5f5",[425,62575,2307],{"class":701},[425,62577,62578,62580,62582,62584,62586],{"class":427,"line":3591},[425,62579,55889],{"class":691},[425,62581,52192],{"class":701},[425,62583,1442],{"class":691},[425,62585,52247],{"class":1155},[425,62587,2307],{"class":701},[425,62589,62590,62593,62595,62597],{"class":427,"line":3599},[425,62591,62592],{"class":691},"      flex",[425,62594,52192],{"class":701},[425,62596,1367],{"class":691},[425,62598,2307],{"class":701},[425,62600,62601,62603,62605,62607,62609],{"class":427,"line":3604},[425,62602,55450],{"class":691},[425,62604,52192],{"class":701},[425,62606,1594],{"class":691},[425,62608,52247],{"class":1155},[425,62610,2307],{"class":701},[425,62612,62613,62616,62618,62620,62623,62625],{"class":427,"line":3610},[425,62614,62615],{"class":691},"      transition",[425,62617,52192],{"class":701},[425,62619,705],{"class":691},[425,62621,62622],{"class":691}," 0.5",[425,62624,1843],{"class":1155},[425,62626,2307],{"class":701},[425,62628,62629,62631,62633,62635,62637],{"class":427,"line":3616},[425,62630,55540],{"class":691},[425,62632,52192],{"class":701},[425,62634,2098],{"class":691},[425,62636,52247],{"class":1155},[425,62638,2307],{"class":701},[425,62640,62641],{"class":427,"line":3621},[425,62642,3187],{"class":701},[425,62644,62645],{"class":427,"line":8948},[425,62646,3400],{"emptyLinePlaceholder":1084},[425,62648,62649,62651,62653,62656],{"class":427,"line":8972},[425,62650,62359],{"class":431},[425,62652,62528],{"class":52055},[425,62654,62655],{"class":431},":focus",[425,62657,16569],{"class":701},[425,62659,62660,62662,62664,62667],{"class":427,"line":8977},[425,62661,62546],{"class":691},[425,62663,52192],{"class":701},[425,62665,62666],{"class":691},"#e4e4e4",[425,62668,2307],{"class":701},[425,62670,62671,62673,62675,62677],{"class":427,"line":8983},[425,62672,62476],{"class":691},[425,62674,52192],{"class":701},[425,62676,61597],{"class":691},[425,62678,2307],{"class":701},[425,62680,62681,62683,62685,62687,62689],{"class":427,"line":9010},[425,62682,55540],{"class":691},[425,62684,52192],{"class":701},[425,62686,1804],{"class":691},[425,62688,52247],{"class":1155},[425,62690,2307],{"class":701},[425,62692,62693],{"class":427,"line":9015},[425,62694,3187],{"class":701},[425,62696,62697],{"class":427,"line":9021},[425,62698,3400],{"emptyLinePlaceholder":1084},[425,62700,62701,62703,62705],{"class":427,"line":9033},[425,62702,62359],{"class":431},[425,62704,58222],{"class":52055},[425,62706,16569],{"class":701},[425,62708,62709,62711,62713,62716],{"class":427,"line":9045},[425,62710,62476],{"class":691},[425,62712,52192],{"class":701},[425,62714,62715],{"class":691},"#00aeec",[425,62717,2307],{"class":701},[425,62719,62720,62722,62724,62726],{"class":427,"line":9057},[425,62721,58171],{"class":691},[425,62723,52192],{"class":701},[425,62725,61597],{"class":691},[425,62727,2307],{"class":701},[425,62729,62730,62733,62735,62737],{"class":427,"line":10715},[425,62731,62732],{"class":691},"      border",[425,62734,52192],{"class":701},[425,62736,55492],{"class":691},[425,62738,2307],{"class":701},[425,62740,62741,62743,62745,62747,62749],{"class":427,"line":10740},[425,62742,55889],{"class":691},[425,62744,52192],{"class":701},[425,62746,1442],{"class":691},[425,62748,52247],{"class":1155},[425,62750,2307],{"class":701},[425,62752,62753,62756,62758,62760,62762],{"class":427,"line":10763},[425,62754,62755],{"class":691},"      margin-left",[425,62757,52192],{"class":701},[425,62759,1594],{"class":691},[425,62761,52247],{"class":1155},[425,62763,2307],{"class":701},[425,62765,62766,62768,62770,62772,62774],{"class":427,"line":10787},[425,62767,55526],{"class":691},[425,62769,52192],{"class":701},[425,62771,1505],{"class":691},[425,62773,52247],{"class":1155},[425,62775,2307],{"class":701},[425,62777,62778,62781,62783,62786],{"class":427,"line":10792},[425,62779,62780],{"class":691},"      cursor",[425,62782,52192],{"class":701},[425,62784,62785],{"class":691},"pointer",[425,62787,2307],{"class":701},[425,62789,62790],{"class":427,"line":10797},[425,62791,3187],{"class":701},[425,62793,62794],{"class":427,"line":10802},[425,62795,3400],{"emptyLinePlaceholder":1084},[425,62797,62798,62800,62803],{"class":427,"line":10811},[425,62799,62359],{"class":431},[425,62801,62802],{"class":431}," .total",[425,62804,16569],{"class":701},[425,62806,62807,62809,62811,62813,62815],{"class":427,"line":10816},[425,62808,62505],{"class":691},[425,62810,52192],{"class":701},[425,62812,1760],{"class":691},[425,62814,52247],{"class":1155},[425,62816,2307],{"class":701},[425,62818,62819,62821,62823,62826],{"class":427,"line":10822},[425,62820,58171],{"class":691},[425,62822,52192],{"class":701},[425,62824,62825],{"class":691},"#999",[425,62827,2307],{"class":701},[425,62829,62830,62833,62835,62837,62839],{"class":427,"line":10843},[425,62831,62832],{"class":691},"      margin-top",[425,62834,52192],{"class":701},[425,62836,1468],{"class":691},[425,62838,52247],{"class":1155},[425,62840,2307],{"class":701},[425,62842,62843,62846,62848,62850],{"class":427,"line":10849},[425,62844,62845],{"class":691},"      opacity",[425,62847,52192],{"class":701},[425,62849,1341],{"class":691},[425,62851,2307],{"class":701},[425,62853,62854,62856,62858,62860,62862,62864],{"class":427,"line":10863},[425,62855,62615],{"class":691},[425,62857,52192],{"class":701},[425,62859,705],{"class":691},[425,62861,62622],{"class":691},[425,62863,1843],{"class":1155},[425,62865,2307],{"class":701},[425,62867,62868],{"class":427,"line":10869},[425,62869,3187],{"class":701},[425,62871,62872],{"class":427,"line":10896},[425,62873,3400],{"emptyLinePlaceholder":1084},[425,62875,62876,62879],{"class":427,"line":10905},[425,62877,62878],{"class":431},"    .list",[425,62880,16569],{"class":701},[425,62882,62883,62885,62887,62889,62891],{"class":427,"line":10911},[425,62884,62366],{"class":691},[425,62886,52192],{"class":701},[425,62888,4987],{"class":691},[425,62890,52247],{"class":1155},[425,62892,2307],{"class":701},[425,62894,62895,62897,62899,62901,62903],{"class":427,"line":10919},[425,62896,62379],{"class":691},[425,62898,52192],{"class":701},[425,62900,62384],{"class":691},[425,62902,52247],{"class":1155},[425,62904,2307],{"class":701},[425,62906,62907,62909,62911,62913],{"class":427,"line":10924},[425,62908,55764],{"class":691},[425,62910,52192],{"class":701},[425,62912,52232],{"class":691},[425,62914,2307],{"class":701},[425,62916,62917],{"class":427,"line":17601},[425,62918,3187],{"class":701},[425,62920,62921],{"class":427,"line":17607},[425,62922,3400],{"emptyLinePlaceholder":1084},[425,62924,62925,62927,62930],{"class":427,"line":17630},[425,62926,62878],{"class":431},[425,62928,62929],{"class":431}," .item",[425,62931,16569],{"class":701},[425,62933,62934,62936,62938,62940,62942],{"class":427,"line":17636},[425,62935,55526],{"class":691},[425,62937,52192],{"class":701},[425,62939,1460],{"class":691},[425,62941,1477],{"class":1155},[425,62943,2307],{"class":701},[425,62945,62946,62948,62950,62952],{"class":427,"line":17659},[425,62947,55764],{"class":691},[425,62949,52192],{"class":701},[425,62951,52232],{"class":691},[425,62953,2307],{"class":701},[425,62955,62956],{"class":427,"line":17673},[425,62957,3187],{"class":701},[425,62959,62960],{"class":427,"line":17693},[425,62961,3400],{"emptyLinePlaceholder":1084},[425,62963,62964,62966,62968,62971],{"class":427,"line":17699},[425,62965,62878],{"class":431},[425,62967,62929],{"class":431},[425,62969,62970],{"class":431}," .info",[425,62972,16569],{"class":701},[425,62974,62975,62977,62979,62981],{"class":427,"line":17710},[425,62976,62592],{"class":691},[425,62978,52192],{"class":701},[425,62980,1367],{"class":691},[425,62982,2307],{"class":701},[425,62984,62985,62988,62990,62992,62994,62997,63000],{"class":427,"line":17733},[425,62986,62987],{"class":691},"      border-bottom",[425,62989,52192],{"class":701},[425,62991,1367],{"class":691},[425,62993,52247],{"class":1155},[425,62995,62996],{"class":691}," dashed",[425,62998,62999],{"class":691}," #e4e4e4",[425,63001,2307],{"class":701},[425,63003,63004,63007,63009,63011,63013],{"class":427,"line":17755},[425,63005,63006],{"class":691},"      padding-bottom",[425,63008,52192],{"class":701},[425,63010,1594],{"class":691},[425,63012,52247],{"class":1155},[425,63014,2307],{"class":701},[425,63016,63017],{"class":427,"line":17760},[425,63018,3187],{"class":701},[425,63020,63021],{"class":427,"line":17766},[425,63022,3400],{"emptyLinePlaceholder":1084},[425,63024,63025,63027,63029,63031],{"class":427,"line":17780},[425,63026,62878],{"class":431},[425,63028,62929],{"class":431},[425,63030,7825],{"class":52055},[425,63032,16569],{"class":701},[425,63034,63035,63037,63039,63041],{"class":427,"line":17793},[425,63036,55461],{"class":691},[425,63038,52192],{"class":701},[425,63040,1341],{"class":691},[425,63042,2307],{"class":701},[425,63044,63045],{"class":427,"line":17798},[425,63046,3187],{"class":701},[425,63048,63049],{"class":427,"line":17812},[425,63050,3400],{"emptyLinePlaceholder":1084},[425,63052,63053,63055,63057,63060],{"class":427,"line":17817},[425,63054,62878],{"class":431},[425,63056,62929],{"class":431},[425,63058,63059],{"class":431}," .name",[425,63061,16569],{"class":701},[425,63063,63064,63066,63068,63071],{"class":427,"line":17823},[425,63065,58171],{"class":691},[425,63067,52192],{"class":701},[425,63069,63070],{"class":691},"#FB7299",[425,63072,2307],{"class":701},[425,63074,63075,63077,63079,63081,63083],{"class":427,"line":17828},[425,63076,55677],{"class":691},[425,63078,52192],{"class":701},[425,63080,1697],{"class":691},[425,63082,52247],{"class":1155},[425,63084,2307],{"class":701},[425,63086,63087,63090,63092,63095],{"class":427,"line":17842},[425,63088,63089],{"class":691},"      font-weight",[425,63091,52192],{"class":701},[425,63093,63094],{"class":691},"bold",[425,63096,2307],{"class":701},[425,63098,63099],{"class":427,"line":17847},[425,63100,3187],{"class":701},[425,63102,63103],{"class":427,"line":17852},[425,63104,3400],{"emptyLinePlaceholder":1084},[425,63106,63107,63109,63111,63114],{"class":427,"line":17866},[425,63108,62878],{"class":431},[425,63110,62929],{"class":431},[425,63112,63113],{"class":431}," .text",[425,63115,16569],{"class":701},[425,63117,63118,63120,63122,63125],{"class":427,"line":17878},[425,63119,58171],{"class":691},[425,63121,52192],{"class":701},[425,63123,63124],{"class":691},"#333",[425,63126,2307],{"class":701},[425,63128,63129,63131,63133,63135,63137,63139],{"class":427,"line":17883},[425,63130,55450],{"class":691},[425,63132,52192],{"class":701},[425,63134,1594],{"class":691},[425,63136,52247],{"class":1155},[425,63138,5093],{"class":691},[425,63140,2307],{"class":701},[425,63142,63143],{"class":427,"line":17896},[425,63144,3187],{"class":701},[425,63146,63147],{"class":427,"line":17901},[425,63148,3400],{"emptyLinePlaceholder":1084},[425,63150,63151,63153,63155,63158],{"class":427,"line":17906},[425,63152,62878],{"class":431},[425,63154,62929],{"class":431},[425,63156,63157],{"class":431}," .time",[425,63159,16569],{"class":701},[425,63161,63162,63164,63166,63168],{"class":427,"line":17911},[425,63163,58171],{"class":691},[425,63165,52192],{"class":701},[425,63167,62825],{"class":691},[425,63169,2307],{"class":701},[425,63171,63172,63174,63176,63178,63180],{"class":427,"line":17924},[425,63173,55677],{"class":691},[425,63175,52192],{"class":701},[425,63177,1646],{"class":691},[425,63179,52247],{"class":1155},[425,63181,2307],{"class":701},[425,63183,63184],{"class":427,"line":17929},[425,63185,3187],{"class":701},[425,63187,63188,63190,63192],{"class":427,"line":33388},[425,63189,53172],{"class":701},[425,63191,1074],{"class":52055},[425,63193,52062],{"class":701},[425,63195,63196,63198,63200],{"class":427,"line":33394},[425,63197,52540],{"class":701},[425,63199,52089],{"class":52055},[425,63201,52062],{"class":701},[425,63203,63204],{"class":427,"line":33400},[425,63205,3400],{"emptyLinePlaceholder":1084},[425,63207,63208,63210,63212],{"class":427,"line":33406},[425,63209,2057],{"class":701},[425,63211,52555],{"class":52055},[425,63213,52062],{"class":701},[425,63215,63216,63218,63220,63222,63224,63227],{"class":427,"line":33412},[425,63217,52899],{"class":701},[425,63219,52366],{"class":52055},[425,63221,54241],{"class":431},[425,63223,1204],{"class":701},[425,63225,63226],{"class":435},"\"wrapper\"",[425,63228,52062],{"class":701},[425,63230,63231,63233,63235,63237,63239,63242,63244,63246],{"class":427,"line":33423},[425,63232,52096],{"class":701},[425,63234,1589],{"class":52055},[425,63236,54241],{"class":431},[425,63238,1204],{"class":701},[425,63240,63241],{"class":435},"\"avatar\"",[425,63243,56069],{"class":701},[425,63245,1589],{"class":52055},[425,63247,52062],{"class":701},[425,63249,63250,63252,63254,63256,63258,63261,63263,63265,63268,63270,63272,63274,63277,63279,63282,63284,63286],{"class":427,"line":33429},[425,63251,52096],{"class":701},[425,63253,55043],{"class":52055},[425,63255,15956],{"class":431},[425,63257,1204],{"class":701},[425,63259,63260],{"class":435},"\"tx\"",[425,63262,61775],{"class":431},[425,63264,1204],{"class":701},[425,63266,63267],{"class":435},"\"发一条友善的评论\"",[425,63269,55066],{"class":431},[425,63271,1204],{"class":701},[425,63273,4701],{"class":435},[425,63275,63276],{"class":431}," maxlength",[425,63278,1204],{"class":701},[425,63280,63281],{"class":435},"\"200\"",[425,63283,56069],{"class":701},[425,63285,55043],{"class":52055},[425,63287,52062],{"class":701},[425,63289,63290,63292,63294,63297,63299],{"class":427,"line":33449},[425,63291,52096],{"class":701},[425,63293,54642],{"class":52055},[425,63295,63296],{"class":701},">发布\u003C\u002F",[425,63298,54642],{"class":52055},[425,63300,52062],{"class":701},[425,63302,63303,63305,63307],{"class":427,"line":33455},[425,63304,53172],{"class":701},[425,63306,52366],{"class":52055},[425,63308,52062],{"class":701},[425,63310,63311,63313,63315,63317,63319,63321],{"class":427,"line":33466},[425,63312,52899],{"class":701},[425,63314,52366],{"class":52055},[425,63316,54241],{"class":431},[425,63318,1204],{"class":701},[425,63320,63226],{"class":435},[425,63322,52062],{"class":701},[425,63324,63325,63327,63329,63331,63333,63336,63339,63341],{"class":427,"line":33472},[425,63326,52096],{"class":701},[425,63328,425],{"class":52055},[425,63330,54241],{"class":431},[425,63332,1204],{"class":701},[425,63334,63335],{"class":435},"\"total\"",[425,63337,63338],{"class":701},">0\u002F200字\u003C\u002F",[425,63340,425],{"class":52055},[425,63342,52062],{"class":701},[425,63344,63345,63347,63349],{"class":427,"line":33478},[425,63346,53172],{"class":701},[425,63348,52366],{"class":52055},[425,63350,52062],{"class":701},[425,63352,63353,63355,63357,63359,63361,63364],{"class":427,"line":33484},[425,63354,52899],{"class":701},[425,63356,52366],{"class":52055},[425,63358,54241],{"class":431},[425,63360,1204],{"class":701},[425,63362,63363],{"class":435},"\"list\"",[425,63365,52062],{"class":701},[425,63367,63368,63370,63372,63374,63376,63379,63382,63384,63387],{"class":427,"line":33490},[425,63369,52096],{"class":701},[425,63371,52366],{"class":52055},[425,63373,54241],{"class":431},[425,63375,1204],{"class":701},[425,63377,63378],{"class":435},"\"item\"",[425,63380,63381],{"class":431}," style",[425,63383,1204],{"class":701},[425,63385,63386],{"class":435},"\"display: none;\"",[425,63388,52062],{"class":701},[425,63390,63391,63393,63395,63397,63399,63401,63403,63405],{"class":427,"line":33496},[425,63392,55989],{"class":701},[425,63394,1589],{"class":52055},[425,63396,54241],{"class":431},[425,63398,1204],{"class":701},[425,63400,63241],{"class":435},[425,63402,56069],{"class":701},[425,63404,1589],{"class":52055},[425,63406,52062],{"class":701},[425,63408,63409,63411,63413,63415,63417,63420],{"class":427,"line":33502},[425,63410,55989],{"class":701},[425,63412,52366],{"class":52055},[425,63414,54241],{"class":431},[425,63416,1204],{"class":701},[425,63418,63419],{"class":435},"\"info\"",[425,63421,52062],{"class":701},[425,63423,63424,63426,63428,63430,63432,63435,63438,63440],{"class":427,"line":33508},[425,63425,56057],{"class":701},[425,63427,19],{"class":52055},[425,63429,54241],{"class":431},[425,63431,1204],{"class":701},[425,63433,63434],{"class":435},"\"name\"",[425,63436,63437],{"class":701},">清风徐来\u003C\u002F",[425,63439,19],{"class":52055},[425,63441,52062],{"class":701},[425,63443,63444,63446,63448,63450,63452,63455,63458,63460],{"class":427,"line":33528},[425,63445,56057],{"class":701},[425,63447,19],{"class":52055},[425,63449,54241],{"class":431},[425,63451,1204],{"class":701},[425,63453,63454],{"class":435},"\"text\"",[425,63456,63457],{"class":701},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[425,63459,19],{"class":52055},[425,63461,52062],{"class":701},[425,63463,63464,63466,63468,63470,63472,63475,63478,63480],{"class":427,"line":33534},[425,63465,56057],{"class":701},[425,63467,19],{"class":52055},[425,63469,54241],{"class":431},[425,63471,1204],{"class":701},[425,63473,63474],{"class":435},"\"time\"",[425,63476,63477],{"class":701},">2022-10-10 20:29:21\u003C\u002F",[425,63479,19],{"class":52055},[425,63481,52062],{"class":701},[425,63483,63484,63486,63488],{"class":427,"line":33550},[425,63485,56162],{"class":701},[425,63487,52366],{"class":52055},[425,63489,52062],{"class":701},[425,63491,63492,63494,63496],{"class":427,"line":33556},[425,63493,52531],{"class":701},[425,63495,52366],{"class":52055},[425,63497,52062],{"class":701},[425,63499,63500,63502,63504],{"class":427,"line":33570},[425,63501,53172],{"class":701},[425,63503,52366],{"class":52055},[425,63505,52062],{"class":701},[425,63507,63508,63510,63512],{"class":427,"line":33576},[425,63509,52899],{"class":701},[425,63511,52568],{"class":52055},[425,63513,52062],{"class":701},[425,63515,63516,63518,63521,63523,63525,63527,63529,63532],{"class":427,"line":33591},[425,63517,12220],{"class":1155},[425,63519,63520],{"class":691}," tx",[425,63522,14563],{"class":1155},[425,63524,55151],{"class":701},[425,63526,55154],{"class":431},[425,63528,1159],{"class":701},[425,63530,63531],{"class":435},"'#tx'",[425,63533,1165],{"class":701},[425,63535,63536,63538,63541,63543,63545,63547,63549,63552],{"class":427,"line":33597},[425,63537,12220],{"class":1155},[425,63539,63540],{"class":691}," total",[425,63542,14563],{"class":1155},[425,63544,55151],{"class":701},[425,63546,55154],{"class":431},[425,63548,1159],{"class":701},[425,63550,63551],{"class":435},"'.total'",[425,63553,1165],{"class":701},[425,63555,63556],{"class":427,"line":33606},[425,63557,63558],{"class":1216},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[425,63560,63561,63564,63566,63568,63570,63572,63574],{"class":427,"line":33612},[425,63562,63563],{"class":701},"    tx.",[425,63565,58568],{"class":431},[425,63567,1159],{"class":701},[425,63569,62082],{"class":435},[425,63571,13434],{"class":701},[425,63573,55204],{"class":1155},[425,63575,55207],{"class":701},[425,63577,63578,63581,63583],{"class":427,"line":33621},[425,63579,63580],{"class":701},"      total.style.opacity ",[425,63582,1204],{"class":1155},[425,63584,56454],{"class":691},[425,63586,63587],{"class":427,"line":33627},[425,63588,34216],{"class":701},[425,63590,63591],{"class":427,"line":33633},[425,63592,63593],{"class":1216},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[425,63595,63596,63598,63600,63602,63604,63606,63608],{"class":427,"line":33642},[425,63597,63563],{"class":701},[425,63599,58568],{"class":431},[425,63601,1159],{"class":701},[425,63603,62143],{"class":435},[425,63605,13434],{"class":701},[425,63607,55204],{"class":1155},[425,63609,55207],{"class":701},[425,63611,63612,63614,63616],{"class":427,"line":33648},[425,63613,63580],{"class":701},[425,63615,1204],{"class":1155},[425,63617,48088],{"class":691},[425,63619,63620],{"class":427,"line":33659},[425,63621,34216],{"class":701},[425,63623,63624],{"class":427,"line":33665},[425,63625,63626],{"class":1216},"    \u002F\u002F 3. 检测用户输入\n",[425,63628,63629,63631,63633,63635,63638,63640,63642],{"class":427,"line":33684},[425,63630,63563],{"class":701},[425,63632,58568],{"class":431},[425,63634,1159],{"class":701},[425,63636,63637],{"class":435},"'input'",[425,63639,13434],{"class":701},[425,63641,55204],{"class":1155},[425,63643,55207],{"class":701},[425,63645,63646],{"class":427,"line":33690},[425,63647,63648],{"class":1216},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[425,63650,63651,63654,63656,63659,63662,63664,63667,63669,63671],{"class":427,"line":33701},[425,63652,63653],{"class":701},"      total.innerHTML ",[425,63655,1204],{"class":1155},[425,63657,63658],{"class":435}," `${",[425,63660,63661],{"class":701},"tx",[425,63663,1706],{"class":435},[425,63665,63666],{"class":701},"value",[425,63668,1706],{"class":435},[425,63670,52723],{"class":691},[425,63672,63673],{"class":435},"}\u002F200字`\n",[425,63675,63676],{"class":427,"line":33707},[425,63677,34216],{"class":701},[425,63679,63680],{"class":427,"line":33727},[425,63681,3400],{"emptyLinePlaceholder":1084},[425,63683,63684],{"class":427,"line":33743},[425,63685,63686],{"class":1216},"    \u002F\u002F const str = 'andy'\n",[425,63688,63689],{"class":427,"line":33749},[425,63690,63691],{"class":1216},"    \u002F\u002F console.log(str.length)\n",[425,63693,63694,63696,63698],{"class":427,"line":33763},[425,63695,53172],{"class":701},[425,63697,52568],{"class":52055},[425,63699,52062],{"class":701},[425,63701,63702,63704,63706],{"class":427,"line":33769},[425,63703,52540],{"class":701},[425,63705,52555],{"class":52055},[425,63707,52062],{"class":701},[425,63709,63710],{"class":427,"line":33775},[425,63711,3400],{"emptyLinePlaceholder":1084},[425,63713,63714,63716,63718],{"class":427,"line":33786},[425,63715,52540],{"class":701},[425,63717,51390],{"class":52055},[425,63719,52062],{"class":701},[22995,63721,63723],{"id":63722},"_3254-change事件","3.2.5.4 change事件",[19,63725,63726],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,63728,63729],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,63731,63732],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[416,63734,63736],{"className":51388,"code":63735,"language":51390,"meta":395,"style":395},"\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",[422,63737,63738,63748,63762,63766,63774,63788,63808,63820,63828,63832,63840,63854,63862,63880,63898,63910,63914,63922,63930,63934],{"__ignoreMap":395},[425,63739,63740,63742,63744,63746],{"class":427,"line":428},[425,63741,52052],{"class":701},[425,63743,52056],{"class":52055},[425,63745,52059],{"class":431},[425,63747,52062],{"class":701},[425,63749,63750,63752,63754,63756,63758,63760],{"class":427,"line":698},[425,63751,2057],{"class":701},[425,63753,51390],{"class":52055},[425,63755,52071],{"class":431},[425,63757,1204],{"class":701},[425,63759,52076],{"class":435},[425,63761,52062],{"class":701},[425,63763,63764],{"class":427,"line":710},[425,63765,3400],{"emptyLinePlaceholder":1084},[425,63767,63768,63770,63772],{"class":427,"line":721},[425,63769,2057],{"class":701},[425,63771,52089],{"class":52055},[425,63773,52062],{"class":701},[425,63775,63776,63778,63780,63782,63784,63786],{"class":427,"line":735},[425,63777,52899],{"class":701},[425,63779,52099],{"class":52055},[425,63781,52102],{"class":431},[425,63783,1204],{"class":701},[425,63785,52107],{"class":435},[425,63787,52062],{"class":701},[425,63789,63790,63792,63794,63796,63798,63800,63802,63804,63806],{"class":427,"line":743},[425,63791,52899],{"class":701},[425,63793,52099],{"class":52055},[425,63795,15917],{"class":431},[425,63797,1204],{"class":701},[425,63799,52146],{"class":435},[425,63801,52126],{"class":431},[425,63803,1204],{"class":701},[425,63805,52153],{"class":435},[425,63807,52062],{"class":701},[425,63809,63810,63812,63814,63816,63818],{"class":427,"line":751},[425,63811,52899],{"class":701},[425,63813,52162],{"class":52055},[425,63815,52165],{"class":701},[425,63817,52162],{"class":52055},[425,63819,52062],{"class":701},[425,63821,63822,63824,63826],{"class":427,"line":759},[425,63823,52540],{"class":701},[425,63825,52089],{"class":52055},[425,63827,52062],{"class":701},[425,63829,63830],{"class":427,"line":770},[425,63831,3400],{"emptyLinePlaceholder":1084},[425,63833,63834,63836,63838],{"class":427,"line":780},[425,63835,2057],{"class":701},[425,63837,52555],{"class":52055},[425,63839,52062],{"class":701},[425,63841,63842,63844,63846,63848,63850,63852],{"class":427,"line":790},[425,63843,52899],{"class":701},[425,63845,54576],{"class":52055},[425,63847,54579],{"class":431},[425,63849,1204],{"class":701},[425,63851,63454],{"class":435},[425,63853,52062],{"class":701},[425,63855,63856,63858,63860],{"class":427,"line":805},[425,63857,52899],{"class":701},[425,63859,52568],{"class":52055},[425,63861,52062],{"class":701},[425,63863,63864,63866,63868,63870,63872,63874,63876,63878],{"class":427,"line":818},[425,63865,12220],{"class":1155},[425,63867,61360],{"class":691},[425,63869,14563],{"class":1155},[425,63871,55151],{"class":701},[425,63873,55154],{"class":431},[425,63875,1159],{"class":701},[425,63877,63637],{"class":435},[425,63879,1165],{"class":701},[425,63881,63882,63885,63887,63889,63892,63894,63896],{"class":427,"line":831},[425,63883,63884],{"class":701},"    input.",[425,63886,58568],{"class":431},[425,63888,1159],{"class":701},[425,63890,63891],{"class":435},"'change'",[425,63893,13434],{"class":701},[425,63895,55204],{"class":1155},[425,63897,55207],{"class":701},[425,63899,63900,63902,63904,63906,63908],{"class":427,"line":841},[425,63901,58999],{"class":701},[425,63903,59002],{"class":431},[425,63905,1159],{"class":701},[425,63907,1741],{"class":691},[425,63909,1165],{"class":701},[425,63911,63912],{"class":427,"line":852},[425,63913,34216],{"class":701},[425,63915,63916,63918,63920],{"class":427,"line":862},[425,63917,53172],{"class":701},[425,63919,52568],{"class":52055},[425,63921,52062],{"class":701},[425,63923,63924,63926,63928],{"class":427,"line":878},[425,63925,52540],{"class":701},[425,63927,52555],{"class":52055},[425,63929,52062],{"class":701},[425,63931,63932],{"class":427,"line":914},[425,63933,3400],{"emptyLinePlaceholder":1084},[425,63935,63936,63938,63940],{"class":427,"line":943},[425,63937,52540],{"class":701},[425,63939,51390],{"class":52055},[425,63941,52062],{"class":701},[19,63943,63944],{},"总结：内容发生改变才回去触发",[14,63946,63948],{"id":63947},"_326-事件对象","3.2.6 事件对象",[22995,63950,63952],{"id":63951},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,63954,63955],{},[393,63956],{"alt":395,"src":63957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,63959,63960],{},[393,63961],{"alt":395,"src":63962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,63964,63965],{},"点击一次，就输出了事件对象，它是个对象",[19,63967,63968],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,63970,63971],{},[393,63972],{"alt":395,"src":63973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22995,63975,63977],{"id":63976},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,63979,63980],{},[393,63981],{"alt":395,"src":63982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,63984,63985],{},"实现按特殊字符才是实现打印输出效果：",[416,63987,63989],{"className":53822,"code":63988,"language":53824,"meta":395,"style":395},"\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",[422,63990,63991,63999,64004,64018,64026,64031,64036,64041,64046,64051,64056,64061,64066,64071,64075,64079,64087],{"__ignoreMap":395},[425,63992,63993,63995,63997],{"class":427,"line":428},[425,63994,2057],{"class":701},[425,63996,52555],{"class":52055},[425,63998,52062],{"class":701},[425,64000,64001],{"class":427,"line":698},[425,64002,64003],{"class":1216},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[425,64005,64006,64008,64010,64012,64014,64016],{"class":427,"line":710},[425,64007,52899],{"class":701},[425,64009,54576],{"class":52055},[425,64011,54579],{"class":431},[425,64013,1204],{"class":701},[425,64015,63454],{"class":435},[425,64017,52062],{"class":701},[425,64019,64020,64022,64024],{"class":427,"line":721},[425,64021,52899],{"class":701},[425,64023,52568],{"class":52055},[425,64025,52062],{"class":701},[425,64027,64028],{"class":427,"line":735},[425,64029,64030],{"class":701},"    \u002F\u002F const btn = document.querySelector('button')\n",[425,64032,64033],{"class":427,"line":743},[425,64034,64035],{"class":701},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[425,64037,64038],{"class":427,"line":751},[425,64039,64040],{"class":701},"    \u002F\u002F   console.log(e);\n",[425,64042,64043],{"class":427,"line":759},[425,64044,64045],{"class":701},"    \u002F\u002F })\n",[425,64047,64048],{"class":427,"line":770},[425,64049,64050],{"class":701},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[425,64052,64053],{"class":427,"line":780},[425,64054,64055],{"class":701},"    const input = document.querySelector('input')\n",[425,64057,64058],{"class":427,"line":790},[425,64059,64060],{"class":701},"    input.addEventListener('keyup', function (e) {\n",[425,64062,64063],{"class":427,"line":805},[425,64064,64065],{"class":701},"      if (e.key === 'Enter') {\n",[425,64067,64068],{"class":427,"line":818},[425,64069,64070],{"class":701},"        console.log('我按下了回车键')\n",[425,64072,64073],{"class":427,"line":831},[425,64074,53153],{"class":701},[425,64076,64077],{"class":427,"line":841},[425,64078,34216],{"class":701},[425,64080,64081,64083,64085],{"class":427,"line":852},[425,64082,53172],{"class":701},[425,64084,52568],{"class":52055},[425,64086,52062],{"class":701},[425,64088,64089,64091,64093],{"class":427,"line":862},[425,64090,52540],{"class":701},[425,64092,52555],{"class":52055},[425,64094,52062],{"class":701},[22995,64096,64098],{"id":64097},"_3263-trim方法","3.2.6.3 trim方法",[19,64100,64101],{},[393,64102],{"alt":395,"src":64103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,64105,64106],{},[393,64107],{"alt":395,"src":64108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,64110,64111],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,64113,64114],{},"str.trim()",[14,64116,64118],{"id":64117},"_327-环境对象","3.2.7 环境对象",[19,64120,64121],{},[393,64122],{"alt":395,"src":64123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,64125,64126],{},[393,64127],{"alt":395,"src":64128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,64130,64131],{},[393,64132],{"alt":395,"src":64133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,64135,64136],{},"实际函数调用是window.fn()",[19,64138,64139],{},"普通函数里面this指向的是window",[447,64141,64142,64145,64148],{},[450,64143,64144],{},"在普通函数下，this指向的是window",[450,64146,64147],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[450,64149,64150],{},"箭头函数没有this",[19,64152,64153],{},"粗略记法就是：谁调用，this就指向谁",[19,64155,64156],{},[393,64157],{"alt":395,"src":64158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,64160,64161],{},[393,64162],{"alt":395,"src":64163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,64165,64166],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,64168,64169],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[416,64171,64173],{"className":53822,"code":64172,"language":53824,"meta":395,"style":395},"\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",[422,64174,64175,64183,64195,64203,64208,64213,64218,64223,64227,64235],{"__ignoreMap":395},[425,64176,64177,64179,64181],{"class":427,"line":428},[425,64178,2057],{"class":701},[425,64180,52555],{"class":52055},[425,64182,52062],{"class":701},[425,64184,64185,64187,64189,64191,64193],{"class":427,"line":698},[425,64186,52899],{"class":701},[425,64188,54642],{"class":52055},[425,64190,54648],{"class":701},[425,64192,54642],{"class":52055},[425,64194,52062],{"class":701},[425,64196,64197,64199,64201],{"class":427,"line":710},[425,64198,52899],{"class":701},[425,64200,52568],{"class":52055},[425,64202,52062],{"class":701},[425,64204,64205],{"class":427,"line":721},[425,64206,64207],{"class":701},"    const button = document.querySelector('button')\n",[425,64209,64210],{"class":427,"line":735},[425,64211,64212],{"class":701},"    button.addEventListener('click', function () {\n",[425,64214,64215],{"class":427,"line":743},[425,64216,64217],{"class":701},"      \u002F\u002F console.log(this);\n",[425,64219,64220],{"class":427,"line":751},[425,64221,64222],{"class":701},"      this.style.color = 'pink'\n",[425,64224,64225],{"class":427,"line":759},[425,64226,34216],{"class":701},[425,64228,64229,64231,64233],{"class":427,"line":770},[425,64230,53172],{"class":701},[425,64232,52568],{"class":52055},[425,64234,52062],{"class":701},[425,64236,64237,64239,64241],{"class":427,"line":780},[425,64238,52540],{"class":701},[425,64240,52555],{"class":52055},[425,64242,52062],{"class":701},[14,64244,64246],{"id":64245},"_328-回调函数","3.2.8 回调函数",[19,64248,64249],{},[393,64250],{"alt":395,"src":64251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,64253,64254],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,64256,12331],{},[447,64258,64259,64262,64265],{},[450,64260,64261],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[450,64263,64264],{},"回调函数本质还是函数，只不过把它当成参数使用",[450,64266,64267],{},"使用匿名函数做为回调函数比较常见",[14,64269,64271],{"id":64270},"_329-tab栏切换","3.2.9 tab栏切换",[19,64273,64274],{},[393,64275],{"alt":395,"src":64276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[416,64278,64280],{"className":51388,"code":64279,"language":51390,"meta":395,"style":395},"\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",[422,64281,64282,64292,64306,64310,64318,64332,64352,64372,64385,64393,64399,64409,64419,64423,64427,64434,64447,64460,64472,64488,64492,64496,64503,64515,64527,64539,64549,64559,64563,64567,64576,64588,64599,64611,64615,64619,64627,64637,64647,64657,64661,64665,64675,64689,64701,64705,64709,64721,64732,64749,64759,64763,64767,64782,64793,64803,64807,64811,64818,64833,64837,64841,64849,64859,64863,64867,64876,64886,64890,64898,64906,64910,64918,64933,64948,64961,64969,65003,65030,65057,65084,65111,65119,65127,65142,65179,65214,65249,65284,65319,65327,65335,65343,65348,65353,65373,65378,65407,65412,65417,65435,65440,65445,65450,65472,65477,65493,65497,65502,65507,65528,65533,65562,65566,65571,65575,65583,65591,65595],{"__ignoreMap":395},[425,64283,64284,64286,64288,64290],{"class":427,"line":428},[425,64285,52052],{"class":701},[425,64287,52056],{"class":52055},[425,64289,52059],{"class":431},[425,64291,52062],{"class":701},[425,64293,64294,64296,64298,64300,64302,64304],{"class":427,"line":698},[425,64295,2057],{"class":701},[425,64297,51390],{"class":52055},[425,64299,52071],{"class":431},[425,64301,1204],{"class":701},[425,64303,52076],{"class":435},[425,64305,52062],{"class":701},[425,64307,64308],{"class":427,"line":710},[425,64309,3400],{"emptyLinePlaceholder":1084},[425,64311,64312,64314,64316],{"class":427,"line":721},[425,64313,2057],{"class":701},[425,64315,52089],{"class":52055},[425,64317,52062],{"class":701},[425,64319,64320,64322,64324,64326,64328,64330],{"class":427,"line":735},[425,64321,52899],{"class":701},[425,64323,52099],{"class":52055},[425,64325,52102],{"class":431},[425,64327,1204],{"class":701},[425,64329,52107],{"class":435},[425,64331,59882],{"class":701},[425,64333,64334,64336,64338,64340,64342,64344,64346,64348,64350],{"class":427,"line":743},[425,64335,52899],{"class":701},[425,64337,52099],{"class":52055},[425,64339,52118],{"class":431},[425,64341,1204],{"class":701},[425,64343,52123],{"class":435},[425,64345,52126],{"class":431},[425,64347,1204],{"class":701},[425,64349,52131],{"class":435},[425,64351,59882],{"class":701},[425,64353,64354,64356,64358,64360,64362,64364,64366,64368,64370],{"class":427,"line":751},[425,64355,52899],{"class":701},[425,64357,52099],{"class":52055},[425,64359,15917],{"class":431},[425,64361,1204],{"class":701},[425,64363,52146],{"class":435},[425,64365,52126],{"class":431},[425,64367,1204],{"class":701},[425,64369,52153],{"class":435},[425,64371,59882],{"class":701},[425,64373,64374,64376,64378,64381,64383],{"class":427,"line":759},[425,64375,52899],{"class":701},[425,64377,52162],{"class":52055},[425,64379,64380],{"class":701},">tab栏切换\u003C\u002F",[425,64382,52162],{"class":52055},[425,64384,52062],{"class":701},[425,64386,64387,64389,64391],{"class":427,"line":770},[425,64388,52899],{"class":701},[425,64390,1074],{"class":52055},[425,64392,52062],{"class":701},[425,64394,64395,64397],{"class":427,"line":780},[425,64396,7403],{"class":52055},[425,64398,16569],{"class":701},[425,64400,64401,64403,64405,64407],{"class":427,"line":790},[425,64402,55461],{"class":691},[425,64404,52192],{"class":701},[425,64406,1341],{"class":691},[425,64408,2307],{"class":701},[425,64410,64411,64413,64415,64417],{"class":427,"line":805},[425,64412,55450],{"class":691},[425,64414,52192],{"class":701},[425,64416,1341],{"class":691},[425,64418,2307],{"class":701},[425,64420,64421],{"class":427,"line":818},[425,64422,3187],{"class":701},[425,64424,64425],{"class":427,"line":831},[425,64426,3400],{"emptyLinePlaceholder":1084},[425,64428,64429,64432],{"class":427,"line":841},[425,64430,64431],{"class":431},"    .tab",[425,64433,16569],{"class":701},[425,64435,64436,64438,64440,64443,64445],{"class":427,"line":852},[425,64437,55526],{"class":691},[425,64439,52192],{"class":701},[425,64441,64442],{"class":691},"590",[425,64444,52247],{"class":1155},[425,64446,2307],{"class":701},[425,64448,64449,64451,64453,64456,64458],{"class":427,"line":862},[425,64450,55540],{"class":691},[425,64452,52192],{"class":701},[425,64454,64455],{"class":691},"340",[425,64457,52247],{"class":1155},[425,64459,2307],{"class":701},[425,64461,64462,64464,64466,64468,64470],{"class":427,"line":878},[425,64463,55461],{"class":691},[425,64465,52192],{"class":701},[425,64467,1848],{"class":691},[425,64469,52247],{"class":1155},[425,64471,2307],{"class":701},[425,64473,64474,64476,64478,64480,64482,64484,64486],{"class":427,"line":914},[425,64475,62732],{"class":691},[425,64477,52192],{"class":701},[425,64479,1367],{"class":691},[425,64481,52247],{"class":1155},[425,64483,52276],{"class":691},[425,64485,62999],{"class":691},[425,64487,2307],{"class":701},[425,64489,64490],{"class":427,"line":943},[425,64491,3187],{"class":701},[425,64493,64494],{"class":427,"line":956},[425,64495,3400],{"emptyLinePlaceholder":1084},[425,64497,64498,64501],{"class":427,"line":964},[425,64499,64500],{"class":431},"    .tab-nav",[425,64502,16569],{"class":701},[425,64504,64505,64507,64509,64511,64513],{"class":427,"line":2733},[425,64506,55526],{"class":691},[425,64508,52192],{"class":701},[425,64510,1460],{"class":691},[425,64512,1477],{"class":1155},[425,64514,2307],{"class":701},[425,64516,64517,64519,64521,64523,64525],{"class":427,"line":2750},[425,64518,55540],{"class":691},[425,64520,52192],{"class":701},[425,64522,2054],{"class":691},[425,64524,52247],{"class":1155},[425,64526,2307],{"class":701},[425,64528,64529,64531,64533,64535,64537],{"class":427,"line":2755},[425,64530,58114],{"class":691},[425,64532,52192],{"class":701},[425,64534,2054],{"class":691},[425,64536,52247],{"class":1155},[425,64538,2307],{"class":701},[425,64540,64541,64543,64545,64547],{"class":427,"line":2760},[425,64542,55764],{"class":691},[425,64544,52192],{"class":701},[425,64546,52232],{"class":691},[425,64548,2307],{"class":701},[425,64550,64551,64553,64555,64557],{"class":427,"line":2765},[425,64552,55775],{"class":691},[425,64554,52192],{"class":701},[425,64556,52423],{"class":691},[425,64558,2307],{"class":701},[425,64560,64561],{"class":427,"line":2779},[425,64562,3187],{"class":701},[425,64564,64565],{"class":427,"line":2784},[425,64566,3400],{"emptyLinePlaceholder":1084},[425,64568,64569,64571,64574],{"class":427,"line":3577},[425,64570,64500],{"class":431},[425,64572,64573],{"class":52055}," h3",[425,64575,16569],{"class":701},[425,64577,64578,64580,64582,64584,64586],{"class":427,"line":3591},[425,64579,55677],{"class":691},[425,64581,52192],{"class":701},[425,64583,1948],{"class":691},[425,64585,52247],{"class":1155},[425,64587,2307],{"class":701},[425,64589,64590,64592,64594,64597],{"class":427,"line":3599},[425,64591,63089],{"class":691},[425,64593,52192],{"class":701},[425,64595,64596],{"class":691},"normal",[425,64598,2307],{"class":701},[425,64600,64601,64603,64605,64607,64609],{"class":427,"line":3604},[425,64602,62755],{"class":691},[425,64604,52192],{"class":701},[425,64606,1848],{"class":691},[425,64608,52247],{"class":1155},[425,64610,2307],{"class":701},[425,64612,64613],{"class":427,"line":3610},[425,64614,3187],{"class":701},[425,64616,64617],{"class":427,"line":3616},[425,64618,3400],{"emptyLinePlaceholder":1084},[425,64620,64621,64623,64625],{"class":427,"line":3621},[425,64622,64500],{"class":431},[425,64624,62047],{"class":52055},[425,64626,16569],{"class":701},[425,64628,64629,64631,64633,64635],{"class":427,"line":8948},[425,64630,55487],{"class":691},[425,64632,52192],{"class":701},[425,64634,55492],{"class":691},[425,64636,2307],{"class":701},[425,64638,64639,64641,64643,64645],{"class":427,"line":8972},[425,64640,55764],{"class":691},[425,64642,52192],{"class":701},[425,64644,52232],{"class":691},[425,64646,2307],{"class":701},[425,64648,64649,64651,64653,64655],{"class":427,"line":8977},[425,64650,55775],{"class":691},[425,64652,52192],{"class":701},[425,64654,52335],{"class":691},[425,64656,2307],{"class":701},[425,64658,64659],{"class":427,"line":8983},[425,64660,3187],{"class":701},[425,64662,64663],{"class":427,"line":9010},[425,64664,3400],{"emptyLinePlaceholder":1084},[425,64666,64667,64669,64671,64673],{"class":427,"line":9015},[425,64668,64500],{"class":431},[425,64670,62047],{"class":52055},[425,64672,55830],{"class":52055},[425,64674,16569],{"class":701},[425,64676,64677,64679,64681,64683,64685,64687],{"class":427,"line":9021},[425,64678,55461],{"class":691},[425,64680,52192],{"class":701},[425,64682,1341],{"class":691},[425,64684,9950],{"class":691},[425,64686,52247],{"class":1155},[425,64688,2307],{"class":701},[425,64690,64691,64693,64695,64697,64699],{"class":427,"line":9033},[425,64692,55677],{"class":691},[425,64694,52192],{"class":701},[425,64696,1697],{"class":691},[425,64698,52247],{"class":1155},[425,64700,2307],{"class":701},[425,64702,64703],{"class":427,"line":9045},[425,64704,3187],{"class":701},[425,64706,64707],{"class":427,"line":9057},[425,64708,3400],{"emptyLinePlaceholder":1084},[425,64710,64711,64713,64715,64717,64719],{"class":427,"line":10715},[425,64712,64500],{"class":431},[425,64714,62047],{"class":52055},[425,64716,55830],{"class":52055},[425,64718,2412],{"class":52055},[425,64720,16569],{"class":701},[425,64722,64723,64726,64728,64730],{"class":427,"line":10740},[425,64724,64725],{"class":691},"      text-decoration",[425,64727,52192],{"class":701},[425,64729,55492],{"class":691},[425,64731,2307],{"class":701},[425,64733,64734,64736,64738,64740,64742,64744,64747],{"class":427,"line":10763},[425,64735,62987],{"class":691},[425,64737,52192],{"class":701},[425,64739,1235],{"class":691},[425,64741,52247],{"class":1155},[425,64743,52276],{"class":691},[425,64745,64746],{"class":691}," transparent",[425,64748,2307],{"class":701},[425,64750,64751,64753,64755,64757],{"class":427,"line":10787},[425,64752,58171],{"class":691},[425,64754,52192],{"class":701},[425,64756,63124],{"class":691},[425,64758,2307],{"class":701},[425,64760,64761],{"class":427,"line":10792},[425,64762,3187],{"class":701},[425,64764,64765],{"class":427,"line":10797},[425,64766,3400],{"emptyLinePlaceholder":1084},[425,64768,64769,64771,64773,64775,64777,64780],{"class":427,"line":10802},[425,64770,64500],{"class":431},[425,64772,62047],{"class":52055},[425,64774,55830],{"class":52055},[425,64776,2412],{"class":52055},[425,64778,64779],{"class":431},".active",[425,64781,16569],{"class":701},[425,64783,64784,64786,64788,64791],{"class":427,"line":10811},[425,64785,62546],{"class":691},[425,64787,52192],{"class":701},[425,64789,64790],{"class":691},"#e1251b",[425,64792,2307],{"class":701},[425,64794,64795,64797,64799,64801],{"class":427,"line":10816},[425,64796,58171],{"class":691},[425,64798,52192],{"class":701},[425,64800,64790],{"class":691},[425,64802,2307],{"class":701},[425,64804,64805],{"class":427,"line":10822},[425,64806,3187],{"class":701},[425,64808,64809],{"class":427,"line":10843},[425,64810,3400],{"emptyLinePlaceholder":1084},[425,64812,64813,64816],{"class":427,"line":10849},[425,64814,64815],{"class":431},"    .tab-content",[425,64817,16569],{"class":701},[425,64819,64820,64822,64824,64826,64829,64831],{"class":427,"line":10863},[425,64821,55450],{"class":691},[425,64823,52192],{"class":701},[425,64825,1341],{"class":691},[425,64827,64828],{"class":691}," 16",[425,64830,52247],{"class":1155},[425,64832,2307],{"class":701},[425,64834,64835],{"class":427,"line":10869},[425,64836,3187],{"class":701},[425,64838,64839],{"class":427,"line":10896},[425,64840,3400],{"emptyLinePlaceholder":1084},[425,64842,64843,64845,64847],{"class":427,"line":10905},[425,64844,64815],{"class":431},[425,64846,62929],{"class":431},[425,64848,16569],{"class":701},[425,64850,64851,64853,64855,64857],{"class":427,"line":10911},[425,64852,55764],{"class":691},[425,64854,52192],{"class":701},[425,64856,55492],{"class":691},[425,64858,2307],{"class":701},[425,64860,64861],{"class":427,"line":10919},[425,64862,3187],{"class":701},[425,64864,64865],{"class":427,"line":10924},[425,64866,3400],{"emptyLinePlaceholder":1084},[425,64868,64869,64871,64874],{"class":427,"line":17601},[425,64870,64815],{"class":431},[425,64872,64873],{"class":431}," .item.active",[425,64875,16569],{"class":701},[425,64877,64878,64880,64882,64884],{"class":427,"line":17607},[425,64879,55764],{"class":691},[425,64881,52192],{"class":701},[425,64883,61624],{"class":691},[425,64885,2307],{"class":701},[425,64887,64888],{"class":427,"line":17630},[425,64889,3187],{"class":701},[425,64891,64892,64894,64896],{"class":427,"line":17636},[425,64893,53172],{"class":701},[425,64895,1074],{"class":52055},[425,64897,52062],{"class":701},[425,64899,64900,64902,64904],{"class":427,"line":17659},[425,64901,52540],{"class":701},[425,64903,52089],{"class":52055},[425,64905,52062],{"class":701},[425,64907,64908],{"class":427,"line":17673},[425,64909,3400],{"emptyLinePlaceholder":1084},[425,64911,64912,64914,64916],{"class":427,"line":17693},[425,64913,2057],{"class":701},[425,64915,52555],{"class":52055},[425,64917,52062],{"class":701},[425,64919,64920,64922,64924,64926,64928,64931],{"class":427,"line":17699},[425,64921,52899],{"class":701},[425,64923,52366],{"class":52055},[425,64925,54241],{"class":431},[425,64927,1204],{"class":701},[425,64929,64930],{"class":435},"\"tab\"",[425,64932,52062],{"class":701},[425,64934,64935,64937,64939,64941,64943,64946],{"class":427,"line":17710},[425,64936,52096],{"class":701},[425,64938,52366],{"class":52055},[425,64940,54241],{"class":431},[425,64942,1204],{"class":701},[425,64944,64945],{"class":435},"\"tab-nav\"",[425,64947,52062],{"class":701},[425,64949,64950,64952,64954,64957,64959],{"class":427,"line":17733},[425,64951,55989],{"class":701},[425,64953,14],{"class":52055},[425,64955,64956],{"class":701},">每日特价\u003C\u002F",[425,64958,14],{"class":52055},[425,64960,52062],{"class":701},[425,64962,64963,64965,64967],{"class":427,"line":17755},[425,64964,55989],{"class":701},[425,64966,447],{"class":52055},[425,64968,52062],{"class":701},[425,64970,64971,64973,64975,64977,64979,64981,64983,64985,64987,64989,64992,64995,64997,64999,65001],{"class":427,"line":17760},[425,64972,56057],{"class":701},[425,64974,450],{"class":52055},[425,64976,61807],{"class":701},[425,64978,22],{"class":52055},[425,64980,54241],{"class":431},[425,64982,1204],{"class":701},[425,64984,60461],{"class":435},[425,64986,61812],{"class":431},[425,64988,1204],{"class":701},[425,64990,64991],{"class":435},"\"javascript:;\"",[425,64993,64994],{"class":701},">精选\u003C\u002F",[425,64996,22],{"class":52055},[425,64998,56069],{"class":701},[425,65000,450],{"class":52055},[425,65002,52062],{"class":701},[425,65004,65005,65007,65009,65011,65013,65015,65017,65019,65022,65024,65026,65028],{"class":427,"line":17766},[425,65006,56057],{"class":701},[425,65008,450],{"class":52055},[425,65010,61807],{"class":701},[425,65012,22],{"class":52055},[425,65014,61812],{"class":431},[425,65016,1204],{"class":701},[425,65018,64991],{"class":435},[425,65020,65021],{"class":701},">美食\u003C\u002F",[425,65023,22],{"class":52055},[425,65025,56069],{"class":701},[425,65027,450],{"class":52055},[425,65029,52062],{"class":701},[425,65031,65032,65034,65036,65038,65040,65042,65044,65046,65049,65051,65053,65055],{"class":427,"line":17780},[425,65033,56057],{"class":701},[425,65035,450],{"class":52055},[425,65037,61807],{"class":701},[425,65039,22],{"class":52055},[425,65041,61812],{"class":431},[425,65043,1204],{"class":701},[425,65045,64991],{"class":435},[425,65047,65048],{"class":701},">百货\u003C\u002F",[425,65050,22],{"class":52055},[425,65052,56069],{"class":701},[425,65054,450],{"class":52055},[425,65056,52062],{"class":701},[425,65058,65059,65061,65063,65065,65067,65069,65071,65073,65076,65078,65080,65082],{"class":427,"line":17793},[425,65060,56057],{"class":701},[425,65062,450],{"class":52055},[425,65064,61807],{"class":701},[425,65066,22],{"class":52055},[425,65068,61812],{"class":431},[425,65070,1204],{"class":701},[425,65072,64991],{"class":435},[425,65074,65075],{"class":701},">个护\u003C\u002F",[425,65077,22],{"class":52055},[425,65079,56069],{"class":701},[425,65081,450],{"class":52055},[425,65083,52062],{"class":701},[425,65085,65086,65088,65090,65092,65094,65096,65098,65100,65103,65105,65107,65109],{"class":427,"line":17798},[425,65087,56057],{"class":701},[425,65089,450],{"class":52055},[425,65091,61807],{"class":701},[425,65093,22],{"class":52055},[425,65095,61812],{"class":431},[425,65097,1204],{"class":701},[425,65099,64991],{"class":435},[425,65101,65102],{"class":701},">预告\u003C\u002F",[425,65104,22],{"class":52055},[425,65106,56069],{"class":701},[425,65108,450],{"class":52055},[425,65110,52062],{"class":701},[425,65112,65113,65115,65117],{"class":427,"line":17812},[425,65114,56162],{"class":701},[425,65116,447],{"class":52055},[425,65118,52062],{"class":701},[425,65120,65121,65123,65125],{"class":427,"line":17817},[425,65122,52531],{"class":701},[425,65124,52366],{"class":52055},[425,65126,52062],{"class":701},[425,65128,65129,65131,65133,65135,65137,65140],{"class":427,"line":17823},[425,65130,52096],{"class":701},[425,65132,52366],{"class":52055},[425,65134,54241],{"class":431},[425,65136,1204],{"class":701},[425,65138,65139],{"class":435},"\"tab-content\"",[425,65141,52062],{"class":701},[425,65143,65144,65146,65148,65150,65152,65155,65157,65159,65161,65163,65166,65168,65170,65172,65175,65177],{"class":427,"line":17828},[425,65145,55989],{"class":701},[425,65147,52366],{"class":52055},[425,65149,54241],{"class":431},[425,65151,1204],{"class":701},[425,65153,65154],{"class":435},"\"item active\"",[425,65156,61807],{"class":701},[425,65158,393],{"class":52055},[425,65160,55994],{"class":431},[425,65162,1204],{"class":701},[425,65164,65165],{"class":435},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[425,65167,56002],{"class":431},[425,65169,1204],{"class":701},[425,65171,8652],{"class":435},[425,65173,65174],{"class":701}," \u002F>\u003C\u002F",[425,65176,52366],{"class":52055},[425,65178,52062],{"class":701},[425,65180,65181,65183,65185,65187,65189,65191,65193,65195,65197,65199,65202,65204,65206,65208,65210,65212],{"class":427,"line":17842},[425,65182,55989],{"class":701},[425,65184,52366],{"class":52055},[425,65186,54241],{"class":431},[425,65188,1204],{"class":701},[425,65190,63378],{"class":435},[425,65192,61807],{"class":701},[425,65194,393],{"class":52055},[425,65196,55994],{"class":431},[425,65198,1204],{"class":701},[425,65200,65201],{"class":435},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[425,65203,56002],{"class":431},[425,65205,1204],{"class":701},[425,65207,8652],{"class":435},[425,65209,65174],{"class":701},[425,65211,52366],{"class":52055},[425,65213,52062],{"class":701},[425,65215,65216,65218,65220,65222,65224,65226,65228,65230,65232,65234,65237,65239,65241,65243,65245,65247],{"class":427,"line":17847},[425,65217,55989],{"class":701},[425,65219,52366],{"class":52055},[425,65221,54241],{"class":431},[425,65223,1204],{"class":701},[425,65225,63378],{"class":435},[425,65227,61807],{"class":701},[425,65229,393],{"class":52055},[425,65231,55994],{"class":431},[425,65233,1204],{"class":701},[425,65235,65236],{"class":435},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[425,65238,56002],{"class":431},[425,65240,1204],{"class":701},[425,65242,8652],{"class":435},[425,65244,65174],{"class":701},[425,65246,52366],{"class":52055},[425,65248,52062],{"class":701},[425,65250,65251,65253,65255,65257,65259,65261,65263,65265,65267,65269,65272,65274,65276,65278,65280,65282],{"class":427,"line":17852},[425,65252,55989],{"class":701},[425,65254,52366],{"class":52055},[425,65256,54241],{"class":431},[425,65258,1204],{"class":701},[425,65260,63378],{"class":435},[425,65262,61807],{"class":701},[425,65264,393],{"class":52055},[425,65266,55994],{"class":431},[425,65268,1204],{"class":701},[425,65270,65271],{"class":435},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[425,65273,56002],{"class":431},[425,65275,1204],{"class":701},[425,65277,8652],{"class":435},[425,65279,65174],{"class":701},[425,65281,52366],{"class":52055},[425,65283,52062],{"class":701},[425,65285,65286,65288,65290,65292,65294,65296,65298,65300,65302,65304,65307,65309,65311,65313,65315,65317],{"class":427,"line":17866},[425,65287,55989],{"class":701},[425,65289,52366],{"class":52055},[425,65291,54241],{"class":431},[425,65293,1204],{"class":701},[425,65295,63378],{"class":435},[425,65297,61807],{"class":701},[425,65299,393],{"class":52055},[425,65301,55994],{"class":431},[425,65303,1204],{"class":701},[425,65305,65306],{"class":435},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[425,65308,56002],{"class":431},[425,65310,1204],{"class":701},[425,65312,8652],{"class":435},[425,65314,65174],{"class":701},[425,65316,52366],{"class":52055},[425,65318,52062],{"class":701},[425,65320,65321,65323,65325],{"class":427,"line":17878},[425,65322,52531],{"class":701},[425,65324,52366],{"class":52055},[425,65326,52062],{"class":701},[425,65328,65329,65331,65333],{"class":427,"line":17883},[425,65330,53172],{"class":701},[425,65332,52366],{"class":52055},[425,65334,52062],{"class":701},[425,65336,65337,65339,65341],{"class":427,"line":17896},[425,65338,52899],{"class":701},[425,65340,52568],{"class":52055},[425,65342,52062],{"class":701},[425,65344,65345],{"class":427,"line":17901},[425,65346,65347],{"class":1216},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[425,65349,65350],{"class":427,"line":17906},[425,65351,65352],{"class":1216},"    \u002F\u002F 1.1 获取 a 元素 \n",[425,65354,65355,65357,65360,65362,65364,65366,65368,65371],{"class":427,"line":17911},[425,65356,12220],{"class":1155},[425,65358,65359],{"class":691}," as",[425,65361,14563],{"class":1155},[425,65363,55151],{"class":701},[425,65365,56436],{"class":431},[425,65367,1159],{"class":701},[425,65369,65370],{"class":435},"'.tab-nav a'",[425,65372,1165],{"class":701},[425,65374,65375],{"class":427,"line":17924},[425,65376,65377],{"class":1216},"    \u002F\u002F console.log(as) \n",[425,65379,65380,65382,65384,65386,65388,65390,65392,65394,65396,65399,65401,65403,65405],{"class":427,"line":17929},[425,65381,4201],{"class":1155},[425,65383,2664],{"class":701},[425,65385,52602],{"class":1155},[425,65387,10437],{"class":701},[425,65389,1204],{"class":1155},[425,65391,5093],{"class":691},[425,65393,10444],{"class":701},[425,65395,2057],{"class":1155},[425,65397,65398],{"class":701}," as.",[425,65400,52723],{"class":691},[425,65402,4214],{"class":701},[425,65404,3292],{"class":1155},[425,65406,13441],{"class":701},[425,65408,65409],{"class":427,"line":33388},[425,65410,65411],{"class":1216},"      \u002F\u002F console.log(as[i])\n",[425,65413,65414],{"class":427,"line":33394},[425,65415,65416],{"class":1216},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[425,65418,65419,65422,65424,65426,65429,65431,65433],{"class":427,"line":33400},[425,65420,65421],{"class":701},"      as[i].",[425,65423,58568],{"class":431},[425,65425,1159],{"class":701},[425,65427,65428],{"class":435},"'mouseenter'",[425,65430,13434],{"class":701},[425,65432,55204],{"class":1155},[425,65434,55207],{"class":701},[425,65436,65437],{"class":427,"line":33406},[425,65438,65439],{"class":1216},"        \u002F\u002F console.log('鼠标经过')\n",[425,65441,65442],{"class":427,"line":33412},[425,65443,65444],{"class":1216},"        \u002F\u002F 排他思想  \n",[425,65446,65447],{"class":427,"line":33423},[425,65448,65449],{"class":1216},"        \u002F\u002F 干掉别人 移除类active\n",[425,65451,65452,65454,65456,65458,65461,65463,65465,65467,65470],{"class":427,"line":33429},[425,65453,52680],{"class":701},[425,65455,55154],{"class":431},[425,65457,1159],{"class":701},[425,65459,65460],{"class":435},"'.tab-nav .active'",[425,65462,57758],{"class":701},[425,65464,57761],{"class":431},[425,65466,1159],{"class":701},[425,65468,65469],{"class":435},"'active'",[425,65471,1165],{"class":701},[425,65473,65474],{"class":427,"line":33449},[425,65475,65476],{"class":1216},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[425,65478,65479,65482,65485,65487,65489,65491],{"class":427,"line":33455},[425,65480,65481],{"class":691},"        this",[425,65483,65484],{"class":701},".classList.",[425,65486,6334],{"class":431},[425,65488,1159],{"class":701},[425,65490,65469],{"class":435},[425,65492,1165],{"class":701},[425,65494,65495],{"class":427,"line":33466},[425,65496,3400],{"emptyLinePlaceholder":1084},[425,65498,65499],{"class":427,"line":33472},[425,65500,65501],{"class":1216},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[425,65503,65504],{"class":427,"line":33478},[425,65505,65506],{"class":1216},"        \u002F\u002F 干掉别人\n",[425,65508,65509,65511,65513,65515,65518,65520,65522,65524,65526],{"class":427,"line":33484},[425,65510,52680],{"class":701},[425,65512,55154],{"class":431},[425,65514,1159],{"class":701},[425,65516,65517],{"class":435},"'.tab-content .active'",[425,65519,57758],{"class":701},[425,65521,57761],{"class":431},[425,65523,1159],{"class":701},[425,65525,65469],{"class":435},[425,65527,1165],{"class":701},[425,65529,65530],{"class":427,"line":33490},[425,65531,65532],{"class":1216},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[425,65534,65535,65537,65539,65541,65544,65546,65548,65550,65552,65554,65556,65558,65560],{"class":427,"line":33496},[425,65536,52680],{"class":701},[425,65538,55154],{"class":431},[425,65540,1159],{"class":701},[425,65542,65543],{"class":435},"`.tab-content .item:nth-child(${",[425,65545,1589],{"class":701},[425,65547,46321],{"class":1155},[425,65549,26109],{"class":691},[425,65551,57787],{"class":435},[425,65553,57758],{"class":701},[425,65555,6334],{"class":431},[425,65557,1159],{"class":701},[425,65559,65469],{"class":435},[425,65561,1165],{"class":701},[425,65563,65564],{"class":427,"line":33502},[425,65565,3400],{"emptyLinePlaceholder":1084},[425,65567,65568],{"class":427,"line":33508},[425,65569,65570],{"class":701},"      })\n",[425,65572,65573],{"class":427,"line":33528},[425,65574,3187],{"class":701},[425,65576,65577,65579,65581],{"class":427,"line":33534},[425,65578,53172],{"class":701},[425,65580,52568],{"class":52055},[425,65582,52062],{"class":701},[425,65584,65585,65587,65589],{"class":427,"line":33550},[425,65586,52540],{"class":701},[425,65588,52555],{"class":52055},[425,65590,52062],{"class":701},[425,65592,65593],{"class":427,"line":33556},[425,65594,3400],{"emptyLinePlaceholder":1084},[425,65596,65597,65599,65601],{"class":427,"line":33570},[425,65598,52540],{"class":701},[425,65600,51390],{"class":52055},[425,65602,52062],{"class":701},[19,65604,65605],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,65607,65608],{},"在监听事件中，this指向的就是他的调用者",[19,65610,65611],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,65613,54475],{},[19,65615,65616],{},"(function () {",[19,65618,65619],{},"const list = document.querySelector('.xtx-elevator-list')",[19,65621,65622],{},"list.addEventListener('click', function (e) {",[19,65624,65625],{},"if (e.target.tagName === 'A') {",[19,65627,65628],{},"\u002F\u002F 排他思想",[19,65630,65631],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,65633,65634],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,65636,65637],{},"\u002F\u002F console.log(old);",[19,65639,65640],{},"\u002F\u002F 判断",[19,65642,65643],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,65645,65646],{},"if (old) old.classList.remove('active')",[19,65648,65649],{},"e.target.classList.add('active')",[19,65651,2093],{},[19,65653,53219],{},[19,65655,65656],{},"})();",[14,65658,65660],{"id":65659},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[416,65662,65664],{"className":51388,"code":65663,"language":51390,"meta":395,"style":395},"\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",[422,65665,65666,65676,65680,65688,65692,65706,65720,65732,65740,65746,65756,65766,65770,65774,65781,65793,65804,65821,65834,65848,65858,65862,65866,65873,65884,65902,65912,65924,65928,65932,65939,65956,65967,65979,65983,65987,65994,66006,66010,66018,66026,66030,66038,66046,66054,66069,66113,66121,66134,66147,66160,66168,66176,66184,66212,66220,66232,66245,66258,66266,66274,66282,66308,66316,66329,66341,66354,66362,66370,66378,66404,66412,66425,66437,66450,66458,66466,66474,66479,66499,66504,66524,66529,66546,66551,66559,66564,66593,66606,66610,66614,66619,66623,66651,66656,66673,66678,66683,66688,66693,66719,66723,66727,66735,66743,66747],{"__ignoreMap":395},[425,65667,65668,65670,65672,65674],{"class":427,"line":428},[425,65669,52052],{"class":701},[425,65671,52056],{"class":52055},[425,65673,52059],{"class":431},[425,65675,52062],{"class":701},[425,65677,65678],{"class":427,"line":698},[425,65679,3400],{"emptyLinePlaceholder":1084},[425,65681,65682,65684,65686],{"class":427,"line":710},[425,65683,2057],{"class":701},[425,65685,51390],{"class":52055},[425,65687,52062],{"class":701},[425,65689,65690],{"class":427,"line":721},[425,65691,3400],{"emptyLinePlaceholder":1084},[425,65693,65694,65696,65698,65700,65702,65704],{"class":427,"line":735},[425,65695,2057],{"class":701},[425,65697,52089],{"class":52055},[425,65699,52071],{"class":431},[425,65701,1204],{"class":701},[425,65703,52076],{"class":435},[425,65705,52062],{"class":701},[425,65707,65708,65710,65712,65714,65716,65718],{"class":427,"line":743},[425,65709,52899],{"class":701},[425,65711,52099],{"class":52055},[425,65713,52102],{"class":431},[425,65715,1204],{"class":701},[425,65717,52107],{"class":435},[425,65719,52062],{"class":701},[425,65721,65722,65724,65726,65728,65730],{"class":427,"line":751},[425,65723,52899],{"class":701},[425,65725,52162],{"class":52055},[425,65727,56069],{"class":701},[425,65729,52162],{"class":52055},[425,65731,52062],{"class":701},[425,65733,65734,65736,65738],{"class":427,"line":759},[425,65735,52899],{"class":701},[425,65737,1074],{"class":52055},[425,65739,52062],{"class":701},[425,65741,65742,65744],{"class":427,"line":770},[425,65743,7403],{"class":52055},[425,65745,16569],{"class":701},[425,65747,65748,65750,65752,65754],{"class":427,"line":780},[425,65749,55461],{"class":691},[425,65751,52192],{"class":701},[425,65753,1341],{"class":691},[425,65755,2307],{"class":701},[425,65757,65758,65760,65762,65764],{"class":427,"line":790},[425,65759,55450],{"class":691},[425,65761,52192],{"class":701},[425,65763,1341],{"class":691},[425,65765,2307],{"class":701},[425,65767,65768],{"class":427,"line":805},[425,65769,3187],{"class":701},[425,65771,65772],{"class":427,"line":818},[425,65773,3400],{"emptyLinePlaceholder":1084},[425,65775,65776,65779],{"class":427,"line":831},[425,65777,65778],{"class":52055},"    table",[425,65780,16569],{"class":701},[425,65782,65783,65786,65788,65791],{"class":427,"line":841},[425,65784,65785],{"class":691},"      border-collapse",[425,65787,52192],{"class":701},[425,65789,65790],{"class":691},"collapse",[425,65792,2307],{"class":701},[425,65794,65795,65798,65800,65802],{"class":427,"line":852},[425,65796,65797],{"class":691},"      border-spacing",[425,65799,52192],{"class":701},[425,65801,1341],{"class":691},[425,65803,2307],{"class":701},[425,65805,65806,65808,65810,65812,65814,65816,65819],{"class":427,"line":862},[425,65807,62732],{"class":691},[425,65809,52192],{"class":701},[425,65811,1367],{"class":691},[425,65813,52247],{"class":1155},[425,65815,52276],{"class":691},[425,65817,65818],{"class":691}," #c0c0c0",[425,65820,2307],{"class":701},[425,65822,65823,65825,65827,65830,65832],{"class":427,"line":878},[425,65824,55526],{"class":691},[425,65826,52192],{"class":701},[425,65828,65829],{"class":691},"500",[425,65831,52247],{"class":1155},[425,65833,2307],{"class":701},[425,65835,65836,65838,65840,65842,65844,65846],{"class":427,"line":914},[425,65837,55461],{"class":691},[425,65839,52192],{"class":701},[425,65841,1460],{"class":691},[425,65843,52247],{"class":1155},[425,65845,52311],{"class":691},[425,65847,2307],{"class":701},[425,65849,65850,65852,65854,65856],{"class":427,"line":943},[425,65851,58041],{"class":691},[425,65853,52192],{"class":701},[425,65855,52347],{"class":691},[425,65857,2307],{"class":701},[425,65859,65860],{"class":427,"line":956},[425,65861,3187],{"class":701},[425,65863,65864],{"class":427,"line":964},[425,65865,3400],{"emptyLinePlaceholder":1084},[425,65867,65868,65871],{"class":427,"line":2733},[425,65869,65870],{"class":52055},"    th",[425,65872,16569],{"class":701},[425,65874,65875,65877,65879,65882],{"class":427,"line":2750},[425,65876,55639],{"class":691},[425,65878,52192],{"class":701},[425,65880,65881],{"class":691},"#09c",[425,65883,2307],{"class":701},[425,65885,65886,65889,65891,65893,65895,65897,65900],{"class":427,"line":2755},[425,65887,65888],{"class":691},"      font",[425,65890,52192],{"class":701},[425,65892,63094],{"class":691},[425,65894,64828],{"class":691},[425,65896,52247],{"class":1155},[425,65898,65899],{"class":435}," \"微软雅黑\"",[425,65901,2307],{"class":701},[425,65903,65904,65906,65908,65910],{"class":427,"line":2760},[425,65905,58171],{"class":691},[425,65907,52192],{"class":701},[425,65909,61597],{"class":691},[425,65911,2307],{"class":701},[425,65913,65914,65916,65918,65920,65922],{"class":427,"line":2765},[425,65915,55540],{"class":691},[425,65917,52192],{"class":701},[425,65919,1948],{"class":691},[425,65921,52247],{"class":1155},[425,65923,2307],{"class":701},[425,65925,65926],{"class":427,"line":2779},[425,65927,3187],{"class":701},[425,65929,65930],{"class":427,"line":2784},[425,65931,3400],{"emptyLinePlaceholder":1084},[425,65933,65934,65937],{"class":427,"line":3577},[425,65935,65936],{"class":52055},"    td",[425,65938,16569],{"class":701},[425,65940,65941,65943,65945,65947,65949,65951,65954],{"class":427,"line":3591},[425,65942,62732],{"class":691},[425,65944,52192],{"class":701},[425,65946,1367],{"class":691},[425,65948,52247],{"class":1155},[425,65950,52276],{"class":691},[425,65952,65953],{"class":691}," #d0d0d0",[425,65955,2307],{"class":701},[425,65957,65958,65960,65962,65965],{"class":427,"line":3599},[425,65959,58171],{"class":691},[425,65961,52192],{"class":701},[425,65963,65964],{"class":691},"#404060",[425,65966,2307],{"class":701},[425,65968,65969,65971,65973,65975,65977],{"class":427,"line":3604},[425,65970,55450],{"class":691},[425,65972,52192],{"class":701},[425,65974,1594],{"class":691},[425,65976,52247],{"class":1155},[425,65978,2307],{"class":701},[425,65980,65981],{"class":427,"line":3610},[425,65982,3187],{"class":701},[425,65984,65985],{"class":427,"line":3616},[425,65986,3400],{"emptyLinePlaceholder":1084},[425,65988,65989,65992],{"class":427,"line":3621},[425,65990,65991],{"class":431},"    .allCheck",[425,65993,16569],{"class":701},[425,65995,65996,65998,66000,66002,66004],{"class":427,"line":8948},[425,65997,55526],{"class":691},[425,65999,52192],{"class":701},[425,66001,1760],{"class":691},[425,66003,52247],{"class":1155},[425,66005,2307],{"class":701},[425,66007,66008],{"class":427,"line":8972},[425,66009,3187],{"class":701},[425,66011,66012,66014,66016],{"class":427,"line":8977},[425,66013,53172],{"class":701},[425,66015,1074],{"class":52055},[425,66017,52062],{"class":701},[425,66019,66020,66022,66024],{"class":427,"line":8983},[425,66021,52540],{"class":701},[425,66023,52089],{"class":52055},[425,66025,52062],{"class":701},[425,66027,66028],{"class":427,"line":9010},[425,66029,3400],{"emptyLinePlaceholder":1084},[425,66031,66032,66034,66036],{"class":427,"line":9015},[425,66033,2057],{"class":701},[425,66035,52555],{"class":52055},[425,66037,52062],{"class":701},[425,66039,66040,66042,66044],{"class":427,"line":9021},[425,66041,52899],{"class":701},[425,66043,35],{"class":52055},[425,66045,52062],{"class":701},[425,66047,66048,66050,66052],{"class":427,"line":9033},[425,66049,52096],{"class":701},[425,66051,41],{"class":52055},[425,66053,52062],{"class":701},[425,66055,66056,66058,66060,66062,66064,66067],{"class":427,"line":9045},[425,66057,55989],{"class":701},[425,66059,44],{"class":52055},[425,66061,54241],{"class":431},[425,66063,1204],{"class":701},[425,66065,66066],{"class":435},"\"allCheck\"",[425,66068,52062],{"class":701},[425,66070,66071,66073,66075,66077,66079,66081,66083,66085,66087,66089,66091,66094,66097,66099,66101,66103,66106,66109,66111],{"class":427,"line":9057},[425,66072,56057],{"class":701},[425,66074,54576],{"class":52055},[425,66076,54579],{"class":431},[425,66078,1204],{"class":701},[425,66080,54584],{"class":435},[425,66082,15917],{"class":431},[425,66084,1204],{"class":701},[425,66086,8652],{"class":435},[425,66088,15956],{"class":431},[425,66090,1204],{"class":701},[425,66092,66093],{"class":435},"\"checkAll\"",[425,66095,66096],{"class":701},"> \u003C",[425,66098,425],{"class":52055},[425,66100,54241],{"class":431},[425,66102,1204],{"class":701},[425,66104,66105],{"class":435},"\"all\"",[425,66107,66108],{"class":701},">全选\u003C\u002F",[425,66110,425],{"class":52055},[425,66112,52062],{"class":701},[425,66114,66115,66117,66119],{"class":427,"line":10715},[425,66116,56162],{"class":701},[425,66118,44],{"class":52055},[425,66120,52062],{"class":701},[425,66122,66123,66125,66127,66130,66132],{"class":427,"line":10740},[425,66124,55989],{"class":701},[425,66126,44],{"class":52055},[425,66128,66129],{"class":701},">商品\u003C\u002F",[425,66131,44],{"class":52055},[425,66133,52062],{"class":701},[425,66135,66136,66138,66140,66143,66145],{"class":427,"line":10763},[425,66137,55989],{"class":701},[425,66139,44],{"class":52055},[425,66141,66142],{"class":701},">商家\u003C\u002F",[425,66144,44],{"class":52055},[425,66146,52062],{"class":701},[425,66148,66149,66151,66153,66156,66158],{"class":427,"line":10787},[425,66150,55989],{"class":701},[425,66152,44],{"class":52055},[425,66154,66155],{"class":701},">价格\u003C\u002F",[425,66157,44],{"class":52055},[425,66159,52062],{"class":701},[425,66161,66162,66164,66166],{"class":427,"line":10792},[425,66163,52531],{"class":701},[425,66165,41],{"class":52055},[425,66167,52062],{"class":701},[425,66169,66170,66172,66174],{"class":427,"line":10797},[425,66171,52096],{"class":701},[425,66173,41],{"class":52055},[425,66175,52062],{"class":701},[425,66177,66178,66180,66182],{"class":427,"line":10802},[425,66179,55989],{"class":701},[425,66181,60],{"class":52055},[425,66183,52062],{"class":701},[425,66185,66186,66188,66190,66192,66194,66196,66198,66200,66203,66205,66207,66210],{"class":427,"line":10811},[425,66187,56057],{"class":701},[425,66189,54576],{"class":52055},[425,66191,54579],{"class":431},[425,66193,1204],{"class":701},[425,66195,54584],{"class":435},[425,66197,15917],{"class":431},[425,66199,1204],{"class":701},[425,66201,66202],{"class":435},"\"check\"",[425,66204,54241],{"class":431},[425,66206,1204],{"class":701},[425,66208,66209],{"class":435},"\"ck\"",[425,66211,52062],{"class":701},[425,66213,66214,66216,66218],{"class":427,"line":10816},[425,66215,56162],{"class":701},[425,66217,60],{"class":52055},[425,66219,52062],{"class":701},[425,66221,66222,66224,66226,66228,66230],{"class":427,"line":10822},[425,66223,55989],{"class":701},[425,66225,60],{"class":52055},[425,66227,61928],{"class":701},[425,66229,60],{"class":52055},[425,66231,52062],{"class":701},[425,66233,66234,66236,66238,66241,66243],{"class":427,"line":10843},[425,66235,55989],{"class":701},[425,66237,60],{"class":52055},[425,66239,66240],{"class":701},">小米\u003C\u002F",[425,66242,60],{"class":52055},[425,66244,52062],{"class":701},[425,66246,66247,66249,66251,66254,66256],{"class":427,"line":10849},[425,66248,55989],{"class":701},[425,66250,60],{"class":52055},[425,66252,66253],{"class":701},">￥1999\u003C\u002F",[425,66255,60],{"class":52055},[425,66257,52062],{"class":701},[425,66259,66260,66262,66264],{"class":427,"line":10863},[425,66261,52531],{"class":701},[425,66263,41],{"class":52055},[425,66265,52062],{"class":701},[425,66267,66268,66270,66272],{"class":427,"line":10869},[425,66269,52096],{"class":701},[425,66271,41],{"class":52055},[425,66273,52062],{"class":701},[425,66275,66276,66278,66280],{"class":427,"line":10896},[425,66277,55989],{"class":701},[425,66279,60],{"class":52055},[425,66281,52062],{"class":701},[425,66283,66284,66286,66288,66290,66292,66294,66296,66298,66300,66302,66304,66306],{"class":427,"line":10905},[425,66285,56057],{"class":701},[425,66287,54576],{"class":52055},[425,66289,54579],{"class":431},[425,66291,1204],{"class":701},[425,66293,54584],{"class":435},[425,66295,15917],{"class":431},[425,66297,1204],{"class":701},[425,66299,66202],{"class":435},[425,66301,54241],{"class":431},[425,66303,1204],{"class":701},[425,66305,66209],{"class":435},[425,66307,52062],{"class":701},[425,66309,66310,66312,66314],{"class":427,"line":10911},[425,66311,56162],{"class":701},[425,66313,60],{"class":52055},[425,66315,52062],{"class":701},[425,66317,66318,66320,66322,66325,66327],{"class":427,"line":10919},[425,66319,55989],{"class":701},[425,66321,60],{"class":52055},[425,66323,66324],{"class":701},">小米净水器\u003C\u002F",[425,66326,60],{"class":52055},[425,66328,52062],{"class":701},[425,66330,66331,66333,66335,66337,66339],{"class":427,"line":10924},[425,66332,55989],{"class":701},[425,66334,60],{"class":52055},[425,66336,66240],{"class":701},[425,66338,60],{"class":52055},[425,66340,52062],{"class":701},[425,66342,66343,66345,66347,66350,66352],{"class":427,"line":17601},[425,66344,55989],{"class":701},[425,66346,60],{"class":52055},[425,66348,66349],{"class":701},">￥4999\u003C\u002F",[425,66351,60],{"class":52055},[425,66353,52062],{"class":701},[425,66355,66356,66358,66360],{"class":427,"line":17607},[425,66357,52531],{"class":701},[425,66359,41],{"class":52055},[425,66361,52062],{"class":701},[425,66363,66364,66366,66368],{"class":427,"line":17630},[425,66365,52096],{"class":701},[425,66367,41],{"class":52055},[425,66369,52062],{"class":701},[425,66371,66372,66374,66376],{"class":427,"line":17636},[425,66373,55989],{"class":701},[425,66375,60],{"class":52055},[425,66377,52062],{"class":701},[425,66379,66380,66382,66384,66386,66388,66390,66392,66394,66396,66398,66400,66402],{"class":427,"line":17659},[425,66381,56057],{"class":701},[425,66383,54576],{"class":52055},[425,66385,54579],{"class":431},[425,66387,1204],{"class":701},[425,66389,54584],{"class":435},[425,66391,15917],{"class":431},[425,66393,1204],{"class":701},[425,66395,66202],{"class":435},[425,66397,54241],{"class":431},[425,66399,1204],{"class":701},[425,66401,66209],{"class":435},[425,66403,52062],{"class":701},[425,66405,66406,66408,66410],{"class":427,"line":17673},[425,66407,56162],{"class":701},[425,66409,60],{"class":52055},[425,66411,52062],{"class":701},[425,66413,66414,66416,66418,66421,66423],{"class":427,"line":17693},[425,66415,55989],{"class":701},[425,66417,60],{"class":52055},[425,66419,66420],{"class":701},">小米电视\u003C\u002F",[425,66422,60],{"class":52055},[425,66424,52062],{"class":701},[425,66426,66427,66429,66431,66433,66435],{"class":427,"line":17699},[425,66428,55989],{"class":701},[425,66430,60],{"class":52055},[425,66432,66240],{"class":701},[425,66434,60],{"class":52055},[425,66436,52062],{"class":701},[425,66438,66439,66441,66443,66446,66448],{"class":427,"line":17710},[425,66440,55989],{"class":701},[425,66442,60],{"class":52055},[425,66444,66445],{"class":701},">￥5999\u003C\u002F",[425,66447,60],{"class":52055},[425,66449,52062],{"class":701},[425,66451,66452,66454,66456],{"class":427,"line":17733},[425,66453,52531],{"class":701},[425,66455,41],{"class":52055},[425,66457,52062],{"class":701},[425,66459,66460,66462,66464],{"class":427,"line":17755},[425,66461,53172],{"class":701},[425,66463,35],{"class":52055},[425,66465,52062],{"class":701},[425,66467,66468,66470,66472],{"class":427,"line":17760},[425,66469,52899],{"class":701},[425,66471,52568],{"class":52055},[425,66473,52062],{"class":701},[425,66475,66476],{"class":427,"line":17766},[425,66477,66478],{"class":1216},"    \u002F\u002F 1. 获取大复选框\n",[425,66480,66481,66483,66486,66488,66490,66492,66494,66497],{"class":427,"line":17780},[425,66482,12220],{"class":1155},[425,66484,66485],{"class":691}," checkAll",[425,66487,14563],{"class":1155},[425,66489,55151],{"class":701},[425,66491,55154],{"class":431},[425,66493,1159],{"class":701},[425,66495,66496],{"class":435},"'#checkAll'",[425,66498,1165],{"class":701},[425,66500,66501],{"class":427,"line":17793},[425,66502,66503],{"class":1216},"    \u002F\u002F 2. 获取所有的小复选框\n",[425,66505,66506,66508,66511,66513,66515,66517,66519,66522],{"class":427,"line":17798},[425,66507,12220],{"class":1155},[425,66509,66510],{"class":691}," cks",[425,66512,14563],{"class":1155},[425,66514,55151],{"class":701},[425,66516,56436],{"class":431},[425,66518,1159],{"class":701},[425,66520,66521],{"class":435},"'.ck'",[425,66523,1165],{"class":701},[425,66525,66526],{"class":427,"line":17812},[425,66527,66528],{"class":1216},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[425,66530,66531,66534,66536,66538,66540,66542,66544],{"class":427,"line":17817},[425,66532,66533],{"class":701},"    checkAll.",[425,66535,58568],{"class":431},[425,66537,1159],{"class":701},[425,66539,58573],{"class":435},[425,66541,13434],{"class":701},[425,66543,55204],{"class":1155},[425,66545,55207],{"class":701},[425,66547,66548],{"class":427,"line":17823},[425,66549,66550],{"class":1216},"      \u002F\u002F 得到当前大复选框的选中状态\n",[425,66552,66553,66556],{"class":427,"line":17828},[425,66554,66555],{"class":1216},"      \u002F\u002F console.log(checkAll.checked)",[425,66557,66558],{"class":1216},"  \u002F\u002F 得到 是 true 或者是 false\n",[425,66560,66561],{"class":427,"line":17842},[425,66562,66563],{"class":1216},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[425,66565,66566,66568,66570,66572,66574,66576,66578,66580,66582,66585,66587,66589,66591],{"class":427,"line":17847},[425,66567,53039],{"class":1155},[425,66569,2664],{"class":701},[425,66571,52602],{"class":1155},[425,66573,10437],{"class":701},[425,66575,1204],{"class":1155},[425,66577,5093],{"class":691},[425,66579,10444],{"class":701},[425,66581,2057],{"class":1155},[425,66583,66584],{"class":701}," cks.",[425,66586,52723],{"class":691},[425,66588,4214],{"class":701},[425,66590,3292],{"class":1155},[425,66592,13441],{"class":701},[425,66594,66595,66598,66600,66603],{"class":427,"line":17852},[425,66596,66597],{"class":701},"        cks[i].checked ",[425,66599,1204],{"class":1155},[425,66601,66602],{"class":691}," this",[425,66604,66605],{"class":701},".checked\n",[425,66607,66608],{"class":427,"line":17866},[425,66609,53153],{"class":701},[425,66611,66612],{"class":427,"line":17878},[425,66613,34216],{"class":701},[425,66615,66616],{"class":427,"line":17883},[425,66617,66618],{"class":1216},"    \u002F\u002F 5. 小复选框控制大复选框\n",[425,66620,66621],{"class":427,"line":17896},[425,66622,3400],{"emptyLinePlaceholder":1084},[425,66624,66625,66627,66629,66631,66633,66635,66637,66639,66641,66643,66645,66647,66649],{"class":427,"line":17901},[425,66626,4201],{"class":1155},[425,66628,2664],{"class":701},[425,66630,52602],{"class":1155},[425,66632,10437],{"class":701},[425,66634,1204],{"class":1155},[425,66636,5093],{"class":691},[425,66638,10444],{"class":701},[425,66640,2057],{"class":1155},[425,66642,66584],{"class":701},[425,66644,52723],{"class":691},[425,66646,4214],{"class":701},[425,66648,3292],{"class":1155},[425,66650,13441],{"class":701},[425,66652,66653],{"class":427,"line":17906},[425,66654,66655],{"class":1216},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[425,66657,66658,66661,66663,66665,66667,66669,66671],{"class":427,"line":17911},[425,66659,66660],{"class":701},"      cks[i].",[425,66662,58568],{"class":431},[425,66664,1159],{"class":701},[425,66666,58573],{"class":435},[425,66668,13434],{"class":701},[425,66670,55204],{"class":1155},[425,66672,55207],{"class":701},[425,66674,66675],{"class":427,"line":17924},[425,66676,66677],{"class":1216},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[425,66679,66680],{"class":427,"line":17929},[425,66681,66682],{"class":1216},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[425,66684,66685],{"class":427,"line":33388},[425,66686,66687],{"class":1216},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[425,66689,66690],{"class":427,"line":33394},[425,66691,66692],{"class":1216},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[425,66694,66695,66698,66700,66702,66704,66706,66709,66711,66713,66715,66717],{"class":427,"line":33400},[425,66696,66697],{"class":701},"        checkAll.checked ",[425,66699,1204],{"class":1155},[425,66701,55151],{"class":701},[425,66703,56436],{"class":431},[425,66705,1159],{"class":701},[425,66707,66708],{"class":435},"'.ck:checked'",[425,66710,31581],{"class":701},[425,66712,52723],{"class":691},[425,66714,58661],{"class":1155},[425,66716,66584],{"class":701},[425,66718,56586],{"class":691},[425,66720,66721],{"class":427,"line":33406},[425,66722,65570],{"class":701},[425,66724,66725],{"class":427,"line":33412},[425,66726,3187],{"class":701},[425,66728,66729,66731,66733],{"class":427,"line":33423},[425,66730,53172],{"class":701},[425,66732,52568],{"class":52055},[425,66734,52062],{"class":701},[425,66736,66737,66739,66741],{"class":427,"line":33429},[425,66738,52540],{"class":701},[425,66740,52555],{"class":52055},[425,66742,52062],{"class":701},[425,66744,66745],{"class":427,"line":33449},[425,66746,3400],{"emptyLinePlaceholder":1084},[425,66748,66749,66751,66753],{"class":427,"line":33455},[425,66750,52540],{"class":701},[425,66752,51390],{"class":52055},[425,66754,52062],{"class":701},[19,66756,66757],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,66759,66760],{},"用好之间比较得到的布尔值！！！",[19,66762,66763,66764,66767,66768,2664,66771,1732,66773,66776],{},"在 JS 里访问的时候，",[422,66765,66766],{},"checkbox.checked"," 是一个 ",[400,66769,66770],{},"布尔值",[422,66772,2376],{},[422,66774,66775],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,66778,66779,66780,66783,66784],{},"HTML 的 ",[422,66781,66782],{},"checked=\"checked\""," 只是 ",[400,66785,66786,66787,66790],{},"初始值；JS 的 ",[422,66788,66789],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,66792,66793],{},"：checked是一个伪类选择器",[19,66795,66796],{},[393,66797],{"alt":395,"src":66798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,66800,66801,66804],{},[66802,66803],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,66806,66807],{},[393,66808],{"alt":395,"src":66809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[1099,66811,66813],{"id":66812},"_33-dom事件进阶","3.3 DOM事件进阶",[14,66815,66817],{"id":66816},"_331-事件流","3.3.1 事件流",[19,66819,66820],{},[393,66821],{"alt":395,"src":66822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22995,66824,66826],{"id":66825},"_3311-事件捕获","3.3.1.1 事件捕获",[19,66828,66829],{},[393,66830],{"alt":395,"src":66831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[416,66833,66835],{"className":51388,"code":66834,"language":51390,"meta":395,"style":395},"\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",[422,66836,66837,66847,66861,66865,66873,66887,66907,66919,66927,66934,66946,66958,66968,66972,66976,66983,66995,67007,67017,67021,67029,67037,67041,67049,67064,67083,67091,67099,67119,67139,67155,67166,67174,67191,67202,67210,67227,67238,67246,67254,67262,67266],{"__ignoreMap":395},[425,66838,66839,66841,66843,66845],{"class":427,"line":428},[425,66840,52052],{"class":701},[425,66842,52056],{"class":52055},[425,66844,52059],{"class":431},[425,66846,52062],{"class":701},[425,66848,66849,66851,66853,66855,66857,66859],{"class":427,"line":698},[425,66850,2057],{"class":701},[425,66852,51390],{"class":52055},[425,66854,52071],{"class":431},[425,66856,1204],{"class":701},[425,66858,52076],{"class":435},[425,66860,52062],{"class":701},[425,66862,66863],{"class":427,"line":710},[425,66864,3400],{"emptyLinePlaceholder":1084},[425,66866,66867,66869,66871],{"class":427,"line":721},[425,66868,2057],{"class":701},[425,66870,52089],{"class":52055},[425,66872,52062],{"class":701},[425,66874,66875,66877,66879,66881,66883,66885],{"class":427,"line":735},[425,66876,52899],{"class":701},[425,66878,52099],{"class":52055},[425,66880,52102],{"class":431},[425,66882,1204],{"class":701},[425,66884,52107],{"class":435},[425,66886,52062],{"class":701},[425,66888,66889,66891,66893,66895,66897,66899,66901,66903,66905],{"class":427,"line":743},[425,66890,52899],{"class":701},[425,66892,52099],{"class":52055},[425,66894,15917],{"class":431},[425,66896,1204],{"class":701},[425,66898,52146],{"class":435},[425,66900,52126],{"class":431},[425,66902,1204],{"class":701},[425,66904,52153],{"class":435},[425,66906,52062],{"class":701},[425,66908,66909,66911,66913,66915,66917],{"class":427,"line":751},[425,66910,52899],{"class":701},[425,66912,52162],{"class":52055},[425,66914,52165],{"class":701},[425,66916,52162],{"class":52055},[425,66918,52062],{"class":701},[425,66920,66921,66923,66925],{"class":427,"line":759},[425,66922,52899],{"class":701},[425,66924,1074],{"class":52055},[425,66926,52062],{"class":701},[425,66928,66929,66932],{"class":427,"line":770},[425,66930,66931],{"class":431},"    .father",[425,66933,16569],{"class":701},[425,66935,66936,66938,66940,66942,66944],{"class":427,"line":780},[425,66937,55526],{"class":691},[425,66939,52192],{"class":701},[425,66941,65829],{"class":691},[425,66943,52247],{"class":1155},[425,66945,2307],{"class":701},[425,66947,66948,66950,66952,66954,66956],{"class":427,"line":790},[425,66949,55540],{"class":691},[425,66951,52192],{"class":701},[425,66953,65829],{"class":691},[425,66955,52247],{"class":1155},[425,66957,2307],{"class":701},[425,66959,66960,66962,66964,66966],{"class":427,"line":805},[425,66961,55639],{"class":691},[425,66963,52192],{"class":701},[425,66965,52400],{"class":691},[425,66967,2307],{"class":701},[425,66969,66970],{"class":427,"line":818},[425,66971,3187],{"class":701},[425,66973,66974],{"class":427,"line":831},[425,66975,3400],{"emptyLinePlaceholder":1084},[425,66977,66978,66981],{"class":427,"line":841},[425,66979,66980],{"class":431},"    .son",[425,66982,16569],{"class":701},[425,66984,66985,66987,66989,66991,66993],{"class":427,"line":852},[425,66986,55526],{"class":691},[425,66988,52192],{"class":701},[425,66990,2724],{"class":691},[425,66992,52247],{"class":1155},[425,66994,2307],{"class":701},[425,66996,66997,66999,67001,67003,67005],{"class":427,"line":862},[425,66998,55540],{"class":691},[425,67000,52192],{"class":701},[425,67002,2724],{"class":691},[425,67004,52247],{"class":1155},[425,67006,2307],{"class":701},[425,67008,67009,67011,67013,67015],{"class":427,"line":878},[425,67010,55639],{"class":691},[425,67012,52192],{"class":701},[425,67014,55644],{"class":691},[425,67016,2307],{"class":701},[425,67018,67019],{"class":427,"line":914},[425,67020,3187],{"class":701},[425,67022,67023,67025,67027],{"class":427,"line":943},[425,67024,53172],{"class":701},[425,67026,1074],{"class":52055},[425,67028,52062],{"class":701},[425,67030,67031,67033,67035],{"class":427,"line":956},[425,67032,52540],{"class":701},[425,67034,52089],{"class":52055},[425,67036,52062],{"class":701},[425,67038,67039],{"class":427,"line":964},[425,67040,3400],{"emptyLinePlaceholder":1084},[425,67042,67043,67045,67047],{"class":427,"line":2733},[425,67044,2057],{"class":701},[425,67046,52555],{"class":52055},[425,67048,52062],{"class":701},[425,67050,67051,67053,67055,67057,67059,67062],{"class":427,"line":2750},[425,67052,52899],{"class":701},[425,67054,52366],{"class":52055},[425,67056,54241],{"class":431},[425,67058,1204],{"class":701},[425,67060,67061],{"class":435},"\"father\"",[425,67063,52062],{"class":701},[425,67065,67066,67068,67070,67072,67074,67077,67079,67081],{"class":427,"line":2755},[425,67067,52096],{"class":701},[425,67069,52366],{"class":52055},[425,67071,54241],{"class":431},[425,67073,1204],{"class":701},[425,67075,67076],{"class":435},"\"son\"",[425,67078,56069],{"class":701},[425,67080,52366],{"class":52055},[425,67082,52062],{"class":701},[425,67084,67085,67087,67089],{"class":427,"line":2760},[425,67086,53172],{"class":701},[425,67088,52366],{"class":52055},[425,67090,52062],{"class":701},[425,67092,67093,67095,67097],{"class":427,"line":2765},[425,67094,52899],{"class":701},[425,67096,52568],{"class":52055},[425,67098,52062],{"class":701},[425,67100,67101,67103,67106,67108,67110,67112,67114,67117],{"class":427,"line":2779},[425,67102,12220],{"class":1155},[425,67104,67105],{"class":691}," fa",[425,67107,14563],{"class":1155},[425,67109,55151],{"class":701},[425,67111,55154],{"class":431},[425,67113,1159],{"class":701},[425,67115,67116],{"class":435},"'.father'",[425,67118,1165],{"class":701},[425,67120,67121,67123,67126,67128,67130,67132,67134,67137],{"class":427,"line":2784},[425,67122,12220],{"class":1155},[425,67124,67125],{"class":691}," son",[425,67127,14563],{"class":1155},[425,67129,55151],{"class":701},[425,67131,55154],{"class":431},[425,67133,1159],{"class":701},[425,67135,67136],{"class":435},"'.son'",[425,67138,1165],{"class":701},[425,67140,67141,67143,67145,67147,67149,67151,67153],{"class":427,"line":3577},[425,67142,53162],{"class":701},[425,67144,58568],{"class":431},[425,67146,1159],{"class":701},[425,67148,58573],{"class":435},[425,67150,13434],{"class":701},[425,67152,55204],{"class":1155},[425,67154,55207],{"class":701},[425,67156,67157,67159,67161,67164],{"class":427,"line":3591},[425,67158,59680],{"class":431},[425,67160,1159],{"class":701},[425,67162,67163],{"class":435},"'woshiu1'",[425,67165,1165],{"class":701},[425,67167,67168,67170,67172],{"class":427,"line":3599},[425,67169,55290],{"class":701},[425,67171,2376],{"class":691},[425,67173,1165],{"class":701},[425,67175,67176,67179,67181,67183,67185,67187,67189],{"class":427,"line":3604},[425,67177,67178],{"class":701},"    fa.",[425,67180,58568],{"class":431},[425,67182,1159],{"class":701},[425,67184,58573],{"class":435},[425,67186,13434],{"class":701},[425,67188,55204],{"class":1155},[425,67190,55207],{"class":701},[425,67192,67193,67195,67197,67200],{"class":427,"line":3610},[425,67194,59680],{"class":431},[425,67196,1159],{"class":701},[425,67198,67199],{"class":435},"'1'",[425,67201,1165],{"class":701},[425,67203,67204,67206,67208],{"class":427,"line":3616},[425,67205,55290],{"class":701},[425,67207,2376],{"class":691},[425,67209,1165],{"class":701},[425,67211,67212,67215,67217,67219,67221,67223,67225],{"class":427,"line":3621},[425,67213,67214],{"class":701},"    son.",[425,67216,58568],{"class":431},[425,67218,1159],{"class":701},[425,67220,58573],{"class":435},[425,67222,13434],{"class":701},[425,67224,55204],{"class":1155},[425,67226,55207],{"class":701},[425,67228,67229,67231,67233,67236],{"class":427,"line":8948},[425,67230,59680],{"class":431},[425,67232,1159],{"class":701},[425,67234,67235],{"class":435},"'2'",[425,67237,1165],{"class":701},[425,67239,67240,67242,67244],{"class":427,"line":8972},[425,67241,55290],{"class":701},[425,67243,2376],{"class":691},[425,67245,1165],{"class":701},[425,67247,67248,67250,67252],{"class":427,"line":8977},[425,67249,53172],{"class":701},[425,67251,52568],{"class":52055},[425,67253,52062],{"class":701},[425,67255,67256,67258,67260],{"class":427,"line":8983},[425,67257,52540],{"class":701},[425,67259,52555],{"class":52055},[425,67261,52062],{"class":701},[425,67263,67264],{"class":427,"line":9010},[425,67265,3400],{"emptyLinePlaceholder":1084},[425,67267,67268,67270,67272],{"class":427,"line":9015},[425,67269,52540],{"class":701},[425,67271,51390],{"class":52055},[425,67273,52062],{"class":701},[19,67275,67276],{},[393,67277],{"alt":395,"src":67278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,67280,67281],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22995,67283,67285],{"id":67284},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,67287,67288],{},[393,67289],{"alt":395,"src":67290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,67292,67293],{},"反着来",[19,67295,67296],{},"注意是同名事件，比如都是‘click’",[22995,67298,67300],{"id":67299},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,67302,67303],{},[393,67304],{"alt":395,"src":67305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22995,67307,67309],{"id":67308},"_3314-解绑事件","3.3.1.4 解绑事件",[19,67311,67312],{},[393,67313],{"alt":395,"src":67314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,67316,67317],{},[393,67318],{"alt":395,"src":67319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22995,67321,67323],{"id":67322},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[972,67325,67326],{},[450,67327,67328],{},"事件类型的区别",[19,67330,67331],{},[393,67332],{"alt":395,"src":67333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,67335,67336],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[972,67338,67339],{"start":698},[450,67340,67341],{},"注册事件的区别",[19,67343,67344],{},[393,67345],{"alt":395,"src":67346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22995,67348,67350],{"id":67349},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,67352,67353],{},[393,67354],{"alt":395,"src":67355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,67357,67358],{},[393,67359],{"alt":395,"src":67360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[416,67362,67364],{"className":53822,"code":67363,"language":53824,"meta":395,"style":395},"\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",[422,67365,67366,67374,67391,67414,67422,67427,67432,67437,67441,67449,67457],{"__ignoreMap":395},[425,67367,67368,67370,67372],{"class":427,"line":428},[425,67369,2057],{"class":701},[425,67371,52555],{"class":52055},[425,67373,52062],{"class":701},[425,67375,67376,67378,67381,67384,67386,67389],{"class":427,"line":698},[425,67377,52899],{"class":701},[425,67379,67380],{"class":52055},"form",[425,67382,67383],{"class":431}," action",[425,67385,1204],{"class":701},[425,67387,67388],{"class":435},"\"http:\u002F\u002Fwww.itcast.cn\"",[425,67390,52062],{"class":701},[425,67392,67393,67395,67397,67399,67401,67404,67407,67409,67412],{"class":427,"line":710},[425,67394,52096],{"class":701},[425,67396,54576],{"class":52055},[425,67398,54579],{"class":431},[425,67400,1204],{"class":701},[425,67402,67403],{"class":435},"\"submit\"",[425,67405,67406],{"class":431}," value",[425,67408,1204],{"class":701},[425,67410,67411],{"class":435},"\"免费注册\"",[425,67413,52062],{"class":701},[425,67415,67416,67418,67420],{"class":427,"line":721},[425,67417,52096],{"class":701},[425,67419,52568],{"class":52055},[425,67421,52062],{"class":701},[425,67423,67424],{"class":427,"line":735},[425,67425,67426],{"class":701},"      const form = document.querySelector('form')\n",[425,67428,67429],{"class":427,"line":743},[425,67430,67431],{"class":701},"      form.addEventListener('submit', function (e) {\n",[425,67433,67434],{"class":427,"line":751},[425,67435,67436],{"class":701},"        e.preventDefault()\n",[425,67438,67439],{"class":427,"line":759},[425,67440,65570],{"class":701},[425,67442,67443,67445,67447],{"class":427,"line":770},[425,67444,52531],{"class":701},[425,67446,52568],{"class":52055},[425,67448,52062],{"class":701},[425,67450,67451,67453,67455],{"class":427,"line":780},[425,67452,53172],{"class":701},[425,67454,67380],{"class":52055},[425,67456,52062],{"class":701},[425,67458,67459,67461,67463],{"class":427,"line":790},[425,67460,52540],{"class":701},[425,67462,52555],{"class":52055},[425,67464,52062],{"class":701},[19,67466,67467],{},"点击不在跳转！！！",[14,67469,67471],{"id":67470},"_332-事件委托","3.3.2 事件委托",[19,67473,67474],{},[393,67475],{"alt":395,"src":67476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[416,67478,67480],{"className":51388,"code":67479,"language":51390,"meta":395,"style":395},"\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",[422,67481,67482,67492,67506,67510,67518,67532,67552,67564,67572,67576,67584,67592,67604,67616,67628,67640,67652,67665,67673,67681,67686,67705,67726,67731,67736,67741,67746,67755,67759,67769,67773,67778,67783,67797,67807,67811,67815,67823,67831,67835],{"__ignoreMap":395},[425,67483,67484,67486,67488,67490],{"class":427,"line":428},[425,67485,52052],{"class":701},[425,67487,52056],{"class":52055},[425,67489,52059],{"class":431},[425,67491,52062],{"class":701},[425,67493,67494,67496,67498,67500,67502,67504],{"class":427,"line":698},[425,67495,2057],{"class":701},[425,67497,51390],{"class":52055},[425,67499,52071],{"class":431},[425,67501,1204],{"class":701},[425,67503,52076],{"class":435},[425,67505,52062],{"class":701},[425,67507,67508],{"class":427,"line":710},[425,67509,3400],{"emptyLinePlaceholder":1084},[425,67511,67512,67514,67516],{"class":427,"line":721},[425,67513,2057],{"class":701},[425,67515,52089],{"class":52055},[425,67517,52062],{"class":701},[425,67519,67520,67522,67524,67526,67528,67530],{"class":427,"line":735},[425,67521,52899],{"class":701},[425,67523,52099],{"class":52055},[425,67525,52102],{"class":431},[425,67527,1204],{"class":701},[425,67529,52107],{"class":435},[425,67531,52062],{"class":701},[425,67533,67534,67536,67538,67540,67542,67544,67546,67548,67550],{"class":427,"line":743},[425,67535,52899],{"class":701},[425,67537,52099],{"class":52055},[425,67539,15917],{"class":431},[425,67541,1204],{"class":701},[425,67543,52146],{"class":435},[425,67545,52126],{"class":431},[425,67547,1204],{"class":701},[425,67549,52153],{"class":435},[425,67551,52062],{"class":701},[425,67553,67554,67556,67558,67560,67562],{"class":427,"line":751},[425,67555,52899],{"class":701},[425,67557,52162],{"class":52055},[425,67559,52165],{"class":701},[425,67561,52162],{"class":52055},[425,67563,52062],{"class":701},[425,67565,67566,67568,67570],{"class":427,"line":759},[425,67567,52540],{"class":701},[425,67569,52089],{"class":52055},[425,67571,52062],{"class":701},[425,67573,67574],{"class":427,"line":770},[425,67575,3400],{"emptyLinePlaceholder":1084},[425,67577,67578,67580,67582],{"class":427,"line":780},[425,67579,2057],{"class":701},[425,67581,52555],{"class":52055},[425,67583,52062],{"class":701},[425,67585,67586,67588,67590],{"class":427,"line":790},[425,67587,52899],{"class":701},[425,67589,447],{"class":52055},[425,67591,52062],{"class":701},[425,67593,67594,67596,67598,67600,67602],{"class":427,"line":805},[425,67595,52096],{"class":701},[425,67597,450],{"class":52055},[425,67599,54721],{"class":701},[425,67601,450],{"class":52055},[425,67603,52062],{"class":701},[425,67605,67606,67608,67610,67612,67614],{"class":427,"line":818},[425,67607,52096],{"class":701},[425,67609,450],{"class":52055},[425,67611,54740],{"class":701},[425,67613,450],{"class":52055},[425,67615,52062],{"class":701},[425,67617,67618,67620,67622,67624,67626],{"class":427,"line":831},[425,67619,52096],{"class":701},[425,67621,450],{"class":52055},[425,67623,54759],{"class":701},[425,67625,450],{"class":52055},[425,67627,52062],{"class":701},[425,67629,67630,67632,67634,67636,67638],{"class":427,"line":841},[425,67631,52096],{"class":701},[425,67633,450],{"class":52055},[425,67635,54778],{"class":701},[425,67637,450],{"class":52055},[425,67639,52062],{"class":701},[425,67641,67642,67644,67646,67648,67650],{"class":427,"line":852},[425,67643,52096],{"class":701},[425,67645,450],{"class":52055},[425,67647,54797],{"class":701},[425,67649,450],{"class":52055},[425,67651,52062],{"class":701},[425,67653,67654,67656,67658,67661,67663],{"class":427,"line":862},[425,67655,52096],{"class":701},[425,67657,19],{"class":52055},[425,67659,67660],{"class":701},">我不需要变色\u003C\u002F",[425,67662,19],{"class":52055},[425,67664,52062],{"class":701},[425,67666,67667,67669,67671],{"class":427,"line":878},[425,67668,53172],{"class":701},[425,67670,447],{"class":52055},[425,67672,52062],{"class":701},[425,67674,67675,67677,67679],{"class":427,"line":914},[425,67676,52899],{"class":701},[425,67678,52568],{"class":52055},[425,67680,52062],{"class":701},[425,67682,67683],{"class":427,"line":943},[425,67684,67685],{"class":1216},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[425,67687,67688,67690,67692,67694,67696,67698,67700,67703],{"class":427,"line":956},[425,67689,12220],{"class":1155},[425,67691,62047],{"class":691},[425,67693,14563],{"class":1155},[425,67695,55151],{"class":701},[425,67697,55154],{"class":431},[425,67699,1159],{"class":701},[425,67701,67702],{"class":435},"'ul'",[425,67704,1165],{"class":701},[425,67706,67707,67710,67712,67714,67716,67718,67720,67722,67724],{"class":427,"line":964},[425,67708,67709],{"class":701},"    ul.",[425,67711,58568],{"class":431},[425,67713,1159],{"class":701},[425,67715,58573],{"class":435},[425,67717,13434],{"class":701},[425,67719,55204],{"class":1155},[425,67721,2664],{"class":701},[425,67723,1232],{"class":6216},[425,67725,13441],{"class":701},[425,67727,67728],{"class":427,"line":2733},[425,67729,67730],{"class":1216},"      \u002F\u002F alert(1)\n",[425,67732,67733],{"class":427,"line":2750},[425,67734,67735],{"class":1216},"      \u002F\u002F e.target就是我们点击的对象\n",[425,67737,67738],{"class":427,"line":2755},[425,67739,67740],{"class":1216},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[425,67742,67743],{"class":427,"line":2760},[425,67744,67745],{"class":1216},"      \u002F\u002F e.target.style.color = 'red'\n",[425,67747,67748,67750,67752],{"class":427,"line":2765},[425,67749,58999],{"class":701},[425,67751,59002],{"class":431},[425,67753,67754],{"class":701},"(e)\n",[425,67756,67757],{"class":427,"line":2779},[425,67758,3400],{"emptyLinePlaceholder":1084},[425,67760,67761,67763,67766],{"class":427,"line":2784},[425,67762,58999],{"class":701},[425,67764,67765],{"class":431},"dir",[425,67767,67768],{"class":701},"(e.target)\n",[425,67770,67771],{"class":427,"line":3577},[425,67772,3400],{"emptyLinePlaceholder":1084},[425,67774,67775],{"class":427,"line":3591},[425,67776,67777],{"class":1216},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[425,67779,67780],{"class":427,"line":3599},[425,67781,67782],{"class":1216},"      \u002F\u002F 通过tagName来进行判断\n",[425,67784,67785,67787,67790,67792,67795],{"class":427,"line":3604},[425,67786,55235],{"class":1155},[425,67788,67789],{"class":701}," (e.target.tagName ",[425,67791,55241],{"class":1155},[425,67793,67794],{"class":435}," 'LI'",[425,67796,13441],{"class":701},[425,67798,67799,67802,67804],{"class":427,"line":3610},[425,67800,67801],{"class":701},"        e.target.style.color ",[425,67803,1204],{"class":1155},[425,67805,67806],{"class":435}," 'red'\n",[425,67808,67809],{"class":427,"line":3616},[425,67810,53153],{"class":701},[425,67812,67813],{"class":427,"line":3621},[425,67814,34216],{"class":701},[425,67816,67817,67819,67821],{"class":427,"line":8948},[425,67818,53172],{"class":701},[425,67820,52568],{"class":52055},[425,67822,52062],{"class":701},[425,67824,67825,67827,67829],{"class":427,"line":8972},[425,67826,52540],{"class":701},[425,67828,52555],{"class":52055},[425,67830,52062],{"class":701},[425,67832,67833],{"class":427,"line":8977},[425,67834,3400],{"emptyLinePlaceholder":1084},[425,67836,67837,67839,67841],{"class":427,"line":8983},[425,67838,52540],{"class":701},[425,67840,51390],{"class":52055},[425,67842,52062],{"class":701},[19,67844,67845],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,67847,67848],{},"if(e.target.ragName==='P') {}",[19,67850,67851],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,67853,67854],{},"通过事件委托的方式实现tab栏切换改造：",[19,67856,67857],{},"一定要记住自定义属性！！！！！！",[19,67859,67860],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,67862,67863],{},"id是自定义的属性名",[19,67865,67866],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[416,67868,67870],{"className":51388,"code":67869,"language":51390,"meta":395,"style":395},"\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",[422,67871,67872,67882,67896,67900,67908,67922,67942,67962,67974,67982,67988,67998,68008,68012,68016,68022,68034,68046,68058,68074,68078,68082,68088,68100,68112,68124,68134,68144,68148,68152,68160,68172,68182,68194,68198,68202,68210,68220,68230,68240,68244,68248,68258,68272,68284,68288,68292,68304,68314,68330,68340,68344,68348,68362,68372,68382,68386,68390,68396,68410,68414,68418,68426,68436,68440,68444,68453,68463,68467,68475,68483,68487,68495,68509,68523,68535,68543,68582,68614,68646,68678,68710,68718,68726,68740,68774,68808,68842,68876,68910,68918,68926,68934,68939,68944,68963,68968,68988,68996,69001,69014,69035,69048,69052,69057,69062,69075,69095,69123,69127,69131,69135,69143,69151,69155],{"__ignoreMap":395},[425,67873,67874,67876,67878,67880],{"class":427,"line":428},[425,67875,52052],{"class":701},[425,67877,52056],{"class":52055},[425,67879,52059],{"class":431},[425,67881,52062],{"class":701},[425,67883,67884,67886,67888,67890,67892,67894],{"class":427,"line":698},[425,67885,2057],{"class":701},[425,67887,51390],{"class":52055},[425,67889,52071],{"class":431},[425,67891,1204],{"class":701},[425,67893,52076],{"class":435},[425,67895,52062],{"class":701},[425,67897,67898],{"class":427,"line":710},[425,67899,3400],{"emptyLinePlaceholder":1084},[425,67901,67902,67904,67906],{"class":427,"line":721},[425,67903,2057],{"class":701},[425,67905,52089],{"class":52055},[425,67907,52062],{"class":701},[425,67909,67910,67912,67914,67916,67918,67920],{"class":427,"line":735},[425,67911,52899],{"class":701},[425,67913,52099],{"class":52055},[425,67915,52102],{"class":431},[425,67917,1204],{"class":701},[425,67919,52107],{"class":435},[425,67921,59882],{"class":701},[425,67923,67924,67926,67928,67930,67932,67934,67936,67938,67940],{"class":427,"line":743},[425,67925,52899],{"class":701},[425,67927,52099],{"class":52055},[425,67929,52118],{"class":431},[425,67931,1204],{"class":701},[425,67933,52123],{"class":435},[425,67935,52126],{"class":431},[425,67937,1204],{"class":701},[425,67939,52131],{"class":435},[425,67941,59882],{"class":701},[425,67943,67944,67946,67948,67950,67952,67954,67956,67958,67960],{"class":427,"line":751},[425,67945,52899],{"class":701},[425,67947,52099],{"class":52055},[425,67949,15917],{"class":431},[425,67951,1204],{"class":701},[425,67953,52146],{"class":435},[425,67955,52126],{"class":431},[425,67957,1204],{"class":701},[425,67959,52153],{"class":435},[425,67961,59882],{"class":701},[425,67963,67964,67966,67968,67970,67972],{"class":427,"line":759},[425,67965,52899],{"class":701},[425,67967,52162],{"class":52055},[425,67969,64380],{"class":701},[425,67971,52162],{"class":52055},[425,67973,52062],{"class":701},[425,67975,67976,67978,67980],{"class":427,"line":770},[425,67977,52899],{"class":701},[425,67979,1074],{"class":52055},[425,67981,52062],{"class":701},[425,67983,67984,67986],{"class":427,"line":780},[425,67985,7403],{"class":52055},[425,67987,16569],{"class":701},[425,67989,67990,67992,67994,67996],{"class":427,"line":790},[425,67991,55461],{"class":691},[425,67993,52192],{"class":701},[425,67995,1341],{"class":691},[425,67997,2307],{"class":701},[425,67999,68000,68002,68004,68006],{"class":427,"line":805},[425,68001,55450],{"class":691},[425,68003,52192],{"class":701},[425,68005,1341],{"class":691},[425,68007,2307],{"class":701},[425,68009,68010],{"class":427,"line":818},[425,68011,3187],{"class":701},[425,68013,68014],{"class":427,"line":831},[425,68015,3400],{"emptyLinePlaceholder":1084},[425,68017,68018,68020],{"class":427,"line":841},[425,68019,64431],{"class":431},[425,68021,16569],{"class":701},[425,68023,68024,68026,68028,68030,68032],{"class":427,"line":852},[425,68025,55526],{"class":691},[425,68027,52192],{"class":701},[425,68029,64442],{"class":691},[425,68031,52247],{"class":1155},[425,68033,2307],{"class":701},[425,68035,68036,68038,68040,68042,68044],{"class":427,"line":862},[425,68037,55540],{"class":691},[425,68039,52192],{"class":701},[425,68041,64455],{"class":691},[425,68043,52247],{"class":1155},[425,68045,2307],{"class":701},[425,68047,68048,68050,68052,68054,68056],{"class":427,"line":878},[425,68049,55461],{"class":691},[425,68051,52192],{"class":701},[425,68053,1848],{"class":691},[425,68055,52247],{"class":1155},[425,68057,2307],{"class":701},[425,68059,68060,68062,68064,68066,68068,68070,68072],{"class":427,"line":914},[425,68061,62732],{"class":691},[425,68063,52192],{"class":701},[425,68065,1367],{"class":691},[425,68067,52247],{"class":1155},[425,68069,52276],{"class":691},[425,68071,62999],{"class":691},[425,68073,2307],{"class":701},[425,68075,68076],{"class":427,"line":943},[425,68077,3187],{"class":701},[425,68079,68080],{"class":427,"line":956},[425,68081,3400],{"emptyLinePlaceholder":1084},[425,68083,68084,68086],{"class":427,"line":964},[425,68085,64500],{"class":431},[425,68087,16569],{"class":701},[425,68089,68090,68092,68094,68096,68098],{"class":427,"line":2733},[425,68091,55526],{"class":691},[425,68093,52192],{"class":701},[425,68095,1460],{"class":691},[425,68097,1477],{"class":1155},[425,68099,2307],{"class":701},[425,68101,68102,68104,68106,68108,68110],{"class":427,"line":2750},[425,68103,55540],{"class":691},[425,68105,52192],{"class":701},[425,68107,2054],{"class":691},[425,68109,52247],{"class":1155},[425,68111,2307],{"class":701},[425,68113,68114,68116,68118,68120,68122],{"class":427,"line":2755},[425,68115,58114],{"class":691},[425,68117,52192],{"class":701},[425,68119,2054],{"class":691},[425,68121,52247],{"class":1155},[425,68123,2307],{"class":701},[425,68125,68126,68128,68130,68132],{"class":427,"line":2760},[425,68127,55764],{"class":691},[425,68129,52192],{"class":701},[425,68131,52232],{"class":691},[425,68133,2307],{"class":701},[425,68135,68136,68138,68140,68142],{"class":427,"line":2765},[425,68137,55775],{"class":691},[425,68139,52192],{"class":701},[425,68141,52423],{"class":691},[425,68143,2307],{"class":701},[425,68145,68146],{"class":427,"line":2779},[425,68147,3187],{"class":701},[425,68149,68150],{"class":427,"line":2784},[425,68151,3400],{"emptyLinePlaceholder":1084},[425,68153,68154,68156,68158],{"class":427,"line":3577},[425,68155,64500],{"class":431},[425,68157,64573],{"class":52055},[425,68159,16569],{"class":701},[425,68161,68162,68164,68166,68168,68170],{"class":427,"line":3591},[425,68163,55677],{"class":691},[425,68165,52192],{"class":701},[425,68167,1948],{"class":691},[425,68169,52247],{"class":1155},[425,68171,2307],{"class":701},[425,68173,68174,68176,68178,68180],{"class":427,"line":3599},[425,68175,63089],{"class":691},[425,68177,52192],{"class":701},[425,68179,64596],{"class":691},[425,68181,2307],{"class":701},[425,68183,68184,68186,68188,68190,68192],{"class":427,"line":3604},[425,68185,62755],{"class":691},[425,68187,52192],{"class":701},[425,68189,1848],{"class":691},[425,68191,52247],{"class":1155},[425,68193,2307],{"class":701},[425,68195,68196],{"class":427,"line":3610},[425,68197,3187],{"class":701},[425,68199,68200],{"class":427,"line":3616},[425,68201,3400],{"emptyLinePlaceholder":1084},[425,68203,68204,68206,68208],{"class":427,"line":3621},[425,68205,64500],{"class":431},[425,68207,62047],{"class":52055},[425,68209,16569],{"class":701},[425,68211,68212,68214,68216,68218],{"class":427,"line":8948},[425,68213,55487],{"class":691},[425,68215,52192],{"class":701},[425,68217,55492],{"class":691},[425,68219,2307],{"class":701},[425,68221,68222,68224,68226,68228],{"class":427,"line":8972},[425,68223,55764],{"class":691},[425,68225,52192],{"class":701},[425,68227,52232],{"class":691},[425,68229,2307],{"class":701},[425,68231,68232,68234,68236,68238],{"class":427,"line":8977},[425,68233,55775],{"class":691},[425,68235,52192],{"class":701},[425,68237,52335],{"class":691},[425,68239,2307],{"class":701},[425,68241,68242],{"class":427,"line":8983},[425,68243,3187],{"class":701},[425,68245,68246],{"class":427,"line":9010},[425,68247,3400],{"emptyLinePlaceholder":1084},[425,68249,68250,68252,68254,68256],{"class":427,"line":9015},[425,68251,64500],{"class":431},[425,68253,62047],{"class":52055},[425,68255,55830],{"class":52055},[425,68257,16569],{"class":701},[425,68259,68260,68262,68264,68266,68268,68270],{"class":427,"line":9021},[425,68261,55461],{"class":691},[425,68263,52192],{"class":701},[425,68265,1341],{"class":691},[425,68267,9950],{"class":691},[425,68269,52247],{"class":1155},[425,68271,2307],{"class":701},[425,68273,68274,68276,68278,68280,68282],{"class":427,"line":9033},[425,68275,55677],{"class":691},[425,68277,52192],{"class":701},[425,68279,1697],{"class":691},[425,68281,52247],{"class":1155},[425,68283,2307],{"class":701},[425,68285,68286],{"class":427,"line":9045},[425,68287,3187],{"class":701},[425,68289,68290],{"class":427,"line":9057},[425,68291,3400],{"emptyLinePlaceholder":1084},[425,68293,68294,68296,68298,68300,68302],{"class":427,"line":10715},[425,68295,64500],{"class":431},[425,68297,62047],{"class":52055},[425,68299,55830],{"class":52055},[425,68301,2412],{"class":52055},[425,68303,16569],{"class":701},[425,68305,68306,68308,68310,68312],{"class":427,"line":10740},[425,68307,64725],{"class":691},[425,68309,52192],{"class":701},[425,68311,55492],{"class":691},[425,68313,2307],{"class":701},[425,68315,68316,68318,68320,68322,68324,68326,68328],{"class":427,"line":10763},[425,68317,62987],{"class":691},[425,68319,52192],{"class":701},[425,68321,1235],{"class":691},[425,68323,52247],{"class":1155},[425,68325,52276],{"class":691},[425,68327,64746],{"class":691},[425,68329,2307],{"class":701},[425,68331,68332,68334,68336,68338],{"class":427,"line":10787},[425,68333,58171],{"class":691},[425,68335,52192],{"class":701},[425,68337,63124],{"class":691},[425,68339,2307],{"class":701},[425,68341,68342],{"class":427,"line":10792},[425,68343,3187],{"class":701},[425,68345,68346],{"class":427,"line":10797},[425,68347,3400],{"emptyLinePlaceholder":1084},[425,68349,68350,68352,68354,68356,68358,68360],{"class":427,"line":10802},[425,68351,64500],{"class":431},[425,68353,62047],{"class":52055},[425,68355,55830],{"class":52055},[425,68357,2412],{"class":52055},[425,68359,64779],{"class":431},[425,68361,16569],{"class":701},[425,68363,68364,68366,68368,68370],{"class":427,"line":10811},[425,68365,62546],{"class":691},[425,68367,52192],{"class":701},[425,68369,64790],{"class":691},[425,68371,2307],{"class":701},[425,68373,68374,68376,68378,68380],{"class":427,"line":10816},[425,68375,58171],{"class":691},[425,68377,52192],{"class":701},[425,68379,64790],{"class":691},[425,68381,2307],{"class":701},[425,68383,68384],{"class":427,"line":10822},[425,68385,3187],{"class":701},[425,68387,68388],{"class":427,"line":10843},[425,68389,3400],{"emptyLinePlaceholder":1084},[425,68391,68392,68394],{"class":427,"line":10849},[425,68393,64815],{"class":431},[425,68395,16569],{"class":701},[425,68397,68398,68400,68402,68404,68406,68408],{"class":427,"line":10863},[425,68399,55450],{"class":691},[425,68401,52192],{"class":701},[425,68403,1341],{"class":691},[425,68405,64828],{"class":691},[425,68407,52247],{"class":1155},[425,68409,2307],{"class":701},[425,68411,68412],{"class":427,"line":10869},[425,68413,3187],{"class":701},[425,68415,68416],{"class":427,"line":10896},[425,68417,3400],{"emptyLinePlaceholder":1084},[425,68419,68420,68422,68424],{"class":427,"line":10905},[425,68421,64815],{"class":431},[425,68423,62929],{"class":431},[425,68425,16569],{"class":701},[425,68427,68428,68430,68432,68434],{"class":427,"line":10911},[425,68429,55764],{"class":691},[425,68431,52192],{"class":701},[425,68433,55492],{"class":691},[425,68435,2307],{"class":701},[425,68437,68438],{"class":427,"line":10919},[425,68439,3187],{"class":701},[425,68441,68442],{"class":427,"line":10924},[425,68443,3400],{"emptyLinePlaceholder":1084},[425,68445,68446,68448,68451],{"class":427,"line":17601},[425,68447,64815],{"class":431},[425,68449,68450],{"class":431}," .active",[425,68452,16569],{"class":701},[425,68454,68455,68457,68459,68461],{"class":427,"line":17607},[425,68456,55764],{"class":691},[425,68458,52192],{"class":701},[425,68460,61624],{"class":691},[425,68462,2307],{"class":701},[425,68464,68465],{"class":427,"line":17630},[425,68466,3187],{"class":701},[425,68468,68469,68471,68473],{"class":427,"line":17636},[425,68470,53172],{"class":701},[425,68472,1074],{"class":52055},[425,68474,52062],{"class":701},[425,68476,68477,68479,68481],{"class":427,"line":17659},[425,68478,52540],{"class":701},[425,68480,52089],{"class":52055},[425,68482,52062],{"class":701},[425,68484,68485],{"class":427,"line":17673},[425,68486,3400],{"emptyLinePlaceholder":1084},[425,68488,68489,68491,68493],{"class":427,"line":17693},[425,68490,2057],{"class":701},[425,68492,52555],{"class":52055},[425,68494,52062],{"class":701},[425,68496,68497,68499,68501,68503,68505,68507],{"class":427,"line":17699},[425,68498,52899],{"class":701},[425,68500,52366],{"class":52055},[425,68502,54241],{"class":431},[425,68504,1204],{"class":701},[425,68506,64930],{"class":435},[425,68508,52062],{"class":701},[425,68510,68511,68513,68515,68517,68519,68521],{"class":427,"line":17710},[425,68512,52096],{"class":701},[425,68514,52366],{"class":52055},[425,68516,54241],{"class":431},[425,68518,1204],{"class":701},[425,68520,64945],{"class":435},[425,68522,52062],{"class":701},[425,68524,68525,68527,68529,68531,68533],{"class":427,"line":17733},[425,68526,55989],{"class":701},[425,68528,14],{"class":52055},[425,68530,64956],{"class":701},[425,68532,14],{"class":52055},[425,68534,52062],{"class":701},[425,68536,68537,68539,68541],{"class":427,"line":17755},[425,68538,55989],{"class":701},[425,68540,447],{"class":52055},[425,68542,52062],{"class":701},[425,68544,68545,68547,68549,68551,68553,68555,68557,68559,68561,68563,68565,68567,68569,68572,68574,68576,68578,68580],{"class":427,"line":17760},[425,68546,56057],{"class":701},[425,68548,450],{"class":52055},[425,68550,61807],{"class":701},[425,68552,22],{"class":52055},[425,68554,54241],{"class":431},[425,68556,1204],{"class":701},[425,68558,60461],{"class":435},[425,68560,61812],{"class":431},[425,68562,1204],{"class":701},[425,68564,64991],{"class":435},[425,68566,54706],{"class":431},[425,68568,1204],{"class":701},[425,68570,68571],{"class":435},"\"0\"",[425,68573,64994],{"class":701},[425,68575,22],{"class":52055},[425,68577,56069],{"class":701},[425,68579,450],{"class":52055},[425,68581,52062],{"class":701},[425,68583,68584,68586,68588,68590,68592,68594,68596,68598,68600,68602,68604,68606,68608,68610,68612],{"class":427,"line":17766},[425,68585,56057],{"class":701},[425,68587,450],{"class":52055},[425,68589,61807],{"class":701},[425,68591,22],{"class":52055},[425,68593,61812],{"class":431},[425,68595,1204],{"class":701},[425,68597,64991],{"class":435},[425,68599,54706],{"class":431},[425,68601,1204],{"class":701},[425,68603,4678],{"class":435},[425,68605,65021],{"class":701},[425,68607,22],{"class":52055},[425,68609,56069],{"class":701},[425,68611,450],{"class":52055},[425,68613,52062],{"class":701},[425,68615,68616,68618,68620,68622,68624,68626,68628,68630,68632,68634,68636,68638,68640,68642,68644],{"class":427,"line":17780},[425,68617,56057],{"class":701},[425,68619,450],{"class":52055},[425,68621,61807],{"class":701},[425,68623,22],{"class":52055},[425,68625,61812],{"class":431},[425,68627,1204],{"class":701},[425,68629,64991],{"class":435},[425,68631,54706],{"class":431},[425,68633,1204],{"class":701},[425,68635,4701],{"class":435},[425,68637,65048],{"class":701},[425,68639,22],{"class":52055},[425,68641,56069],{"class":701},[425,68643,450],{"class":52055},[425,68645,52062],{"class":701},[425,68647,68648,68650,68652,68654,68656,68658,68660,68662,68664,68666,68668,68670,68672,68674,68676],{"class":427,"line":17793},[425,68649,56057],{"class":701},[425,68651,450],{"class":52055},[425,68653,61807],{"class":701},[425,68655,22],{"class":52055},[425,68657,61812],{"class":431},[425,68659,1204],{"class":701},[425,68661,64991],{"class":435},[425,68663,54706],{"class":431},[425,68665,1204],{"class":701},[425,68667,4714],{"class":435},[425,68669,65075],{"class":701},[425,68671,22],{"class":52055},[425,68673,56069],{"class":701},[425,68675,450],{"class":52055},[425,68677,52062],{"class":701},[425,68679,68680,68682,68684,68686,68688,68690,68692,68694,68696,68698,68700,68702,68704,68706,68708],{"class":427,"line":17798},[425,68681,56057],{"class":701},[425,68683,450],{"class":52055},[425,68685,61807],{"class":701},[425,68687,22],{"class":52055},[425,68689,61812],{"class":431},[425,68691,1204],{"class":701},[425,68693,64991],{"class":435},[425,68695,54706],{"class":431},[425,68697,1204],{"class":701},[425,68699,4727],{"class":435},[425,68701,65102],{"class":701},[425,68703,22],{"class":52055},[425,68705,56069],{"class":701},[425,68707,450],{"class":52055},[425,68709,52062],{"class":701},[425,68711,68712,68714,68716],{"class":427,"line":17812},[425,68713,56162],{"class":701},[425,68715,447],{"class":52055},[425,68717,52062],{"class":701},[425,68719,68720,68722,68724],{"class":427,"line":17817},[425,68721,52531],{"class":701},[425,68723,52366],{"class":52055},[425,68725,52062],{"class":701},[425,68727,68728,68730,68732,68734,68736,68738],{"class":427,"line":17823},[425,68729,52096],{"class":701},[425,68731,52366],{"class":52055},[425,68733,54241],{"class":431},[425,68735,1204],{"class":701},[425,68737,65139],{"class":435},[425,68739,52062],{"class":701},[425,68741,68742,68744,68746,68748,68750,68752,68754,68756,68758,68760,68762,68764,68766,68768,68770,68772],{"class":427,"line":17828},[425,68743,55989],{"class":701},[425,68745,52366],{"class":52055},[425,68747,54241],{"class":431},[425,68749,1204],{"class":701},[425,68751,65154],{"class":435},[425,68753,61807],{"class":701},[425,68755,393],{"class":52055},[425,68757,55994],{"class":431},[425,68759,1204],{"class":701},[425,68761,65165],{"class":435},[425,68763,56002],{"class":431},[425,68765,1204],{"class":701},[425,68767,8652],{"class":435},[425,68769,65174],{"class":701},[425,68771,52366],{"class":52055},[425,68773,52062],{"class":701},[425,68775,68776,68778,68780,68782,68784,68786,68788,68790,68792,68794,68796,68798,68800,68802,68804,68806],{"class":427,"line":17842},[425,68777,55989],{"class":701},[425,68779,52366],{"class":52055},[425,68781,54241],{"class":431},[425,68783,1204],{"class":701},[425,68785,63378],{"class":435},[425,68787,61807],{"class":701},[425,68789,393],{"class":52055},[425,68791,55994],{"class":431},[425,68793,1204],{"class":701},[425,68795,65201],{"class":435},[425,68797,56002],{"class":431},[425,68799,1204],{"class":701},[425,68801,8652],{"class":435},[425,68803,65174],{"class":701},[425,68805,52366],{"class":52055},[425,68807,52062],{"class":701},[425,68809,68810,68812,68814,68816,68818,68820,68822,68824,68826,68828,68830,68832,68834,68836,68838,68840],{"class":427,"line":17847},[425,68811,55989],{"class":701},[425,68813,52366],{"class":52055},[425,68815,54241],{"class":431},[425,68817,1204],{"class":701},[425,68819,63378],{"class":435},[425,68821,61807],{"class":701},[425,68823,393],{"class":52055},[425,68825,55994],{"class":431},[425,68827,1204],{"class":701},[425,68829,65236],{"class":435},[425,68831,56002],{"class":431},[425,68833,1204],{"class":701},[425,68835,8652],{"class":435},[425,68837,65174],{"class":701},[425,68839,52366],{"class":52055},[425,68841,52062],{"class":701},[425,68843,68844,68846,68848,68850,68852,68854,68856,68858,68860,68862,68864,68866,68868,68870,68872,68874],{"class":427,"line":17852},[425,68845,55989],{"class":701},[425,68847,52366],{"class":52055},[425,68849,54241],{"class":431},[425,68851,1204],{"class":701},[425,68853,63378],{"class":435},[425,68855,61807],{"class":701},[425,68857,393],{"class":52055},[425,68859,55994],{"class":431},[425,68861,1204],{"class":701},[425,68863,65271],{"class":435},[425,68865,56002],{"class":431},[425,68867,1204],{"class":701},[425,68869,8652],{"class":435},[425,68871,65174],{"class":701},[425,68873,52366],{"class":52055},[425,68875,52062],{"class":701},[425,68877,68878,68880,68882,68884,68886,68888,68890,68892,68894,68896,68898,68900,68902,68904,68906,68908],{"class":427,"line":17866},[425,68879,55989],{"class":701},[425,68881,52366],{"class":52055},[425,68883,54241],{"class":431},[425,68885,1204],{"class":701},[425,68887,63378],{"class":435},[425,68889,61807],{"class":701},[425,68891,393],{"class":52055},[425,68893,55994],{"class":431},[425,68895,1204],{"class":701},[425,68897,65306],{"class":435},[425,68899,56002],{"class":431},[425,68901,1204],{"class":701},[425,68903,8652],{"class":435},[425,68905,65174],{"class":701},[425,68907,52366],{"class":52055},[425,68909,52062],{"class":701},[425,68911,68912,68914,68916],{"class":427,"line":17878},[425,68913,52531],{"class":701},[425,68915,52366],{"class":52055},[425,68917,52062],{"class":701},[425,68919,68920,68922,68924],{"class":427,"line":17883},[425,68921,53172],{"class":701},[425,68923,52366],{"class":52055},[425,68925,52062],{"class":701},[425,68927,68928,68930,68932],{"class":427,"line":17896},[425,68929,52899],{"class":701},[425,68931,52568],{"class":52055},[425,68933,52062],{"class":701},[425,68935,68936],{"class":427,"line":17901},[425,68937,68938],{"class":1216},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[425,68940,68941],{"class":427,"line":17906},[425,68942,68943],{"class":1216},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[425,68945,68946,68948,68950,68952,68954,68956,68958,68961],{"class":427,"line":17911},[425,68947,12220],{"class":1155},[425,68949,62047],{"class":691},[425,68951,14563],{"class":1155},[425,68953,55151],{"class":701},[425,68955,55154],{"class":431},[425,68957,1159],{"class":701},[425,68959,68960],{"class":435},"'.tab-nav ul'",[425,68962,1165],{"class":701},[425,68964,68965],{"class":427,"line":17924},[425,68966,68967],{"class":1216},"    \u002F\u002F 2.添加事件\n",[425,68969,68970,68972,68974,68976,68978,68980,68982,68984,68986],{"class":427,"line":17929},[425,68971,67709],{"class":701},[425,68973,58568],{"class":431},[425,68975,1159],{"class":701},[425,68977,58573],{"class":435},[425,68979,13434],{"class":701},[425,68981,55204],{"class":1155},[425,68983,2664],{"class":701},[425,68985,1232],{"class":6216},[425,68987,13441],{"class":701},[425,68989,68990,68992,68994],{"class":427,"line":33388},[425,68991,58999],{"class":701},[425,68993,67765],{"class":431},[425,68995,67768],{"class":701},[425,68997,68998],{"class":427,"line":33394},[425,68999,69000],{"class":1216},"      \u002F\u002Fe.targer是我们点击的对象\n",[425,69002,69003,69005,69007,69009,69012],{"class":427,"line":33400},[425,69004,55235],{"class":1155},[425,69006,67789],{"class":701},[425,69008,55241],{"class":1155},[425,69010,69011],{"class":435}," 'A'",[425,69013,13441],{"class":701},[425,69015,69016,69018,69020,69022,69025,69027,69029,69031,69033],{"class":427,"line":33406},[425,69017,52680],{"class":701},[425,69019,55154],{"class":431},[425,69021,1159],{"class":701},[425,69023,69024],{"class":435},"'.active'",[425,69026,57758],{"class":701},[425,69028,57761],{"class":431},[425,69030,1159],{"class":701},[425,69032,65469],{"class":435},[425,69034,1165],{"class":701},[425,69036,69037,69040,69042,69044,69046],{"class":427,"line":33412},[425,69038,69039],{"class":701},"        e.target.classList.",[425,69041,6334],{"class":431},[425,69043,1159],{"class":701},[425,69045,65469],{"class":435},[425,69047,1165],{"class":701},[425,69049,69050],{"class":427,"line":33423},[425,69051,3400],{"emptyLinePlaceholder":1084},[425,69053,69054],{"class":427,"line":33429},[425,69055,69056],{"class":1216},"        \u002F\u002F 下面大盒子模块\n",[425,69058,69059],{"class":427,"line":33449},[425,69060,69061],{"class":1216},"        \u002F\u002F console.log(e.target.dataset.id)\n",[425,69063,69064,69066,69068,69070,69072],{"class":427,"line":33455},[425,69065,62025],{"class":1155},[425,69067,4032],{"class":691},[425,69069,14563],{"class":1155},[425,69071,46321],{"class":1155},[425,69073,69074],{"class":701},"e.target.dataset.id\n",[425,69076,69077,69079,69081,69083,69085,69087,69089,69091,69093],{"class":427,"line":33466},[425,69078,52680],{"class":701},[425,69080,55154],{"class":431},[425,69082,1159],{"class":701},[425,69084,65517],{"class":435},[425,69086,57758],{"class":701},[425,69088,57761],{"class":431},[425,69090,1159],{"class":701},[425,69092,65469],{"class":435},[425,69094,1165],{"class":701},[425,69096,69097,69099,69101,69103,69105,69107,69109,69111,69113,69115,69117,69119,69121],{"class":427,"line":33472},[425,69098,52680],{"class":701},[425,69100,55154],{"class":431},[425,69102,1159],{"class":701},[425,69104,65543],{"class":435},[425,69106,1589],{"class":701},[425,69108,46321],{"class":1155},[425,69110,26109],{"class":691},[425,69112,57787],{"class":435},[425,69114,57758],{"class":701},[425,69116,6334],{"class":431},[425,69118,1159],{"class":701},[425,69120,65469],{"class":435},[425,69122,1165],{"class":701},[425,69124,69125],{"class":427,"line":33478},[425,69126,3400],{"emptyLinePlaceholder":1084},[425,69128,69129],{"class":427,"line":33484},[425,69130,53153],{"class":701},[425,69132,69133],{"class":427,"line":33490},[425,69134,34216],{"class":701},[425,69136,69137,69139,69141],{"class":427,"line":33496},[425,69138,53172],{"class":701},[425,69140,52568],{"class":52055},[425,69142,52062],{"class":701},[425,69144,69145,69147,69149],{"class":427,"line":33502},[425,69146,52540],{"class":701},[425,69148,52555],{"class":52055},[425,69150,52062],{"class":701},[425,69152,69153],{"class":427,"line":33508},[425,69154,3400],{"emptyLinePlaceholder":1084},[425,69156,69157,69159,69161],{"class":427,"line":33528},[425,69158,52540],{"class":701},[425,69160,51390],{"class":52055},[425,69162,52062],{"class":701},[14,69164,69166],{"id":69165},"_333-页面加载事件","3.3.3 页面加载事件",[972,69168,69169],{},[450,69170,69171],{},"load",[19,69173,69174],{},[393,69175],{"alt":395,"src":69176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,69178,69179],{},"window代表整个窗口，比document还要大",[19,69181,69182],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,69184,69185],{},"img.addEventListener('load', function () {",[19,69187,69188],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,69190,53219],{},[972,69192,69193],{"start":698},[450,69194,69195],{},"DOMContentLoaded",[19,69197,69198],{},[393,69199],{"alt":395,"src":69200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,69202,69203],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[14,69205,69207],{"id":69206},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,69209,69210],{},[393,69211],{"alt":395,"src":69212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,69214,69215],{},[393,69216],{"alt":395,"src":69217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,69219,69220],{},[393,69221],{"alt":395,"src":69222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,69224,69225],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,69227,69228],{},"获得的是数字型数据，不带单位",[19,69230,69231],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,69233,69234],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,69236,69237],{},"它是通过document.documentElement来获取",[19,69239,69240],{},[393,69241],{"alt":395,"src":69242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,69244,69245],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[14,69247,69249],{"id":69248},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,69251,69252],{},[393,69253],{"alt":395,"src":69254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,69256,69257],{},[393,69258],{"alt":395,"src":69259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[14,69261,69263],{"id":69262},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,69265,69266],{},[393,69267],{"alt":395,"src":69268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,69270,69271],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,69273,69274],{},[393,69275],{"alt":395,"src":69276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,69278,69279],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,69281,69282],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,69284,69285],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,69287,69288],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,69290,69291],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,69293,69294],{},[393,69295],{"alt":395,"src":69296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,69298,69299],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,69301,69302],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,69304,69305],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,69307,69308],{},"e.pageX-box.getBoundingClientRect()",[14,69310,69312],{"id":69311},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,69314,69315],{},[393,69316],{"alt":395,"src":69317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,69319,69320],{},"这个是相对于视口来说的，它是个方法，不是属性值",[14,69322,69324],{"id":69323},"_338-总结","3.3.8 总结",[19,69326,69327],{},[393,69328],{"alt":395,"src":69329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,69331,69332],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,69334,69335],{},"修改盒子的宽高只能通过width和height来实现",[14,69337,69339],{"id":69338},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[416,69341,69343],{"className":51388,"code":69342,"language":51390,"meta":395,"style":395},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[422,69344,69345,69350,69355,69360,69365],{"__ignoreMap":395},[425,69346,69347],{"class":427,"line":428},[425,69348,69349],{"class":701},"\u002F* 页面滑动 *\u002F\n",[425,69351,69352],{"class":427,"line":698},[425,69353,69354],{"class":701},"html {\n",[425,69356,69357],{"class":427,"line":710},[425,69358,69359],{"class":701},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[425,69361,69362],{"class":427,"line":721},[425,69363,69364],{"class":701},"  scroll-behavior: smooth;\n",[425,69366,69367],{"class":427,"line":735},[425,69368,2578],{"class":701},[19,69370,69371],{},"默认是auto",[14,69373,69375],{"id":69374},"_3310-日期对象","3.3.10 日期对象",[22995,69377,69379],{"id":69378},"_33101-实例化","3.3.10.1 实例化",[19,69381,69382],{},[393,69383],{"alt":395,"src":69384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22995,69386,69388],{"id":69387},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,69390,69391],{},[393,69392],{"alt":395,"src":69393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,69395,69396],{},"月份+1",[19,69398,69399],{},"老外认为第一天为0，星期天",[19,69401,69402],{},"方法使用的时候必须要跟括号",[19,69404,69405],{},"快速获得日期",[19,69407,69408],{},"\u002F\u002F 得到年月日",[19,69410,69411],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,69413,69414],{},"\u002F\u002F 得到当地日期",[19,69416,69417],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,69419,69420],{},"\u002F\u002F 得到当地时间",[19,69422,69423],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,69425,69426],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,69428,69429],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52568,69431,69432],{},"\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,69434,69435],{},"学会去封装函数！",[22995,69437,69439],{"id":69438},"_33103-时间戳","3.3.10.3 时间戳",[19,69441,69442],{},[393,69443],{"alt":395,"src":69444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,69446,69447],{},[393,69448],{"alt":395,"src":69449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,69451,69452],{},"三种方法记住一个就可以",[14,69454,69456],{"id":69455},"_3311-节点操作","3.3.11 节点操作",[22995,69458,69460],{"id":69459},"_33111-dom节点","3.3.11.1 DOM节点",[19,69462,69463],{},[393,69464],{"alt":395,"src":69465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,69467,69468],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22995,69470,69472],{"id":69471},"_33112-查找节点","3.3.11.2 查找节点",[19,69474,69475],{},"前边的document.querySelector()是获取的元素",[19,69477,69478],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,69480,69481],{},[393,69482],{"alt":395,"src":69483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[972,69485,69486],{},[450,69487,69488],{},"父节点",[19,69490,69491],{},[393,69492],{"alt":395,"src":69493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[972,69495,69496],{"start":698},[450,69497,69498],{},"子节点",[19,69500,69501],{},[393,69502],{"alt":395,"src":69503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,69505,69506],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,69508,69509],{},"children获得的是伪数组，是亲儿子",[972,69511,69512],{"start":710},[450,69513,69514],{},"兄弟节点",[19,69516,69517],{},[393,69518],{"alt":395,"src":69519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22995,69521,69523],{"id":69522},"_33113-增加节点","3.3.11.3 增加节点",[19,69525,69526],{},[393,69527],{"alt":395,"src":69528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,69530,69531],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,69533,69534],{},[393,69535],{"alt":395,"src":69536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,69538,69539],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,69541,69542],{},"下面是写法的部分展示，就按照下边的格式来写",[19,69544,69545],{},"例：",[52568,69547,69548],{},"\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,69550,69551],{},[393,69552],{"alt":395,"src":69553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,69555,69556],{},"false只克隆标签，里边的内容不会克隆过来",[416,69558,69560],{"className":51388,"code":69559,"language":51390,"meta":395,"style":395},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[422,69561,69562],{"__ignoreMap":395},[425,69563,69564],{"class":427,"line":428},[425,69565,69559],{"class":701},[22995,69567,69569],{"id":69568},"_33114-删除节点","3.3.11.4 删除节点",[19,69571,69572],{},[393,69573],{"alt":395,"src":69574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,69576,69577],{},"父亲删儿子",[19,69579,69580],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[14,69582,69584],{"id":69583},"_3312-m端事件","3.3.12 M端事件",[19,69586,69587],{},"M端就是移动端",[19,69589,69590],{},[393,69591],{"alt":395,"src":69592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[14,69594,69596],{"id":69595},"_3313-插件","3.3.13 插件",[19,69598,69599],{},"要熟悉官网！！！",[19,69601,69602],{},[22,69603,69604],{"href":69604,"rel":69605},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[26],[19,69607,69608],{},[22,69609,69610],{"href":69610,"rel":69611},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[26],[14,69613,69615],{"id":69614},"_3314-学生信息表","3.3.14 学生信息表",[972,69617,69618,69621,69624,69627,69630,69633,69636,69639],{},[450,69619,69620],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[450,69622,69623],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[450,69625,69626],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[450,69628,69629],{},"用好表单元素自带的属性，value,name等",[450,69631,69632],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[450,69634,69635],{},"不要忘记事件对象",[450,69637,69638],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[450,69640,69641],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,69643,69644],{},"结构：",[416,69646,69648],{"className":51388,"code":69647,"language":51390,"meta":395,"style":395},"\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",[422,69649,69650,69660,69674,69678,69686,69700,69720,69741,69754,69778,69786,69790,69798,69811,69832,69860,69888,69893,69915,69935,69954,69962,69990,70012,70032,70052,70072,70092,70112,70120,70140,70148,70152,70165,70173,70181,70189,70202,70215,70228,70241,70254,70267,70280,70288,70296,70304,70309,70314,70319,70324,70329,70334,70339,70344,70349,70354,70359,70364,70369,70377,70385,70393,70397,70417,70436,70456,70476,70496,70516,70520,70525,70545,70550,70560,70565,70570,70590,70612,70617,70627,70631,70635,70640,70645,70674,70688,70703,70707,70711,70715,70720,70731,70744,70749,70754,70759,70764,70769,70773,70778,70783,70792,70797,70802,70814,70819,70826,70830,70835,70845,70850,70860,70865,70893,70914,70924,70944,70962,70979,70996,71013,71030,71034,71044,71049,71054,71059,71070,71074,71078,71082,71087,71092,71113,71125,71130,71135,71140,71154,71159,71166,71170,71174,71182,71186,71194,71198],{"__ignoreMap":395},[425,69651,69652,69654,69656,69658],{"class":427,"line":428},[425,69653,52052],{"class":701},[425,69655,52056],{"class":52055},[425,69657,52059],{"class":431},[425,69659,52062],{"class":701},[425,69661,69662,69664,69666,69668,69670,69672],{"class":427,"line":698},[425,69663,2057],{"class":701},[425,69665,51390],{"class":52055},[425,69667,52071],{"class":431},[425,69669,1204],{"class":701},[425,69671,52076],{"class":435},[425,69673,52062],{"class":701},[425,69675,69676],{"class":427,"line":710},[425,69677,3400],{"emptyLinePlaceholder":1084},[425,69679,69680,69682,69684],{"class":427,"line":721},[425,69681,2057],{"class":701},[425,69683,52089],{"class":52055},[425,69685,52062],{"class":701},[425,69687,69688,69690,69692,69694,69696,69698],{"class":427,"line":735},[425,69689,52899],{"class":701},[425,69691,52099],{"class":52055},[425,69693,52102],{"class":431},[425,69695,1204],{"class":701},[425,69697,52107],{"class":435},[425,69699,59882],{"class":701},[425,69701,69702,69704,69706,69708,69710,69712,69714,69716,69718],{"class":427,"line":743},[425,69703,52899],{"class":701},[425,69705,52099],{"class":52055},[425,69707,15917],{"class":431},[425,69709,1204],{"class":701},[425,69711,52146],{"class":435},[425,69713,52126],{"class":431},[425,69715,1204],{"class":701},[425,69717,52153],{"class":435},[425,69719,59882],{"class":701},[425,69721,69722,69724,69726,69728,69730,69732,69734,69736,69739],{"class":427,"line":751},[425,69723,52899],{"class":701},[425,69725,52099],{"class":52055},[425,69727,52118],{"class":431},[425,69729,1204],{"class":701},[425,69731,52123],{"class":435},[425,69733,52126],{"class":431},[425,69735,1204],{"class":701},[425,69737,69738],{"class":435},"\"ie=edge\"",[425,69740,59882],{"class":701},[425,69742,69743,69745,69747,69750,69752],{"class":427,"line":759},[425,69744,52899],{"class":701},[425,69746,52162],{"class":52055},[425,69748,69749],{"class":701},">学生信息管理\u003C\u002F",[425,69751,52162],{"class":52055},[425,69753,52062],{"class":701},[425,69755,69756,69758,69761,69764,69766,69769,69771,69773,69776],{"class":427,"line":770},[425,69757,52899],{"class":701},[425,69759,69760],{"class":52055},"link",[425,69762,69763],{"class":431}," rel",[425,69765,1204],{"class":701},[425,69767,69768],{"class":435},"\"stylesheet\"",[425,69770,61812],{"class":431},[425,69772,1204],{"class":701},[425,69774,69775],{"class":435},"\"css\u002Findex.css\"",[425,69777,59882],{"class":701},[425,69779,69780,69782,69784],{"class":427,"line":780},[425,69781,52540],{"class":701},[425,69783,52089],{"class":52055},[425,69785,52062],{"class":701},[425,69787,69788],{"class":427,"line":790},[425,69789,3400],{"emptyLinePlaceholder":1084},[425,69791,69792,69794,69796],{"class":427,"line":805},[425,69793,2057],{"class":701},[425,69795,52555],{"class":52055},[425,69797,52062],{"class":701},[425,69799,69800,69802,69804,69807,69809],{"class":427,"line":818},[425,69801,52899],{"class":701},[425,69803,10],{"class":52055},[425,69805,69806],{"class":701},">新增学员\u003C\u002F",[425,69808,10],{"class":52055},[425,69810,52062],{"class":701},[425,69812,69813,69815,69817,69819,69821,69823,69826,69828,69830],{"class":427,"line":831},[425,69814,52899],{"class":701},[425,69816,67380],{"class":52055},[425,69818,54241],{"class":431},[425,69820,1204],{"class":701},[425,69822,63419],{"class":435},[425,69824,69825],{"class":431}," autocomplete",[425,69827,1204],{"class":701},[425,69829,32531],{"class":435},[425,69831,52062],{"class":701},[425,69833,69834,69837,69839,69841,69843,69845,69847,69849,69852,69854,69856,69858],{"class":427,"line":841},[425,69835,69836],{"class":701},"    姓名：\u003C",[425,69838,54576],{"class":52055},[425,69840,54579],{"class":431},[425,69842,1204],{"class":701},[425,69844,63454],{"class":435},[425,69846,54241],{"class":431},[425,69848,1204],{"class":701},[425,69850,69851],{"class":435},"\"uname\"",[425,69853,15917],{"class":431},[425,69855,1204],{"class":701},[425,69857,69851],{"class":435},[425,69859,59882],{"class":701},[425,69861,69862,69865,69867,69869,69871,69873,69875,69877,69880,69882,69884,69886],{"class":427,"line":852},[425,69863,69864],{"class":701},"    年龄：\u003C",[425,69866,54576],{"class":52055},[425,69868,54579],{"class":431},[425,69870,1204],{"class":701},[425,69872,63454],{"class":435},[425,69874,54241],{"class":431},[425,69876,1204],{"class":701},[425,69878,69879],{"class":435},"\"age\"",[425,69881,15917],{"class":431},[425,69883,1204],{"class":701},[425,69885,69879],{"class":435},[425,69887,59882],{"class":701},[425,69889,69890],{"class":427,"line":862},[425,69891,69892],{"class":701},"    性别:\n",[425,69894,69895,69897,69900,69902,69904,69907,69909,69911,69913],{"class":427,"line":878},[425,69896,52096],{"class":701},[425,69898,69899],{"class":52055},"select",[425,69901,15917],{"class":431},[425,69903,1204],{"class":701},[425,69905,69906],{"class":435},"\"gender\"",[425,69908,54241],{"class":431},[425,69910,1204],{"class":701},[425,69912,69906],{"class":435},[425,69914,52062],{"class":701},[425,69916,69917,69919,69922,69924,69926,69928,69931,69933],{"class":427,"line":914},[425,69918,55989],{"class":701},[425,69920,69921],{"class":52055},"option",[425,69923,67406],{"class":431},[425,69925,1204],{"class":701},[425,69927,10960],{"class":435},[425,69929,69930],{"class":701},">男\u003C\u002F",[425,69932,69921],{"class":52055},[425,69934,52062],{"class":701},[425,69936,69937,69939,69941,69943,69945,69947,69950,69952],{"class":427,"line":943},[425,69938,55989],{"class":701},[425,69940,69921],{"class":52055},[425,69942,67406],{"class":431},[425,69944,1204],{"class":701},[425,69946,11029],{"class":435},[425,69948,69949],{"class":701},">女\u003C\u002F",[425,69951,69921],{"class":52055},[425,69953,52062],{"class":701},[425,69955,69956,69958,69960],{"class":427,"line":956},[425,69957,52531],{"class":701},[425,69959,69899],{"class":52055},[425,69961,52062],{"class":701},[425,69963,69964,69967,69969,69971,69973,69975,69977,69979,69982,69984,69986,69988],{"class":427,"line":964},[425,69965,69966],{"class":701},"    薪资：\u003C",[425,69968,54576],{"class":52055},[425,69970,54579],{"class":431},[425,69972,1204],{"class":701},[425,69974,63454],{"class":435},[425,69976,54241],{"class":431},[425,69978,1204],{"class":701},[425,69980,69981],{"class":435},"\"salary\"",[425,69983,15917],{"class":431},[425,69985,1204],{"class":701},[425,69987,69981],{"class":435},[425,69989,59882],{"class":701},[425,69991,69992,69995,69997,69999,70001,70004,70006,70008,70010],{"class":427,"line":2733},[425,69993,69994],{"class":701},"    就业城市：\u003C",[425,69996,69899],{"class":52055},[425,69998,15917],{"class":431},[425,70000,1204],{"class":701},[425,70002,70003],{"class":435},"\"city\"",[425,70005,54241],{"class":431},[425,70007,1204],{"class":701},[425,70009,70003],{"class":435},[425,70011,52062],{"class":701},[425,70013,70014,70016,70018,70020,70022,70025,70028,70030],{"class":427,"line":2750},[425,70015,55989],{"class":701},[425,70017,69921],{"class":52055},[425,70019,67406],{"class":431},[425,70021,1204],{"class":701},[425,70023,70024],{"class":435},"\"北京\"",[425,70026,70027],{"class":701},">北京\u003C\u002F",[425,70029,69921],{"class":52055},[425,70031,52062],{"class":701},[425,70033,70034,70036,70038,70040,70042,70045,70048,70050],{"class":427,"line":2755},[425,70035,55989],{"class":701},[425,70037,69921],{"class":52055},[425,70039,67406],{"class":431},[425,70041,1204],{"class":701},[425,70043,70044],{"class":435},"\"上海\"",[425,70046,70047],{"class":701},">上海\u003C\u002F",[425,70049,69921],{"class":52055},[425,70051,52062],{"class":701},[425,70053,70054,70056,70058,70060,70062,70065,70068,70070],{"class":427,"line":2760},[425,70055,55989],{"class":701},[425,70057,69921],{"class":52055},[425,70059,67406],{"class":431},[425,70061,1204],{"class":701},[425,70063,70064],{"class":435},"\"广州\"",[425,70066,70067],{"class":701},">广州\u003C\u002F",[425,70069,69921],{"class":52055},[425,70071,52062],{"class":701},[425,70073,70074,70076,70078,70080,70082,70085,70088,70090],{"class":427,"line":2765},[425,70075,55989],{"class":701},[425,70077,69921],{"class":52055},[425,70079,67406],{"class":431},[425,70081,1204],{"class":701},[425,70083,70084],{"class":435},"\"深圳\"",[425,70086,70087],{"class":701},">深圳\u003C\u002F",[425,70089,69921],{"class":52055},[425,70091,52062],{"class":701},[425,70093,70094,70096,70098,70100,70102,70105,70108,70110],{"class":427,"line":2779},[425,70095,55989],{"class":701},[425,70097,69921],{"class":52055},[425,70099,67406],{"class":431},[425,70101,1204],{"class":701},[425,70103,70104],{"class":435},"\"曹县\"",[425,70106,70107],{"class":701},">曹县\u003C\u002F",[425,70109,69921],{"class":52055},[425,70111,52062],{"class":701},[425,70113,70114,70116,70118],{"class":427,"line":2784},[425,70115,52531],{"class":701},[425,70117,69899],{"class":52055},[425,70119,52062],{"class":701},[425,70121,70122,70124,70126,70128,70130,70133,70136,70138],{"class":427,"line":3577},[425,70123,52096],{"class":701},[425,70125,54642],{"class":52055},[425,70127,54241],{"class":431},[425,70129,1204],{"class":701},[425,70131,70132],{"class":435},"\"add\"",[425,70134,70135],{"class":701},">录入\u003C\u002F",[425,70137,54642],{"class":52055},[425,70139,52062],{"class":701},[425,70141,70142,70144,70146],{"class":427,"line":3591},[425,70143,53172],{"class":701},[425,70145,67380],{"class":52055},[425,70147,52062],{"class":701},[425,70149,70150],{"class":427,"line":3599},[425,70151,3400],{"emptyLinePlaceholder":1084},[425,70153,70154,70156,70158,70161,70163],{"class":427,"line":3604},[425,70155,52899],{"class":701},[425,70157,10],{"class":52055},[425,70159,70160],{"class":701},">就业榜\u003C\u002F",[425,70162,10],{"class":52055},[425,70164,52062],{"class":701},[425,70166,70167,70169,70171],{"class":427,"line":3610},[425,70168,52899],{"class":701},[425,70170,35],{"class":52055},[425,70172,52062],{"class":701},[425,70174,70175,70177,70179],{"class":427,"line":3616},[425,70176,52096],{"class":701},[425,70178,38],{"class":52055},[425,70180,52062],{"class":701},[425,70182,70183,70185,70187],{"class":427,"line":3621},[425,70184,55989],{"class":701},[425,70186,41],{"class":52055},[425,70188,52062],{"class":701},[425,70190,70191,70193,70195,70198,70200],{"class":427,"line":8948},[425,70192,56057],{"class":701},[425,70194,44],{"class":52055},[425,70196,70197],{"class":701},">序号\u003C\u002F",[425,70199,44],{"class":52055},[425,70201,52062],{"class":701},[425,70203,70204,70206,70208,70211,70213],{"class":427,"line":8972},[425,70205,56057],{"class":701},[425,70207,44],{"class":52055},[425,70209,70210],{"class":701},">姓名\u003C\u002F",[425,70212,44],{"class":52055},[425,70214,52062],{"class":701},[425,70216,70217,70219,70221,70224,70226],{"class":427,"line":8977},[425,70218,56057],{"class":701},[425,70220,44],{"class":52055},[425,70222,70223],{"class":701},">年龄\u003C\u002F",[425,70225,44],{"class":52055},[425,70227,52062],{"class":701},[425,70229,70230,70232,70234,70237,70239],{"class":427,"line":8983},[425,70231,56057],{"class":701},[425,70233,44],{"class":52055},[425,70235,70236],{"class":701},">性别\u003C\u002F",[425,70238,44],{"class":52055},[425,70240,52062],{"class":701},[425,70242,70243,70245,70247,70250,70252],{"class":427,"line":9010},[425,70244,56057],{"class":701},[425,70246,44],{"class":52055},[425,70248,70249],{"class":701},">薪资\u003C\u002F",[425,70251,44],{"class":52055},[425,70253,52062],{"class":701},[425,70255,70256,70258,70260,70263,70265],{"class":427,"line":9015},[425,70257,56057],{"class":701},[425,70259,44],{"class":52055},[425,70261,70262],{"class":701},">就业城市\u003C\u002F",[425,70264,44],{"class":52055},[425,70266,52062],{"class":701},[425,70268,70269,70271,70273,70276,70278],{"class":427,"line":9021},[425,70270,56057],{"class":701},[425,70272,44],{"class":52055},[425,70274,70275],{"class":701},">操作\u003C\u002F",[425,70277,44],{"class":52055},[425,70279,52062],{"class":701},[425,70281,70282,70284,70286],{"class":427,"line":9033},[425,70283,56162],{"class":701},[425,70285,41],{"class":52055},[425,70287,52062],{"class":701},[425,70289,70290,70292,70294],{"class":427,"line":9045},[425,70291,52531],{"class":701},[425,70293,38],{"class":52055},[425,70295,52062],{"class":701},[425,70297,70298,70300,70302],{"class":427,"line":9057},[425,70299,52096],{"class":701},[425,70301,55],{"class":52055},[425,70303,52062],{"class":701},[425,70305,70306],{"class":427,"line":10715},[425,70307,70308],{"class":1216},"      \u003C!-- \n",[425,70310,70311],{"class":427,"line":10740},[425,70312,70313],{"class":1216},"        \u003Ctr>\n",[425,70315,70316],{"class":427,"line":10763},[425,70317,70318],{"class":1216},"          \u003Ctd>1001\u003C\u002Ftd>\n",[425,70320,70321],{"class":427,"line":10787},[425,70322,70323],{"class":1216},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[425,70325,70326],{"class":427,"line":10792},[425,70327,70328],{"class":1216},"          \u003Ctd>19\u003C\u002Ftd>\n",[425,70330,70331],{"class":427,"line":10797},[425,70332,70333],{"class":1216},"          \u003Ctd>男\u003C\u002Ftd>\n",[425,70335,70336],{"class":427,"line":10802},[425,70337,70338],{"class":1216},"          \u003Ctd>15000\u003C\u002Ftd>\n",[425,70340,70341],{"class":427,"line":10811},[425,70342,70343],{"class":1216},"          \u003Ctd>上海\u003C\u002Ftd>\n",[425,70345,70346],{"class":427,"line":10816},[425,70347,70348],{"class":1216},"          \u003Ctd>\n",[425,70350,70351],{"class":427,"line":10822},[425,70352,70353],{"class":1216},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[425,70355,70356],{"class":427,"line":10843},[425,70357,70358],{"class":1216},"          \u003C\u002Ftd>\n",[425,70360,70361],{"class":427,"line":10849},[425,70362,70363],{"class":1216},"        \u003C\u002Ftr> \n",[425,70365,70366],{"class":427,"line":10863},[425,70367,70368],{"class":1216},"        -->\n",[425,70370,70371,70373,70375],{"class":427,"line":10869},[425,70372,52531],{"class":701},[425,70374,55],{"class":52055},[425,70376,52062],{"class":701},[425,70378,70379,70381,70383],{"class":427,"line":10896},[425,70380,53172],{"class":701},[425,70382,35],{"class":52055},[425,70384,52062],{"class":701},[425,70386,70387,70389,70391],{"class":427,"line":10905},[425,70388,52899],{"class":701},[425,70390,52568],{"class":52055},[425,70392,52062],{"class":701},[425,70394,70395],{"class":427,"line":10911},[425,70396,60713],{"class":1216},[425,70398,70399,70401,70404,70406,70408,70410,70412,70415],{"class":427,"line":10919},[425,70400,12220],{"class":1155},[425,70402,70403],{"class":691}," uname",[425,70405,14563],{"class":1155},[425,70407,55151],{"class":701},[425,70409,55154],{"class":431},[425,70411,1159],{"class":701},[425,70413,70414],{"class":435},"'.uname'",[425,70416,1165],{"class":701},[425,70418,70419,70421,70423,70425,70427,70429,70431,70434],{"class":427,"line":10924},[425,70420,12220],{"class":1155},[425,70422,16686],{"class":691},[425,70424,14563],{"class":1155},[425,70426,55151],{"class":701},[425,70428,55154],{"class":431},[425,70430,1159],{"class":701},[425,70432,70433],{"class":435},"'.age'",[425,70435,1165],{"class":701},[425,70437,70438,70440,70443,70445,70447,70449,70451,70454],{"class":427,"line":17601},[425,70439,12220],{"class":1155},[425,70441,70442],{"class":691}," gender",[425,70444,14563],{"class":1155},[425,70446,55151],{"class":701},[425,70448,55154],{"class":431},[425,70450,1159],{"class":701},[425,70452,70453],{"class":435},"'.gender'",[425,70455,1165],{"class":701},[425,70457,70458,70460,70463,70465,70467,70469,70471,70474],{"class":427,"line":17607},[425,70459,12220],{"class":1155},[425,70461,70462],{"class":691}," salary",[425,70464,14563],{"class":1155},[425,70466,55151],{"class":701},[425,70468,55154],{"class":431},[425,70470,1159],{"class":701},[425,70472,70473],{"class":435},"'.salary'",[425,70475,1165],{"class":701},[425,70477,70478,70480,70483,70485,70487,70489,70491,70494],{"class":427,"line":17630},[425,70479,12220],{"class":1155},[425,70481,70482],{"class":691}," city",[425,70484,14563],{"class":1155},[425,70486,55151],{"class":701},[425,70488,55154],{"class":431},[425,70490,1159],{"class":701},[425,70492,70493],{"class":435},"'.city'",[425,70495,1165],{"class":701},[425,70497,70498,70500,70503,70505,70507,70509,70511,70514],{"class":427,"line":17636},[425,70499,12220],{"class":1155},[425,70501,70502],{"class":691}," tbody",[425,70504,14563],{"class":1155},[425,70506,55151],{"class":701},[425,70508,55154],{"class":431},[425,70510,1159],{"class":701},[425,70512,70513],{"class":435},"'tbody'",[425,70515,1165],{"class":701},[425,70517,70518],{"class":427,"line":17659},[425,70519,3400],{"emptyLinePlaceholder":1084},[425,70521,70522],{"class":427,"line":17673},[425,70523,70524],{"class":1216},"    \u002F\u002F 获取所有带有name属性的元素\n",[425,70526,70527,70529,70532,70534,70536,70538,70540,70543],{"class":427,"line":17693},[425,70528,12220],{"class":1155},[425,70530,70531],{"class":691}," items",[425,70533,14563],{"class":1155},[425,70535,55151],{"class":701},[425,70537,56436],{"class":431},[425,70539,1159],{"class":701},[425,70541,70542],{"class":435},"'[name]'",[425,70544,1165],{"class":701},[425,70546,70547],{"class":427,"line":17699},[425,70548,70549],{"class":1216},"    \u002F\u002F 声明一个空的数组\n",[425,70551,70552,70554,70556,70558],{"class":427,"line":17710},[425,70553,12220],{"class":1155},[425,70555,58450],{"class":691},[425,70557,14563],{"class":1155},[425,70559,52593],{"class":701},[425,70561,70562],{"class":427,"line":17733},[425,70563,70564],{"class":1216},"    \u002F\u002F 1.录入模块\n",[425,70566,70567],{"class":427,"line":17755},[425,70568,70569],{"class":1216},"    \u002F\u002F 1.1这是一个表单提交事件\n",[425,70571,70572,70574,70577,70579,70581,70583,70585,70588],{"class":427,"line":17760},[425,70573,12220],{"class":1155},[425,70575,70576],{"class":691}," info",[425,70578,14563],{"class":1155},[425,70580,55151],{"class":701},[425,70582,55154],{"class":431},[425,70584,1159],{"class":701},[425,70586,70587],{"class":435},"'.info'",[425,70589,1165],{"class":701},[425,70591,70592,70595,70597,70599,70602,70604,70606,70608,70610],{"class":427,"line":17766},[425,70593,70594],{"class":701},"    info.",[425,70596,58568],{"class":431},[425,70598,1159],{"class":701},[425,70600,70601],{"class":435},"'submit'",[425,70603,13434],{"class":701},[425,70605,55204],{"class":1155},[425,70607,2664],{"class":701},[425,70609,1232],{"class":6216},[425,70611,13441],{"class":701},[425,70613,70614],{"class":427,"line":17780},[425,70615,70616],{"class":1216},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[425,70618,70619,70622,70625],{"class":427,"line":17793},[425,70620,70621],{"class":701},"      e.",[425,70623,70624],{"class":431},"preventDefault",[425,70626,2976],{"class":701},[425,70628,70629],{"class":427,"line":17798},[425,70630,60767],{"class":1216},[425,70632,70633],{"class":427,"line":17812},[425,70634,3400],{"emptyLinePlaceholder":1084},[425,70636,70637],{"class":427,"line":17817},[425,70638,70639],{"class":1216},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[425,70641,70642],{"class":427,"line":17823},[425,70643,70644],{"class":1216},"      \u002F\u002F 先遍历循环\n",[425,70646,70647,70649,70651,70653,70655,70657,70659,70661,70663,70666,70668,70670,70672],{"class":427,"line":17828},[425,70648,53039],{"class":1155},[425,70650,2664],{"class":701},[425,70652,52602],{"class":1155},[425,70654,10437],{"class":701},[425,70656,1204],{"class":1155},[425,70658,5093],{"class":691},[425,70660,10444],{"class":701},[425,70662,2057],{"class":1155},[425,70664,70665],{"class":701}," items.",[425,70667,52723],{"class":691},[425,70669,4214],{"class":701},[425,70671,3292],{"class":1155},[425,70673,13441],{"class":701},[425,70675,70676,70678,70681,70683,70686],{"class":427,"line":17842},[425,70677,3497],{"class":1155},[425,70679,70680],{"class":701}," (items[i].value ",[425,70682,55241],{"class":1155},[425,70684,70685],{"class":435}," ''",[425,70687,13441],{"class":701},[425,70689,70690,70693,70696,70698,70701],{"class":427,"line":17847},[425,70691,70692],{"class":1155},"          return",[425,70694,70695],{"class":431}," alert",[425,70697,1159],{"class":701},[425,70699,70700],{"class":435},"'输入内容不能为空'",[425,70702,1165],{"class":701},[425,70704,70705],{"class":427,"line":17852},[425,70706,3529],{"class":701},[425,70708,70709],{"class":427,"line":17866},[425,70710,53153],{"class":701},[425,70712,70713],{"class":427,"line":17878},[425,70714,3400],{"emptyLinePlaceholder":1084},[425,70716,70717],{"class":427,"line":17883},[425,70718,70719],{"class":1216},"      \u002F\u002F 创建新的对象\n",[425,70721,70722,70724,70727,70729],{"class":427,"line":17896},[425,70723,58983],{"class":1155},[425,70725,70726],{"class":691}," obj",[425,70728,14563],{"class":1155},[425,70730,16569],{"class":701},[425,70732,70733,70736,70738,70740,70742],{"class":427,"line":17901},[425,70734,70735],{"class":701},"        stuID: arr.",[425,70737,52723],{"class":691},[425,70739,46321],{"class":1155},[425,70741,26109],{"class":691},[425,70743,32221],{"class":701},[425,70745,70746],{"class":427,"line":17906},[425,70747,70748],{"class":701},"        uname: uname.value,\n",[425,70750,70751],{"class":427,"line":17911},[425,70752,70753],{"class":701},"        age: age.value,\n",[425,70755,70756],{"class":427,"line":17924},[425,70757,70758],{"class":701},"        gender: gender.value,\n",[425,70760,70761],{"class":427,"line":17929},[425,70762,70763],{"class":701},"        salary: salary.value,\n",[425,70765,70766],{"class":427,"line":33388},[425,70767,70768],{"class":701},"        city: city.value\n",[425,70770,70771],{"class":427,"line":33394},[425,70772,53153],{"class":701},[425,70774,70775],{"class":427,"line":33400},[425,70776,70777],{"class":1216},"      \u002F\u002F console.log(obj);\n",[425,70779,70780],{"class":427,"line":33406},[425,70781,70782],{"class":1216},"      \u002F\u002F 追加到数组里面\n",[425,70784,70785,70787,70789],{"class":427,"line":33412},[425,70786,58762],{"class":701},[425,70788,52639],{"class":431},[425,70790,70791],{"class":701},"(obj)\n",[425,70793,70794],{"class":427,"line":33423},[425,70795,70796],{"class":1216},"      \u002F\u002F console.log(arr);\n",[425,70798,70799],{"class":427,"line":33429},[425,70800,70801],{"class":1216},"      \u002F\u002F 清空表单  reset重置表单\n",[425,70803,70804,70807,70809,70812],{"class":427,"line":33449},[425,70805,70806],{"class":691},"      this",[425,70808,1706],{"class":701},[425,70810,70811],{"class":431},"reset",[425,70813,2976],{"class":701},[425,70815,70816],{"class":427,"line":33455},[425,70817,70818],{"class":1216},"      \u002F\u002F 调用渲染函数\n",[425,70820,70821,70824],{"class":427,"line":33466},[425,70822,70823],{"class":431},"      render",[425,70825,2976],{"class":701},[425,70827,70828],{"class":427,"line":33472},[425,70829,34216],{"class":701},[425,70831,70832],{"class":427,"line":33478},[425,70833,70834],{"class":1216},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[425,70836,70837,70840,70843],{"class":427,"line":33484},[425,70838,70839],{"class":1155},"    function",[425,70841,70842],{"class":431}," render",[425,70844,11852],{"class":701},[425,70846,70847],{"class":427,"line":33490},[425,70848,70849],{"class":1216},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[425,70851,70852,70855,70857],{"class":427,"line":33496},[425,70853,70854],{"class":701},"      tbody.innerHTML ",[425,70856,1204],{"class":1155},[425,70858,70859],{"class":435}," ''\n",[425,70861,70862],{"class":427,"line":33502},[425,70863,70864],{"class":1216},"      \u002F\u002F 遍历数组\n",[425,70866,70867,70869,70871,70873,70875,70877,70879,70881,70883,70885,70887,70889,70891],{"class":427,"line":33508},[425,70868,53039],{"class":1155},[425,70870,2664],{"class":701},[425,70872,52602],{"class":1155},[425,70874,10437],{"class":701},[425,70876,1204],{"class":1155},[425,70878,5093],{"class":691},[425,70880,10444],{"class":701},[425,70882,2057],{"class":1155},[425,70884,52720],{"class":701},[425,70886,52723],{"class":691},[425,70888,4214],{"class":701},[425,70890,3292],{"class":1155},[425,70892,13441],{"class":701},[425,70894,70895,70897,70900,70902,70904,70907,70909,70912],{"class":427,"line":33528},[425,70896,62025],{"class":1155},[425,70898,70899],{"class":691}," tr",[425,70901,14563],{"class":1155},[425,70903,55151],{"class":701},[425,70905,70906],{"class":431},"createElement",[425,70908,1159],{"class":701},[425,70910,70911],{"class":435},"'tr'",[425,70913,1165],{"class":701},[425,70915,70916,70919,70921],{"class":427,"line":33534},[425,70917,70918],{"class":701},"        tr.innerHTML ",[425,70920,1204],{"class":1155},[425,70922,70923],{"class":435}," `\n",[425,70925,70926,70929,70931,70933,70935,70938,70941],{"class":427,"line":33550},[425,70927,70928],{"class":435},"        \u003Ctd>${",[425,70930,4880],{"class":701},[425,70932,2037],{"class":435},[425,70934,1589],{"class":701},[425,70936,70937],{"class":435},"].",[425,70939,70940],{"class":701},"stuID",[425,70942,70943],{"class":435},"}\u003C\u002Ftd>\n",[425,70945,70946,70949,70951,70953,70955,70957,70960],{"class":427,"line":33556},[425,70947,70948],{"class":435},"          \u003Ctd>${",[425,70950,4880],{"class":701},[425,70952,2037],{"class":435},[425,70954,1589],{"class":701},[425,70956,70937],{"class":435},[425,70958,70959],{"class":701},"uname",[425,70961,70943],{"class":435},[425,70963,70964,70966,70968,70970,70972,70974,70977],{"class":427,"line":33570},[425,70965,70948],{"class":435},[425,70967,4880],{"class":701},[425,70969,2037],{"class":435},[425,70971,1589],{"class":701},[425,70973,70937],{"class":435},[425,70975,70976],{"class":701},"age",[425,70978,70943],{"class":435},[425,70980,70981,70983,70985,70987,70989,70991,70994],{"class":427,"line":33576},[425,70982,70948],{"class":435},[425,70984,4880],{"class":701},[425,70986,2037],{"class":435},[425,70988,1589],{"class":701},[425,70990,70937],{"class":435},[425,70992,70993],{"class":701},"gender",[425,70995,70943],{"class":435},[425,70997,70998,71000,71002,71004,71006,71008,71011],{"class":427,"line":33591},[425,70999,70948],{"class":435},[425,71001,4880],{"class":701},[425,71003,2037],{"class":435},[425,71005,1589],{"class":701},[425,71007,70937],{"class":435},[425,71009,71010],{"class":701},"salary",[425,71012,70943],{"class":435},[425,71014,71015,71017,71019,71021,71023,71025,71028],{"class":427,"line":33597},[425,71016,70948],{"class":435},[425,71018,4880],{"class":701},[425,71020,2037],{"class":435},[425,71022,1589],{"class":701},[425,71024,70937],{"class":435},[425,71026,71027],{"class":701},"city",[425,71029,70943],{"class":435},[425,71031,71032],{"class":427,"line":33606},[425,71033,70348],{"class":435},[425,71035,71036,71039,71041],{"class":427,"line":33612},[425,71037,71038],{"class":435},"            \u003Ca href=\"javascript:\" data-id=${",[425,71040,1589],{"class":701},[425,71042,71043],{"class":435},"}>删除\u003C\u002Fa>\n",[425,71045,71046],{"class":427,"line":33621},[425,71047,71048],{"class":435},"          \u003C\u002Ftd> \n",[425,71050,71051],{"class":427,"line":33627},[425,71052,71053],{"class":435},"          `\n",[425,71055,71056],{"class":427,"line":33633},[425,71057,71058],{"class":1216},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[425,71060,71061,71064,71067],{"class":427,"line":33642},[425,71062,71063],{"class":701},"        tbody.",[425,71065,71066],{"class":431},"appendChild",[425,71068,71069],{"class":701},"(tr)\n",[425,71071,71072],{"class":427,"line":33648},[425,71073,53153],{"class":701},[425,71075,71076],{"class":427,"line":33659},[425,71077,3187],{"class":701},[425,71079,71080],{"class":427,"line":33665},[425,71081,3400],{"emptyLinePlaceholder":1084},[425,71083,71084],{"class":427,"line":33684},[425,71085,71086],{"class":1216},"    \u002F\u002F 3.删除委托\n",[425,71088,71089],{"class":427,"line":33690},[425,71090,71091],{"class":1216},"    \u002F\u002F 3.1 事件委托 tbody\n",[425,71093,71094,71097,71099,71101,71103,71105,71107,71109,71111],{"class":427,"line":33701},[425,71095,71096],{"class":701},"    tbody.",[425,71098,58568],{"class":431},[425,71100,1159],{"class":701},[425,71102,58573],{"class":435},[425,71104,13434],{"class":701},[425,71106,55204],{"class":1155},[425,71108,2664],{"class":701},[425,71110,1232],{"class":6216},[425,71112,13441],{"class":701},[425,71114,71115,71117,71119,71121,71123],{"class":427,"line":33707},[425,71116,55235],{"class":1155},[425,71118,67789],{"class":701},[425,71120,55241],{"class":1155},[425,71122,69011],{"class":435},[425,71124,13441],{"class":701},[425,71126,71127],{"class":427,"line":33727},[425,71128,71129],{"class":1216},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[425,71131,71132],{"class":427,"line":33743},[425,71133,71134],{"class":1216},"        \u002F\u002F console.log(e.target.dataset.id);\n",[425,71136,71137],{"class":427,"line":33749},[425,71138,71139],{"class":1216},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[425,71141,71142,71145,71147,71150,71152],{"class":427,"line":33763},[425,71143,71144],{"class":701},"        arr.",[425,71146,58765],{"class":431},[425,71148,71149],{"class":701},"(e.target.dataset.id, ",[425,71151,1367],{"class":691},[425,71153,1165],{"class":701},[425,71155,71156],{"class":427,"line":33769},[425,71157,71158],{"class":1216},"        \u002F\u002F 重新渲染一次\n",[425,71160,71161,71164],{"class":427,"line":33775},[425,71162,71163],{"class":431},"        render",[425,71165,2976],{"class":701},[425,71167,71168],{"class":427,"line":33786},[425,71169,53153],{"class":701},[425,71171,71172],{"class":427,"line":33792},[425,71173,34216],{"class":701},[425,71175,71176,71178,71180],{"class":427,"line":33798},[425,71177,53172],{"class":701},[425,71179,52568],{"class":52055},[425,71181,52062],{"class":701},[425,71183,71184],{"class":427,"line":33808},[425,71185,3400],{"emptyLinePlaceholder":1084},[425,71187,71188,71190,71192],{"class":427,"line":33814},[425,71189,52540],{"class":701},[425,71191,52555],{"class":52055},[425,71193,52062],{"class":701},[425,71195,71196],{"class":427,"line":33825},[425,71197,3400],{"emptyLinePlaceholder":1084},[425,71199,71200,71202,71204],{"class":427,"line":33831},[425,71201,52540],{"class":701},[425,71203,51390],{"class":52055},[425,71205,52062],{"class":701},[19,71207,71208],{},"样式：",[416,71210,71214],{"className":71211,"code":71212,"language":71213,"meta":395,"style":395},"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",[422,71215,71216,71221,71231,71240,71244,71248,71253,71263,71268,71272,71277,71287,71292,71301,71305,71309,71314,71319,71329,71339,71344,71348,71353,71362,71372,71377,71387,71397,71401,71406,71414,71418,71423,71428,71433,71441,71450,71454,71459,71468,71472,71477,71486,71490,71495,71504,71513,71521,71525,71530,71539,71549,71558,71568,71574,71583,71593,71603,71607,71612,71621,71629,71639,71647,71656,71665,71675,71683,71687,71692,71701],{"__ignoreMap":395},[425,71217,71218],{"class":427,"line":428},[425,71219,71220],{"class":701},"* {\n",[425,71222,71223,71226,71228],{"class":427,"line":698},[425,71224,71225],{"class":52055},"  margin",[425,71227,52192],{"class":701},[425,71229,71230],{"class":435},"0;\n",[425,71232,71233,71236,71238],{"class":427,"line":710},[425,71234,71235],{"class":435},"  padding",[425,71237,52192],{"class":701},[425,71239,71230],{"class":435},[425,71241,71242],{"class":427,"line":721},[425,71243,2578],{"class":701},[425,71245,71246],{"class":427,"line":735},[425,71247,3400],{"emptyLinePlaceholder":1084},[425,71249,71250],{"class":427,"line":743},[425,71251,71252],{"class":435},"a {\n",[425,71254,71255,71258,71260],{"class":427,"line":751},[425,71256,71257],{"class":52055},"  text-decoration",[425,71259,52192],{"class":701},[425,71261,71262],{"class":435},"none;\n",[425,71264,71265],{"class":427,"line":759},[425,71266,71267],{"class":435},"  color:#721c24;\n",[425,71269,71270],{"class":427,"line":770},[425,71271,2578],{"class":701},[425,71273,71274],{"class":427,"line":780},[425,71275,71276],{"class":435},"h1 {\n",[425,71278,71279,71282,71284],{"class":427,"line":790},[425,71280,71281],{"class":52055},"  text-align",[425,71283,52192],{"class":701},[425,71285,71286],{"class":435},"center;\n",[425,71288,71289],{"class":427,"line":805},[425,71290,71291],{"class":435},"  color:#333;\n",[425,71293,71294,71296,71298],{"class":427,"line":818},[425,71295,71225],{"class":52055},[425,71297,52192],{"class":701},[425,71299,71300],{"class":435},"20px 0;\n",[425,71302,71303],{"class":427,"line":831},[425,71304,3674],{"class":701},[425,71306,71307],{"class":427,"line":841},[425,71308,2578],{"class":701},[425,71310,71311],{"class":427,"line":852},[425,71312,71313],{"class":435},"table {\n",[425,71315,71316],{"class":427,"line":862},[425,71317,71318],{"class":435},"  margin:0 auto;\n",[425,71320,71321,71324,71326],{"class":427,"line":878},[425,71322,71323],{"class":52055},"  width",[425,71325,52192],{"class":701},[425,71327,71328],{"class":435},"800px;\n",[425,71330,71331,71334,71336],{"class":427,"line":914},[425,71332,71333],{"class":52055},"  border-collapse",[425,71335,52192],{"class":701},[425,71337,71338],{"class":435},"collapse;\n",[425,71340,71341],{"class":427,"line":943},[425,71342,71343],{"class":435},"  color:#004085;\n",[425,71345,71346],{"class":427,"line":956},[425,71347,2578],{"class":701},[425,71349,71350],{"class":427,"line":964},[425,71351,71352],{"class":435},"th {\n",[425,71354,71355,71357,71359],{"class":427,"line":2733},[425,71356,71235],{"class":52055},[425,71358,52192],{"class":701},[425,71360,71361],{"class":435},"10px;\n",[425,71363,71364,71367,71369],{"class":427,"line":2750},[425,71365,71366],{"class":52055},"  background",[425,71368,52192],{"class":701},[425,71370,71371],{"class":1216},"#cfe5ff;\n",[425,71373,71374],{"class":427,"line":2755},[425,71375,71376],{"class":701},"  \n",[425,71378,71379,71382,71384],{"class":427,"line":2760},[425,71380,71381],{"class":52055},"  font-size",[425,71383,52192],{"class":701},[425,71385,71386],{"class":435},"20px;\n",[425,71388,71389,71392,71394],{"class":427,"line":2765},[425,71390,71391],{"class":52055},"  font-weight",[425,71393,52192],{"class":701},[425,71395,71396],{"class":435},"400;\n",[425,71398,71399],{"class":427,"line":2779},[425,71400,2578],{"class":701},[425,71402,71403],{"class":427,"line":2784},[425,71404,71405],{"class":435},"td,th {\n",[425,71407,71408,71411],{"class":427,"line":3577},[425,71409,71410],{"class":435},"  border:1px solid",[425,71412,71413],{"class":1216}," #b8daff;\n",[425,71415,71416],{"class":427,"line":3591},[425,71417,2578],{"class":701},[425,71419,71420],{"class":427,"line":3599},[425,71421,71422],{"class":435},"td {\n",[425,71424,71425],{"class":427,"line":3604},[425,71426,71427],{"class":435},"  padding:10px;\n",[425,71429,71430],{"class":427,"line":3610},[425,71431,71432],{"class":435},"  color:#666;\n",[425,71434,71435,71437,71439],{"class":427,"line":3616},[425,71436,71281],{"class":52055},[425,71438,52192],{"class":701},[425,71440,71286],{"class":435},[425,71442,71443,71445,71447],{"class":427,"line":3621},[425,71444,71381],{"class":52055},[425,71446,52192],{"class":701},[425,71448,71449],{"class":435},"16px;\n",[425,71451,71452],{"class":427,"line":8948},[425,71453,2578],{"class":701},[425,71455,71456],{"class":427,"line":8972},[425,71457,71458],{"class":435},"tbody tr {\n",[425,71460,71461,71463,71465],{"class":427,"line":8977},[425,71462,71366],{"class":52055},[425,71464,52192],{"class":701},[425,71466,71467],{"class":1216},"#fff;\n",[425,71469,71470],{"class":427,"line":8983},[425,71471,2578],{"class":701},[425,71473,71474],{"class":427,"line":9010},[425,71475,71476],{"class":435},"tbody tr:hover {\n",[425,71478,71479,71481,71483],{"class":427,"line":9015},[425,71480,71366],{"class":52055},[425,71482,52192],{"class":701},[425,71484,71485],{"class":1216},"#e1ecf8;\n",[425,71487,71488],{"class":427,"line":9021},[425,71489,2578],{"class":701},[425,71491,71492],{"class":427,"line":9033},[425,71493,71494],{"class":435},".info {\n",[425,71496,71497,71499,71501],{"class":427,"line":9045},[425,71498,71323],{"class":52055},[425,71500,52192],{"class":701},[425,71502,71503],{"class":435},"900px;\n",[425,71505,71506,71508,71510],{"class":427,"line":9057},[425,71507,71225],{"class":52055},[425,71509,52192],{"class":701},[425,71511,71512],{"class":435},"50px auto;\n",[425,71514,71515,71517,71519],{"class":427,"line":10715},[425,71516,71281],{"class":52055},[425,71518,52192],{"class":701},[425,71520,71286],{"class":435},[425,71522,71523],{"class":427,"line":10740},[425,71524,2578],{"class":701},[425,71526,71527],{"class":427,"line":10763},[425,71528,71529],{"class":435},".info  input, .info select {\n",[425,71531,71532,71534,71536],{"class":427,"line":10787},[425,71533,71323],{"class":52055},[425,71535,52192],{"class":701},[425,71537,71538],{"class":435},"80px;\n",[425,71540,71541,71544,71546],{"class":427,"line":10792},[425,71542,71543],{"class":52055},"  height",[425,71545,52192],{"class":701},[425,71547,71548],{"class":435},"27px;\n",[425,71550,71551,71554,71556],{"class":427,"line":10797},[425,71552,71553],{"class":52055},"  outline",[425,71555,52192],{"class":701},[425,71557,71262],{"class":435},[425,71559,71560,71563,71565],{"class":427,"line":10802},[425,71561,71562],{"class":52055},"  border-radius",[425,71564,52192],{"class":701},[425,71566,71567],{"class":435},"5px;\n",[425,71569,71570,71572],{"class":427,"line":10811},[425,71571,71410],{"class":435},[425,71573,71413],{"class":1216},[425,71575,71576,71579,71581],{"class":427,"line":10816},[425,71577,71578],{"class":52055},"  padding-left",[425,71580,52192],{"class":701},[425,71582,71567],{"class":435},[425,71584,71585,71588,71590],{"class":427,"line":10822},[425,71586,71587],{"class":52055},"  box-sizing",[425,71589,52192],{"class":701},[425,71591,71592],{"class":435},"border-box;\n",[425,71594,71595,71598,71600],{"class":427,"line":10843},[425,71596,71597],{"class":52055},"  margin-right",[425,71599,52192],{"class":701},[425,71601,71602],{"class":435},"15px;\n",[425,71604,71605],{"class":427,"line":10849},[425,71606,2578],{"class":701},[425,71608,71609],{"class":427,"line":10863},[425,71610,71611],{"class":435},".info button {\n",[425,71613,71614,71616,71618],{"class":427,"line":10869},[425,71615,71323],{"class":52055},[425,71617,52192],{"class":701},[425,71619,71620],{"class":435},"60px;\n",[425,71622,71623,71625,71627],{"class":427,"line":10896},[425,71624,71543],{"class":52055},[425,71626,52192],{"class":701},[425,71628,71548],{"class":435},[425,71630,71631,71634,71636],{"class":427,"line":10905},[425,71632,71633],{"class":52055},"  background-color",[425,71635,52192],{"class":701},[425,71637,71638],{"class":1216},"#004085;\n",[425,71640,71641,71643,71645],{"class":427,"line":10911},[425,71642,71553],{"class":52055},[425,71644,52192],{"class":701},[425,71646,71262],{"class":435},[425,71648,71649,71652,71654],{"class":427,"line":10919},[425,71650,71651],{"class":52055},"  border",[425,71653,52192],{"class":701},[425,71655,71230],{"class":435},[425,71657,71658,71661,71663],{"class":427,"line":10924},[425,71659,71660],{"class":52055},"  color",[425,71662,52192],{"class":701},[425,71664,71467],{"class":1216},[425,71666,71667,71670,71672],{"class":427,"line":17601},[425,71668,71669],{"class":52055},"  cursor",[425,71671,52192],{"class":701},[425,71673,71674],{"class":435},"pointer;\n",[425,71676,71677,71679,71681],{"class":427,"line":17607},[425,71678,71562],{"class":52055},[425,71680,52192],{"class":701},[425,71682,71567],{"class":435},[425,71684,71685],{"class":427,"line":17630},[425,71686,2578],{"class":701},[425,71688,71689],{"class":427,"line":17636},[425,71690,71691],{"class":435},".info .age {\n",[425,71693,71694,71696,71698],{"class":427,"line":17659},[425,71695,71323],{"class":52055},[425,71697,52192],{"class":701},[425,71699,71700],{"class":435},"50px;\n",[425,71702,71703],{"class":427,"line":17673},[425,71704,2578],{"class":701},[19,71706,71707],{},"思路：",[19,71709,71710],{},[393,71711],{"alt":395,"src":71712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,71714,71715],{},[393,71716],{"alt":395,"src":71717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,71719,71720],{},[393,71721],{"alt":395,"src":71722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[14,71724,71726],{"id":71725},"_3315-重绘回流","3.3.15 重绘回流",[19,71728,71729],{},[393,71730],{"alt":395,"src":71731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,71733,71734],{},[393,71735],{"alt":395,"src":71736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,71738,71739],{},[393,71740],{"alt":395,"src":71741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[1099,71743,71745],{"id":71744},"_34-bom","3.4 BOM",[19,71747,71748],{},[393,71749],{"alt":395,"src":71750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,71752,71753],{},"平时写的document省略了window而已，实际上是window.document",[19,71755,71756],{},"函数也是这样，调用的时候实际为window.fn()",[19,71758,71759],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,71761,71762],{},"window大部分情况下可以省略",[14,71764,71766],{"id":71765},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,71768,71769],{},"只执行一次",[19,71771,71772],{},[393,71773],{"alt":395,"src":71774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,71776,71777],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,71779,71780],{},[393,71781],{"alt":395,"src":71782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[14,71784,71786],{"id":71785},"_342-js执行机制","3.4.2 JS执行机制",[19,71788,71789],{},[393,71790],{"alt":395,"src":71791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,71793,71794],{},"两个的结果都是1111 3333 2222",[19,71796,71797],{},[393,71798],{"alt":395,"src":71799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,71801,71802],{},[393,71803],{"alt":395,"src":71804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,71806,71807],{},[393,71808],{"alt":395,"src":71809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,71811,71812],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,71814,71815],{},"工作流程：",[19,71817,71818],{},[393,71819],{"alt":395,"src":71820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,71822,71823],{},[393,71824],{"alt":395,"src":71825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,71827,71828],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,71830,71831],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[14,71833,71835],{"id":71834},"_343-location对象","3.4.3 location对象",[19,71837,71838],{},"location对象属于window这个全局对象下的，可以 省略window",[19,71840,71841],{},[393,71842],{"alt":395,"src":71843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,71845,71846],{},"href可以跳转页面",[972,71848,71849],{},[450,71850,71851],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,71853,71854],{},"search得到提交信息之后网站后边的地址",[19,71856,71857],{},[393,71858],{"alt":395,"src":71859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,71861,71862],{},[393,71863],{"alt":395,"src":71864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[972,71866,71867],{"start":698},[450,71868,71869],{},"hash:这个获取单页面应用#后边的地址",[19,71871,71872],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,71874,71875],{},[393,71876],{"alt":395,"src":71877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[416,71879,71881],{"className":53822,"code":71880,"language":53824,"meta":395,"style":395},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[422,71882,71883,71903,71923],{"__ignoreMap":395},[425,71884,71885,71887,71889,71891,71893,71896,71899,71901],{"class":427,"line":428},[425,71886,52899],{"class":701},[425,71888,22],{"class":52055},[425,71890,61812],{"class":431},[425,71892,1204],{"class":701},[425,71894,71895],{"class":435},"\"#\u002Fmy\"",[425,71897,71898],{"class":701},">我的\u003C\u002F",[425,71900,22],{"class":52055},[425,71902,52062],{"class":701},[425,71904,71905,71907,71909,71911,71913,71916,71919,71921],{"class":427,"line":698},[425,71906,52899],{"class":701},[425,71908,22],{"class":52055},[425,71910,61812],{"class":431},[425,71912,1204],{"class":701},[425,71914,71915],{"class":435},"\"#\u002Ffriend\"",[425,71917,71918],{"class":701},">关注\u003C\u002F",[425,71920,22],{"class":52055},[425,71922,52062],{"class":701},[425,71924,71925,71927,71929,71931,71933,71936,71939,71941],{"class":427,"line":710},[425,71926,52899],{"class":701},[425,71928,22],{"class":52055},[425,71930,61812],{"class":431},[425,71932,1204],{"class":701},[425,71934,71935],{"class":435},"\"#\u002Fdownload\"",[425,71937,71938],{"class":701},">下载\u003C\u002F",[425,71940,22],{"class":52055},[425,71942,52062],{"class":701},[19,71944,71945],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[972,71947,71948],{"start":710},[450,71949,71950,71951,71953,71954,71956],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54471,71952],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54471,71955],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[14,71958,71960],{"id":71959},"_345-navigator对象","3.4.5 navigator对象",[19,71962,71963],{},[393,71964],{"alt":395,"src":71965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[416,71967,71971],{"className":71968,"code":71969,"language":71970,"meta":395,"style":395},"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",[422,71972,71973,71978,71989,72001,72006,72057,72098,72103,72116,72128,72133],{"__ignoreMap":395},[425,71974,71975],{"class":427,"line":428},[425,71976,71977],{"class":1216},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[425,71979,71980,71982,71984,71986],{"class":427,"line":698},[425,71981,1376],{"class":1155},[425,71983,1159],{"class":701},[425,71985,55204],{"class":1155},[425,71987,71988],{"class":701}," () { \n",[425,71990,71991,71993,71996,71998],{"class":427,"line":710},[425,71992,7792],{"class":1155},[425,71994,71995],{"class":691}," userAgent",[425,71997,14563],{"class":1155},[425,71999,72000],{"class":701}," navigator.userAgent \n",[425,72002,72003],{"class":427,"line":721},[425,72004,72005],{"class":1216},"\u002F\u002F 验证是否为Android或iPhone \n",[425,72007,72008,72010,72013,72015,72018,72021,72023,72025,72028,72030,72033,72037,72039,72041,72043,72046,72048,72050,72052,72054],{"class":427,"line":735},[425,72009,7792],{"class":1155},[425,72011,72012],{"class":691}," android",[425,72014,14563],{"class":1155},[425,72016,72017],{"class":701}," userAgent.",[425,72019,72020],{"class":431},"match",[425,72022,1159],{"class":701},[425,72024,1732],{"class":435},[425,72026,72027],{"class":48732},"(Android);",[425,72029,2133],{"class":1155},[425,72031,72032],{"class":691},"[\\s",[425,72034,72036],{"class":72035},"snhLl","\\\u002F",[425,72038,2087],{"class":691},[425,72040,1629],{"class":1155},[425,72042,1159],{"class":48732},[425,72044,72045],{"class":691},"[\\d.]",[425,72047,1629],{"class":1155},[425,72049,895],{"class":48732},[425,72051,2133],{"class":1155},[425,72053,1732],{"class":435},[425,72055,72056],{"class":701},") \n",[425,72058,72059,72061,72064,72066,72068,72070,72072,72074,72077,72080,72083,72085,72087,72090,72092,72094,72096],{"class":427,"line":743},[425,72060,7792],{"class":1155},[425,72062,72063],{"class":691}," iphone",[425,72065,14563],{"class":1155},[425,72067,72017],{"class":701},[425,72069,72020],{"class":431},[425,72071,1159],{"class":701},[425,72073,1732],{"class":435},[425,72075,72076],{"class":48732},"(iPhone",[425,72078,72079],{"class":691},"\\s",[425,72081,72082],{"class":48732},"OS)",[425,72084,72079],{"class":691},[425,72086,1159],{"class":48732},[425,72088,72089],{"class":691},"[\\d_]",[425,72091,1629],{"class":1155},[425,72093,895],{"class":48732},[425,72095,1732],{"class":435},[425,72097,72056],{"class":701},[425,72099,72100],{"class":427,"line":751},[425,72101,72102],{"class":1216},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[425,72104,72105,72107,72110,72113],{"class":427,"line":759},[425,72106,2544],{"class":1155},[425,72108,72109],{"class":701}," (android ",[425,72111,72112],{"class":1155},"||",[425,72114,72115],{"class":701}," iphone) { \n",[425,72117,72118,72121,72123,72126],{"class":427,"line":770},[425,72119,72120],{"class":701},"location.href ",[425,72122,1204],{"class":1155},[425,72124,72125],{"class":435}," 'http:\u002F\u002Fm.itcast.cn'",[425,72127,3674],{"class":701},[425,72129,72130],{"class":427,"line":780},[425,72131,72132],{"class":701},"} \n",[425,72134,72135],{"class":427,"line":790},[425,72136,72137],{"class":701},"})()\n",[14,72139,72141],{"id":72140},"_346-histroy对象","3.4.6 histroy对象",[19,72143,72144],{},[393,72145],{"alt":395,"src":72146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,72148,72149],{},"浏览器地址的前进与后退!!!",[19,72151,72152],{},"history.back() 等效于 history.go(-1)",[19,72154,72155],{},"history.forward() 等效于 history.go(1)",[1099,72157,72159],{"id":72158},"_35-本地存储","3.5 本地存储",[972,72161,72162,72165,72168],{},[450,72163,72164],{},"数据存储在用户浏览器中",[450,72166,72167],{},"设置、读取方便、甚至页面刷新不丢失数据",[450,72169,72170],{},"容量较大，sessionStorage和localStorage约 5M 左右",[14,72172,72174],{"id":72173},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,72176,72177],{},"只能存储字符串",[19,72179,72180],{},[393,72181],{"alt":395,"src":72182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,72184,72185],{},[393,72186],{"alt":395,"src":72187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,72189,72190],{},"键值对要加引号,不然就会当变量来看了",[19,72192,72193],{},"localStorage.setItem('uname', 'pink')",[19,72195,72196],{},"刷新之后信息不再丢失",[19,72198,72199],{},"操作key,value会跟着变",[19,72201,72202],{},"删除只删除键就可以,即名字",[19,72204,72193],{},[19,72206,72207],{},"改:",[19,72209,72210],{},"localStorage.setItem('uname','red')",[19,72212,72213],{},"有这个键就是改,没有这个键就是改",[19,72215,72216],{},[393,72217],{"alt":395,"src":72218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,72220,72221],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,72223,72224],{},[393,72225],{"alt":395,"src":72226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,72228,72229],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[14,72231,72233],{"id":72232},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,72235,72236],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,72238,72239],{},"特性:",[972,72241,72242,72245,72248,72251],{},[450,72243,72244],{},"生命周期为关闭浏览器窗口",[450,72246,72247],{},"在同一个窗口(页面)下数据可以共享",[450,72249,72250],{},"以键值对的形式存储使用",[450,72252,72253],{},"用法跟localStorage 基本相同",[14,72255,72257],{"id":72256},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,72259,72260],{},"本地只能存储字符串,无法直接存储复杂数据类型",[416,72262,72264],{"className":53822,"code":72263,"language":53824,"meta":395,"style":395},"\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",[422,72265,72266,72274,72279,72284,72289,72294,72298,72303,72308],{"__ignoreMap":395},[425,72267,72268,72270,72272],{"class":427,"line":428},[425,72269,2057],{"class":701},[425,72271,52568],{"class":52055},[425,72273,52062],{"class":701},[425,72275,72276],{"class":427,"line":698},[425,72277,72278],{"class":701},"    const obj = {\n",[425,72280,72281],{"class":427,"line":710},[425,72282,72283],{"class":701},"      uname: 'pink老师',\n",[425,72285,72286],{"class":427,"line":721},[425,72287,72288],{"class":701},"      age: 18,\n",[425,72290,72291],{"class":427,"line":735},[425,72292,72293],{"class":701},"      gender: '女'\n",[425,72295,72296],{"class":427,"line":743},[425,72297,3187],{"class":701},[425,72299,72300],{"class":427,"line":751},[425,72301,72302],{"class":701},"    \u002F\u002F 存储复杂数据类型\n",[425,72304,72305],{"class":427,"line":759},[425,72306,72307],{"class":701},"    localStorage.setItem('obj', obj)\n",[425,72309,72310,72312,72314],{"class":427,"line":770},[425,72311,53172],{"class":701},[425,72313,52568],{"class":52055},[425,72315,52062],{"class":701},[19,72317,72318],{},[393,72319],{"alt":395,"src":72320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,72322,72323],{},"如果获取一下数据:",[19,72325,72326],{},"log(localStorage.getItem('obj'))",[19,72328,72329],{},[393,72330],{"alt":395,"src":72331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,72333,72334],{},"发现直接存对象是使用不了的!!!",[22995,72336,72338],{"id":72337},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,72340,72341],{},[393,72342],{"alt":395,"src":72343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[416,72345,72347],{"className":51388,"code":72346,"language":51390,"meta":395,"style":395},"\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",[422,72348,72349,72357,72367,72377,72386,72394,72398,72402,72428,72447,72455,72459,72464,72469],{"__ignoreMap":395},[425,72350,72351,72353,72355],{"class":427,"line":428},[425,72352,2057],{"class":701},[425,72354,52568],{"class":52055},[425,72356,52062],{"class":701},[425,72358,72359,72361,72363,72365],{"class":427,"line":698},[425,72360,12220],{"class":1155},[425,72362,70726],{"class":691},[425,72364,14563],{"class":1155},[425,72366,16569],{"class":701},[425,72368,72369,72372,72375],{"class":427,"line":710},[425,72370,72371],{"class":701},"      uname: ",[425,72373,72374],{"class":435},"'pink老师'",[425,72376,32221],{"class":701},[425,72378,72379,72382,72384],{"class":427,"line":721},[425,72380,72381],{"class":701},"      age: ",[425,72383,1798],{"class":691},[425,72385,32221],{"class":701},[425,72387,72388,72391],{"class":427,"line":735},[425,72389,72390],{"class":701},"      gender: ",[425,72392,72393],{"class":435},"'女'\n",[425,72395,72396],{"class":427,"line":743},[425,72397,3187],{"class":701},[425,72399,72400],{"class":427,"line":751},[425,72401,72302],{"class":1216},[425,72403,72404,72407,72410,72412,72415,72417,72420,72422,72425],{"class":427,"line":759},[425,72405,72406],{"class":701},"  localStorage.",[425,72408,72409],{"class":431},"setItem",[425,72411,1159],{"class":701},[425,72413,72414],{"class":435},"'obj'",[425,72416,13434],{"class":701},[425,72418,72419],{"class":691},"JSON",[425,72421,1706],{"class":701},[425,72423,72424],{"class":431},"stringify",[425,72426,72427],{"class":701},"(obj))\n",[425,72429,72430,72433,72435,72438,72441,72443,72445],{"class":427,"line":770},[425,72431,72432],{"class":701},"  console.",[425,72434,59002],{"class":431},[425,72436,72437],{"class":701},"(localStorage.",[425,72439,72440],{"class":431},"getItem",[425,72442,1159],{"class":701},[425,72444,72414],{"class":435},[425,72446,31252],{"class":701},[425,72448,72449,72451,72453],{"class":427,"line":780},[425,72450,53172],{"class":701},[425,72452,52568],{"class":52055},[425,72454,52062],{"class":701},[425,72456,72457],{"class":427,"line":790},[425,72458,71376],{"class":701},[425,72460,72461],{"class":427,"line":805},[425,72462,72463],{"class":701},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[425,72465,72466],{"class":427,"line":818},[425,72467,72468],{"class":701},"  类型是字符串的\n",[425,72470,72471],{"class":427,"line":831},[425,72472,72473],{"class":701},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22995,72475,72477],{"id":72476},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,72479,72480],{},[393,72481],{"alt":395,"src":72482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,72484,72485],{},[393,72486],{"alt":395,"src":72487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[416,72489,72491],{"className":53822,"code":72490,"language":53824,"meta":395,"style":395},"  \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",[422,72492,72493,72501,72505,72509,72513,72517,72521,72526,72531,72536,72541,72546,72551,72556,72561],{"__ignoreMap":395},[425,72494,72495,72497,72499],{"class":427,"line":428},[425,72496,52899],{"class":701},[425,72498,52568],{"class":52055},[425,72500,52062],{"class":701},[425,72502,72503],{"class":427,"line":698},[425,72504,72278],{"class":701},[425,72506,72507],{"class":427,"line":710},[425,72508,72283],{"class":701},[425,72510,72511],{"class":427,"line":721},[425,72512,72288],{"class":701},[425,72514,72515],{"class":427,"line":735},[425,72516,72293],{"class":701},[425,72518,72519],{"class":427,"line":743},[425,72520,3187],{"class":701},[425,72522,72523],{"class":427,"line":751},[425,72524,72525],{"class":701},"    \u002F\u002F 1.存储复杂数据类型\n",[425,72527,72528],{"class":427,"line":759},[425,72529,72530],{"class":701},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[425,72532,72533],{"class":427,"line":770},[425,72534,72535],{"class":701},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[425,72537,72538],{"class":427,"line":780},[425,72539,72540],{"class":701},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[425,72542,72543],{"class":427,"line":790},[425,72544,72545],{"class":701},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[425,72547,72548],{"class":427,"line":805},[425,72549,72550],{"class":701},"    \u002F\u002F 取\n",[425,72552,72553],{"class":427,"line":818},[425,72554,72555],{"class":701},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[425,72557,72558],{"class":427,"line":831},[425,72559,72560],{"class":701},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[425,72562,72563,72565,72567],{"class":427,"line":841},[425,72564,53172],{"class":701},[425,72566,52568],{"class":52055},[425,72568,52062],{"class":701},[19,72570,72571],{},[393,72572],{"alt":395,"src":72573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[14,72575,72577],{"id":72576},"_356-数组map方法","3.5.6 数组map方法",[19,72579,72580],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,72582,72583],{},[393,72584],{"alt":395,"src":72585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,72587,72588],{},[393,72589],{"alt":395,"src":72590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,72592,72593,72596],{},[400,72594,72595],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,72598,72599],{},"map有返回值，但是forEach没有返回值",[19,72601,72602],{},"map是个方法。用的时候要加 ()",[19,72604,72605],{},"map返回的是一个数组",[14,72607,72609],{"id":72608},"_357-数组中join方法","3.5.7 数组中join方法",[19,72611,72612],{},[393,72613],{"alt":395,"src":72614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,72616,72617],{},"类似于python中拼接字符串一样！",[972,72619,72620,72623,72626],{},[450,72621,72622],{},"小括号为空则逗号分开",[450,72624,72625],{},"小括号为空字符串 ''，则元素之间没有分隔符",[450,72627,72628],{},"小括号用啥符号就用进行分割",[14,72630,72632],{"id":72631},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[972,72634,72635,72638,72641,72644,72647],{},[450,72636,72637],{},"记住本地时间获取快速方式：new Date().toDateString()",[450,72639,72640],{},"尽量减少DOM操作，用好map+join的渲染方式",[450,72642,72643],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[450,72645,72646],{},"return可以实现函数的结束",[450,72648,72649],{},"禁止跳转是 preventDefault() 不要忘记",[416,72651,72653],{"className":51388,"code":72652,"language":51390,"meta":395,"style":395},"\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",[422,72654,72655,72665,72679,72683,72691,72705,72725,72737,72745,72751,72761,72771,72775,72779,72785,72795,72807,72811,72815,72822,72834,72848,72858,72862,72866,72873,72880,72887,72899,72911,72921,72933,72937,72941,72948,72955,72967,72979,72989,73001,73031,73035,73039,73046,73058,73070,73094,73104,73114,73118,73122,73130,73141,73153,73165,73177,73194,73206,73218,73222,73226,73233,73245,73257,73269,73280,73298,73311,73323,73347,73358,73362,73366,73374,73384,73388,73392,73398,73410,73421,73431,73435,73439,73445,73467,73471,73475,73481,73487,73499,73509,73521,73551,73564,73581,73585,73589,73600,73622,73632,73636,73640,73653,73663,73675,73687,73699,73711,73721,73731,73741,73752,73765,73769,73777,73785,73789,73797,73810,73830,73863,73896,73929,73955,73973,73991,73999,74025,74043,74061,74079,74097,74115,74123,74131,74149,74157,74186,74194,74202,74210,74223,74235,74247,74259,74271,74283,74296,74308,74316,74324,74332,74337,74342,74346,74350,74354,74358,74362,74366,74371,74376,74381,74386,74394,74402,74410,74415,74420,74425,74430,74435,74440,74445,74450,74455,74460,74465,74470,74475,74480,74484,74489,74494,74504,74513,74517,74522,74531,74547,74589,74629,74668,74733,74741,74745,74750,74768,74776,74781,74786,74816,74822,74827,74840,74852,74864,74876,74888,74900,74912,74916,74926,74930,74935,74940,74944,74953,74957,74962,74967,74986,74991,75011,75015,75020,75024,75029,75047,75065,75083,75102,75121,75140,75145,75151,75172,75178,75187,75193,75199,75205,75232,75245,75250,75260,75266,75272,75278,75284,75289,75295,75301,75307,75313,75346,75351,75356,75361,75366,75372,75378,75384,75395,75400,75406,75413,75427,75433,75457,75462,75467,75473,75479,75500,75506,75519,75525,75531,75537,75543,75548,75554,75560,75566,75584,75598,75604,75612,75618,75640,75645,75650,75655,75660,75665,75674,75683,75688],{"__ignoreMap":395},[425,72656,72657,72659,72661,72663],{"class":427,"line":428},[425,72658,52052],{"class":701},[425,72660,52056],{"class":52055},[425,72662,52059],{"class":431},[425,72664,52062],{"class":701},[425,72666,72667,72669,72671,72673,72675,72677],{"class":427,"line":698},[425,72668,2057],{"class":701},[425,72670,51390],{"class":52055},[425,72672,52071],{"class":431},[425,72674,1204],{"class":701},[425,72676,52076],{"class":435},[425,72678,52062],{"class":701},[425,72680,72681],{"class":427,"line":710},[425,72682,3400],{"emptyLinePlaceholder":1084},[425,72684,72685,72687,72689],{"class":427,"line":721},[425,72686,2057],{"class":701},[425,72688,52089],{"class":52055},[425,72690,52062],{"class":701},[425,72692,72693,72695,72697,72699,72701,72703],{"class":427,"line":735},[425,72694,52899],{"class":701},[425,72696,52099],{"class":52055},[425,72698,52102],{"class":431},[425,72700,1204],{"class":701},[425,72702,52107],{"class":435},[425,72704,52062],{"class":701},[425,72706,72707,72709,72711,72713,72715,72717,72719,72721,72723],{"class":427,"line":743},[425,72708,52899],{"class":701},[425,72710,52099],{"class":52055},[425,72712,15917],{"class":431},[425,72714,1204],{"class":701},[425,72716,52146],{"class":435},[425,72718,52126],{"class":431},[425,72720,1204],{"class":701},[425,72722,52153],{"class":435},[425,72724,52062],{"class":701},[425,72726,72727,72729,72731,72733,72735],{"class":427,"line":751},[425,72728,52899],{"class":701},[425,72730,52162],{"class":52055},[425,72732,52165],{"class":701},[425,72734,52162],{"class":52055},[425,72736,52062],{"class":701},[425,72738,72739,72741,72743],{"class":427,"line":759},[425,72740,52899],{"class":701},[425,72742,1074],{"class":52055},[425,72744,52062],{"class":701},[425,72746,72747,72749],{"class":427,"line":770},[425,72748,7403],{"class":52055},[425,72750,16569],{"class":701},[425,72752,72753,72755,72757,72759],{"class":427,"line":780},[425,72754,55450],{"class":691},[425,72756,52192],{"class":701},[425,72758,1341],{"class":691},[425,72760,2307],{"class":701},[425,72762,72763,72765,72767,72769],{"class":427,"line":790},[425,72764,55461],{"class":691},[425,72766,52192],{"class":701},[425,72768,1341],{"class":691},[425,72770,2307],{"class":701},[425,72772,72773],{"class":427,"line":805},[425,72774,3187],{"class":701},[425,72776,72777],{"class":427,"line":818},[425,72778,3400],{"emptyLinePlaceholder":1084},[425,72780,72781,72783],{"class":427,"line":831},[425,72782,58034],{"class":52055},[425,72784,16569],{"class":701},[425,72786,72787,72789,72791,72793],{"class":427,"line":841},[425,72788,58041],{"class":691},[425,72790,52192],{"class":701},[425,72792,52347],{"class":691},[425,72794,2307],{"class":701},[425,72796,72797,72799,72801,72803,72805],{"class":427,"line":852},[425,72798,62832],{"class":691},[425,72800,52192],{"class":701},[425,72802,1848],{"class":691},[425,72804,52247],{"class":1155},[425,72806,2307],{"class":701},[425,72808,72809],{"class":427,"line":862},[425,72810,3187],{"class":701},[425,72812,72813],{"class":427,"line":878},[425,72814,3400],{"emptyLinePlaceholder":1084},[425,72816,72817,72820],{"class":427,"line":914},[425,72818,72819],{"class":431},"    .info",[425,72821,16569],{"class":701},[425,72823,72824,72826,72828,72830,72832],{"class":427,"line":943},[425,72825,55526],{"class":691},[425,72827,52192],{"class":701},[425,72829,52244],{"class":691},[425,72831,52247],{"class":1155},[425,72833,2307],{"class":701},[425,72835,72836,72838,72840,72842,72844,72846],{"class":427,"line":956},[425,72837,55461],{"class":691},[425,72839,52192],{"class":701},[425,72841,1594],{"class":691},[425,72843,52247],{"class":1155},[425,72845,52311],{"class":691},[425,72847,2307],{"class":701},[425,72849,72850,72852,72854,72856],{"class":427,"line":964},[425,72851,58041],{"class":691},[425,72853,52192],{"class":701},[425,72855,52347],{"class":691},[425,72857,2307],{"class":701},[425,72859,72860],{"class":427,"line":2733},[425,72861,3187],{"class":701},[425,72863,72864],{"class":427,"line":2750},[425,72865,3400],{"emptyLinePlaceholder":1084},[425,72867,72868,72871],{"class":427,"line":2755},[425,72869,72870],{"class":431},"    .uname",[425,72872,32221],{"class":701},[425,72874,72875,72878],{"class":427,"line":2760},[425,72876,72877],{"class":431},"    .age",[425,72879,32221],{"class":701},[425,72881,72882,72885],{"class":427,"line":2765},[425,72883,72884],{"class":431},"    .salary",[425,72886,16569],{"class":701},[425,72888,72889,72891,72893,72895,72897],{"class":427,"line":2779},[425,72890,55526],{"class":691},[425,72892,52192],{"class":701},[425,72894,1460],{"class":691},[425,72896,52247],{"class":1155},[425,72898,2307],{"class":701},[425,72900,72901,72903,72905,72907,72909],{"class":427,"line":2784},[425,72902,55540],{"class":691},[425,72904,52192],{"class":701},[425,72906,1848],{"class":691},[425,72908,52247],{"class":1155},[425,72910,2307],{"class":701},[425,72912,72913,72915,72917,72919],{"class":427,"line":3577},[425,72914,62535],{"class":691},[425,72916,52192],{"class":701},[425,72918,55492],{"class":691},[425,72920,2307],{"class":701},[425,72922,72923,72925,72927,72929,72931],{"class":427,"line":3591},[425,72924,62505],{"class":691},[425,72926,52192],{"class":701},[425,72928,1723],{"class":691},[425,72930,52247],{"class":1155},[425,72932,2307],{"class":701},[425,72934,72935],{"class":427,"line":3599},[425,72936,3187],{"class":701},[425,72938,72939],{"class":427,"line":3604},[425,72940,3400],{"emptyLinePlaceholder":1084},[425,72942,72943,72946],{"class":427,"line":3610},[425,72944,72945],{"class":431},"    .gender",[425,72947,32221],{"class":701},[425,72949,72950,72953],{"class":427,"line":3616},[425,72951,72952],{"class":431},"    .city",[425,72954,16569],{"class":701},[425,72956,72957,72959,72961,72963,72965],{"class":427,"line":3621},[425,72958,55526],{"class":691},[425,72960,52192],{"class":701},[425,72962,1460],{"class":691},[425,72964,52247],{"class":1155},[425,72966,2307],{"class":701},[425,72968,72969,72971,72973,72975,72977],{"class":427,"line":8948},[425,72970,55540],{"class":691},[425,72972,52192],{"class":701},[425,72974,1973],{"class":691},[425,72976,52247],{"class":1155},[425,72978,2307],{"class":701},[425,72980,72981,72983,72985,72987],{"class":427,"line":8972},[425,72982,62535],{"class":691},[425,72984,52192],{"class":701},[425,72986,55492],{"class":691},[425,72988,2307],{"class":701},[425,72990,72991,72993,72995,72997,72999],{"class":427,"line":8977},[425,72992,62505],{"class":691},[425,72994,52192],{"class":701},[425,72996,1723],{"class":691},[425,72998,52247],{"class":1155},[425,73000,2307],{"class":701},[425,73002,73003,73005,73007,73009,73011,73013,73016,73018,73020,73022,73025,73027,73029],{"class":427,"line":8983},[425,73004,62732],{"class":691},[425,73006,52192],{"class":701},[425,73008,1367],{"class":691},[425,73010,52247],{"class":1155},[425,73012,52276],{"class":691},[425,73014,73015],{"class":691}," rgb",[425,73017,1159],{"class":701},[425,73019,2724],{"class":691},[425,73021,13434],{"class":701},[425,73023,73024],{"class":691},"197",[425,73026,13434],{"class":701},[425,73028,73024],{"class":691},[425,73030,3719],{"class":701},[425,73032,73033],{"class":427,"line":9010},[425,73034,3187],{"class":701},[425,73036,73037],{"class":427,"line":9015},[425,73038,3400],{"emptyLinePlaceholder":1084},[425,73040,73041,73044],{"class":427,"line":9021},[425,73042,73043],{"class":52055},"    button",[425,73045,16569],{"class":701},[425,73047,73048,73050,73052,73054,73056],{"class":427,"line":9033},[425,73049,55540],{"class":691},[425,73051,52192],{"class":701},[425,73053,1973],{"class":691},[425,73055,52247],{"class":1155},[425,73057,2307],{"class":701},[425,73059,73060,73062,73064,73066,73068],{"class":427,"line":9045},[425,73061,55526],{"class":691},[425,73063,52192],{"class":701},[425,73065,1632],{"class":691},[425,73067,52247],{"class":1155},[425,73069,2307],{"class":701},[425,73071,73072,73074,73076,73079,73081,73083,73085,73088,73090,73092],{"class":427,"line":9057},[425,73073,55639],{"class":691},[425,73075,52192],{"class":701},[425,73077,73078],{"class":691},"rgb",[425,73080,1159],{"class":701},[425,73082,2116],{"class":691},[425,73084,13434],{"class":701},[425,73086,73087],{"class":691},"187",[425,73089,13434],{"class":701},[425,73091,1448],{"class":691},[425,73093,3719],{"class":701},[425,73095,73096,73098,73100,73102],{"class":427,"line":10715},[425,73097,58171],{"class":691},[425,73099,52192],{"class":701},[425,73101,61597],{"class":691},[425,73103,2307],{"class":701},[425,73105,73106,73108,73110,73112],{"class":427,"line":10740},[425,73107,62732],{"class":691},[425,73109,52192],{"class":701},[425,73111,1341],{"class":691},[425,73113,2307],{"class":701},[425,73115,73116],{"class":427,"line":10763},[425,73117,3187],{"class":701},[425,73119,73120],{"class":427,"line":10787},[425,73121,3400],{"emptyLinePlaceholder":1084},[425,73123,73124,73126,73128],{"class":427,"line":10792},[425,73125,73043],{"class":52055},[425,73127,52443],{"class":52055},[425,73129,16569],{"class":701},[425,73131,73132,73134,73136,73139],{"class":427,"line":10797},[425,73133,55764],{"class":691},[425,73135,52192],{"class":701},[425,73137,73138],{"class":691},"inline-block",[425,73140,2307],{"class":701},[425,73142,73143,73145,73147,73149,73151],{"class":427,"line":10802},[425,73144,55526],{"class":691},[425,73146,52192],{"class":701},[425,73148,1594],{"class":691},[425,73150,52247],{"class":1155},[425,73152,2307],{"class":701},[425,73154,73155,73157,73159,73161,73163],{"class":427,"line":10811},[425,73156,55540],{"class":691},[425,73158,52192],{"class":701},[425,73160,1594],{"class":691},[425,73162,52247],{"class":1155},[425,73164,2307],{"class":701},[425,73166,73167,73169,73171,73173,73175],{"class":427,"line":10816},[425,73168,58114],{"class":691},[425,73170,52192],{"class":701},[425,73172,1620],{"class":691},[425,73174,52247],{"class":1155},[425,73176,2307],{"class":701},[425,73178,73179,73181,73183,73185,73187,73189,73192],{"class":427,"line":10822},[425,73180,62732],{"class":691},[425,73182,52192],{"class":701},[425,73184,1367],{"class":691},[425,73186,52247],{"class":1155},[425,73188,52276],{"class":691},[425,73190,73191],{"class":691}," #fff",[425,73193,2307],{"class":701},[425,73195,73196,73198,73200,73202,73204],{"class":427,"line":10843},[425,73197,55889],{"class":691},[425,73199,52192],{"class":701},[425,73201,1468],{"class":691},[425,73203,52247],{"class":1155},[425,73205,2307],{"class":701},[425,73207,73208,73210,73212,73214,73216],{"class":427,"line":10849},[425,73209,62505],{"class":691},[425,73211,52192],{"class":701},[425,73213,1367],{"class":691},[425,73215,52247],{"class":1155},[425,73217,2307],{"class":701},[425,73219,73220],{"class":427,"line":10863},[425,73221,3187],{"class":701},[425,73223,73224],{"class":427,"line":10869},[425,73225,3400],{"emptyLinePlaceholder":1084},[425,73227,73228,73231],{"class":427,"line":10896},[425,73229,73230],{"class":431},"    .total",[425,73232,16569],{"class":701},[425,73234,73235,73237,73239,73241,73243],{"class":427,"line":10905},[425,73236,55526],{"class":691},[425,73238,52192],{"class":701},[425,73240,62384],{"class":691},[425,73242,52247],{"class":1155},[425,73244,2307],{"class":701},[425,73246,73247,73249,73251,73253,73255],{"class":427,"line":10911},[425,73248,55540],{"class":691},[425,73250,52192],{"class":701},[425,73252,1550],{"class":691},[425,73254,52247],{"class":1155},[425,73256,2307],{"class":701},[425,73258,73259,73261,73263,73265,73267],{"class":427,"line":10919},[425,73260,58114],{"class":691},[425,73262,52192],{"class":701},[425,73264,1550],{"class":691},[425,73266,52247],{"class":1155},[425,73268,2307],{"class":701},[425,73270,73271,73273,73275,73278],{"class":427,"line":10924},[425,73272,58041],{"class":691},[425,73274,52192],{"class":701},[425,73276,73277],{"class":691},"right",[425,73279,2307],{"class":701},[425,73281,73282,73284,73286,73288,73290,73292,73294,73296],{"class":427,"line":17601},[425,73283,55461],{"class":691},[425,73285,52192],{"class":701},[425,73287,1550],{"class":691},[425,73289,52247],{"class":1155},[425,73291,52311],{"class":691},[425,73293,3038],{"class":691},[425,73295,52247],{"class":1155},[425,73297,2307],{"class":701},[425,73299,73300,73303,73305,73307,73309],{"class":427,"line":17607},[425,73301,73302],{"class":691},"      padding-right",[425,73304,52192],{"class":701},[425,73306,1594],{"class":691},[425,73308,52247],{"class":1155},[425,73310,2307],{"class":701},[425,73312,73313,73315,73317,73319,73321],{"class":427,"line":17630},[425,73314,55677],{"class":691},[425,73316,52192],{"class":701},[425,73318,1671],{"class":691},[425,73320,52247],{"class":1155},[425,73322,2307],{"class":701},[425,73324,73325,73327,73329,73331,73333,73336,73338,73341,73343,73345],{"class":427,"line":17636},[425,73326,55639],{"class":691},[425,73328,52192],{"class":701},[425,73330,73078],{"class":691},[425,73332,1159],{"class":701},[425,73334,73335],{"class":691},"237",[425,73337,13434],{"class":701},[425,73339,73340],{"class":691},"235",[425,73342,13434],{"class":701},[425,73344,73340],{"class":691},[425,73346,3719],{"class":701},[425,73348,73349,73352,73354,73356],{"class":427,"line":17659},[425,73350,73351],{"class":691},"      box-sizing",[425,73353,52192],{"class":701},[425,73355,61260],{"class":691},[425,73357,2307],{"class":701},[425,73359,73360],{"class":427,"line":17673},[425,73361,3187],{"class":701},[425,73363,73364],{"class":427,"line":17693},[425,73365,3400],{"emptyLinePlaceholder":1084},[425,73367,73368,73370,73372],{"class":427,"line":17699},[425,73369,73230],{"class":431},[425,73371,52443],{"class":52055},[425,73373,16569],{"class":701},[425,73375,73376,73378,73380,73382],{"class":427,"line":17710},[425,73377,58171],{"class":691},[425,73379,52192],{"class":701},[425,73381,58176],{"class":691},[425,73383,2307],{"class":701},[425,73385,73386],{"class":427,"line":17733},[425,73387,3187],{"class":701},[425,73389,73390],{"class":427,"line":17755},[425,73391,3400],{"emptyLinePlaceholder":1084},[425,73393,73394,73396],{"class":427,"line":17760},[425,73395,65778],{"class":52055},[425,73397,16569],{"class":701},[425,73399,73400,73402,73404,73406,73408],{"class":427,"line":17766},[425,73401,55526],{"class":691},[425,73403,52192],{"class":701},[425,73405,62384],{"class":691},[425,73407,52247],{"class":1155},[425,73409,2307],{"class":701},[425,73411,73412,73414,73416,73419],{"class":427,"line":17780},[425,73413,55461],{"class":691},[425,73415,52192],{"class":701},[425,73417,73418],{"class":691},"auto",[425,73420,2307],{"class":701},[425,73422,73423,73425,73427,73429],{"class":427,"line":17793},[425,73424,65785],{"class":691},[425,73426,52192],{"class":701},[425,73428,65790],{"class":691},[425,73430,2307],{"class":701},[425,73432,73433],{"class":427,"line":17798},[425,73434,3187],{"class":701},[425,73436,73437],{"class":427,"line":17812},[425,73438,3400],{"emptyLinePlaceholder":1084},[425,73440,73441,73443],{"class":427,"line":17817},[425,73442,65870],{"class":52055},[425,73444,16569],{"class":701},[425,73446,73447,73449,73451,73453,73455,73457,73459,73461,73463,73465],{"class":427,"line":17823},[425,73448,55639],{"class":691},[425,73450,52192],{"class":701},[425,73452,73078],{"class":691},[425,73454,1159],{"class":701},[425,73456,73335],{"class":691},[425,73458,13434],{"class":701},[425,73460,73340],{"class":691},[425,73462,13434],{"class":701},[425,73464,73340],{"class":691},[425,73466,3719],{"class":701},[425,73468,73469],{"class":427,"line":17828},[425,73470,3187],{"class":701},[425,73472,73473],{"class":427,"line":17842},[425,73474,3400],{"emptyLinePlaceholder":1084},[425,73476,73477,73479],{"class":427,"line":17847},[425,73478,65870],{"class":52055},[425,73480,32221],{"class":701},[425,73482,73483,73485],{"class":427,"line":17852},[425,73484,65936],{"class":52055},[425,73486,16569],{"class":701},[425,73488,73489,73491,73493,73495,73497],{"class":427,"line":17866},[425,73490,55540],{"class":691},[425,73492,52192],{"class":701},[425,73494,1422],{"class":691},[425,73496,52247],{"class":1155},[425,73498,2307],{"class":701},[425,73500,73501,73503,73505,73507],{"class":427,"line":17878},[425,73502,58041],{"class":691},[425,73504,52192],{"class":701},[425,73506,46],{"class":691},[425,73508,2307],{"class":701},[425,73510,73511,73513,73515,73517,73519],{"class":427,"line":17883},[425,73512,55677],{"class":691},[425,73514,52192],{"class":701},[425,73516,1697],{"class":691},[425,73518,52247],{"class":1155},[425,73520,2307],{"class":701},[425,73522,73523,73525,73527,73529,73531,73533,73535,73537,73540,73542,73545,73547,73549],{"class":427,"line":17896},[425,73524,62732],{"class":691},[425,73526,52192],{"class":701},[425,73528,1367],{"class":691},[425,73530,52247],{"class":1155},[425,73532,52276],{"class":691},[425,73534,73015],{"class":691},[425,73536,1159],{"class":701},[425,73538,73539],{"class":691},"228",[425,73541,13434],{"class":701},[425,73543,73544],{"class":691},"225",[425,73546,13434],{"class":701},[425,73548,73544],{"class":691},[425,73550,3719],{"class":701},[425,73552,73553,73556,73558,73560,73562],{"class":427,"line":17901},[425,73554,73555],{"class":691},"      padding-left",[425,73557,52192],{"class":701},[425,73559,1468],{"class":691},[425,73561,52247],{"class":1155},[425,73563,2307],{"class":701},[425,73565,73566,73568,73570,73572,73575,73577,73579],{"class":427,"line":17906},[425,73567,62615],{"class":691},[425,73569,52192],{"class":701},[425,73571,705],{"class":691},[425,73573,73574],{"class":691}," linear",[425,73576,62622],{"class":691},[425,73578,1843],{"class":1155},[425,73580,2307],{"class":701},[425,73582,73583],{"class":427,"line":17911},[425,73584,3187],{"class":701},[425,73586,73587],{"class":427,"line":17924},[425,73588,3400],{"emptyLinePlaceholder":1084},[425,73590,73591,73594,73596,73598],{"class":427,"line":17929},[425,73592,73593],{"class":52055},"    tbody",[425,73595,70899],{"class":52055},[425,73597,61695],{"class":431},[425,73599,16569],{"class":701},[425,73601,73602,73604,73606,73608,73610,73612,73614,73616,73618,73620],{"class":427,"line":33388},[425,73603,55639],{"class":691},[425,73605,52192],{"class":701},[425,73607,73078],{"class":691},[425,73609,1159],{"class":701},[425,73611,73335],{"class":691},[425,73613,13434],{"class":701},[425,73615,73340],{"class":691},[425,73617,13434],{"class":701},[425,73619,73340],{"class":691},[425,73621,3719],{"class":701},[425,73623,73624,73626,73628,73630],{"class":427,"line":33394},[425,73625,62780],{"class":691},[425,73627,52192],{"class":701},[425,73629,62785],{"class":691},[425,73631,2307],{"class":701},[425,73633,73634],{"class":427,"line":33400},[425,73635,3187],{"class":701},[425,73637,73638],{"class":427,"line":33406},[425,73639,3400],{"emptyLinePlaceholder":1084},[425,73641,73642,73644,73646,73649,73651],{"class":427,"line":33412},[425,73643,73593],{"class":52055},[425,73645,70899],{"class":52055},[425,73647,73648],{"class":52055}," td",[425,73650,2412],{"class":52055},[425,73652,16569],{"class":701},[425,73654,73655,73657,73659,73661],{"class":427,"line":33423},[425,73656,55764],{"class":691},[425,73658,52192],{"class":701},[425,73660,61624],{"class":691},[425,73662,2307],{"class":701},[425,73664,73665,73667,73669,73671,73673],{"class":427,"line":33429},[425,73666,55526],{"class":691},[425,73668,52192],{"class":701},[425,73670,2054],{"class":691},[425,73672,52247],{"class":1155},[425,73674,2307],{"class":701},[425,73676,73677,73679,73681,73683,73685],{"class":427,"line":33449},[425,73678,55540],{"class":691},[425,73680,52192],{"class":701},[425,73682,1973],{"class":691},[425,73684,52247],{"class":1155},[425,73686,2307],{"class":701},[425,73688,73689,73691,73693,73695,73697],{"class":427,"line":33455},[425,73690,58114],{"class":691},[425,73692,52192],{"class":701},[425,73694,1973],{"class":691},[425,73696,52247],{"class":1155},[425,73698,2307],{"class":701},[425,73700,73701,73703,73705,73707,73709],{"class":427,"line":33466},[425,73702,62832],{"class":691},[425,73704,52192],{"class":701},[425,73706,1235],{"class":691},[425,73708,52247],{"class":1155},[425,73710,2307],{"class":701},[425,73712,73713,73715,73717,73719],{"class":427,"line":33472},[425,73714,58171],{"class":691},[425,73716,52192],{"class":701},[425,73718,61597],{"class":691},[425,73720,2307],{"class":701},[425,73722,73723,73725,73727,73729],{"class":427,"line":33478},[425,73724,58041],{"class":691},[425,73726,52192],{"class":701},[425,73728,52347],{"class":691},[425,73730,2307],{"class":701},[425,73732,73733,73735,73737,73739],{"class":427,"line":33484},[425,73734,64725],{"class":691},[425,73736,52192],{"class":701},[425,73738,55492],{"class":691},[425,73740,2307],{"class":701},[425,73742,73743,73745,73747,73750],{"class":427,"line":33490},[425,73744,55639],{"class":691},[425,73746,52192],{"class":701},[425,73748,73749],{"class":691},"orange",[425,73751,2307],{"class":701},[425,73753,73754,73756,73758,73761,73763],{"class":427,"line":33496},[425,73755,55889],{"class":691},[425,73757,52192],{"class":701},[425,73759,73760],{"class":691},"12.5",[425,73762,52247],{"class":1155},[425,73764,2307],{"class":701},[425,73766,73767],{"class":427,"line":33502},[425,73768,3187],{"class":701},[425,73770,73771,73773,73775],{"class":427,"line":33508},[425,73772,53172],{"class":701},[425,73774,1074],{"class":52055},[425,73776,52062],{"class":701},[425,73778,73779,73781,73783],{"class":427,"line":33528},[425,73780,52540],{"class":701},[425,73782,52089],{"class":52055},[425,73784,52062],{"class":701},[425,73786,73787],{"class":427,"line":33534},[425,73788,3400],{"emptyLinePlaceholder":1084},[425,73790,73791,73793,73795],{"class":427,"line":33550},[425,73792,2057],{"class":701},[425,73794,52555],{"class":52055},[425,73796,52062],{"class":701},[425,73798,73799,73801,73803,73806,73808],{"class":427,"line":33556},[425,73800,52899],{"class":701},[425,73802,1099],{"class":52055},[425,73804,73805],{"class":701},">学生就业统计表\u003C\u002F",[425,73807,1099],{"class":52055},[425,73809,52062],{"class":701},[425,73811,73812,73814,73816,73818,73820,73822,73824,73826,73828],{"class":427,"line":33570},[425,73813,52899],{"class":701},[425,73815,67380],{"class":52055},[425,73817,54241],{"class":431},[425,73819,1204],{"class":701},[425,73821,63419],{"class":435},[425,73823,69825],{"class":431},[425,73825,1204],{"class":701},[425,73827,32531],{"class":435},[425,73829,52062],{"class":701},[425,73831,73832,73834,73836,73838,73840,73842,73844,73846,73848,73850,73852,73855,73857,73859,73861],{"class":427,"line":33576},[425,73833,52096],{"class":701},[425,73835,54576],{"class":52055},[425,73837,54579],{"class":431},[425,73839,1204],{"class":701},[425,73841,63454],{"class":435},[425,73843,15917],{"class":431},[425,73845,1204],{"class":701},[425,73847,69851],{"class":435},[425,73849,61775],{"class":431},[425,73851,1204],{"class":701},[425,73853,73854],{"class":435},"\"姓名\"",[425,73856,54241],{"class":431},[425,73858,1204],{"class":701},[425,73860,69851],{"class":435},[425,73862,52062],{"class":701},[425,73864,73865,73867,73869,73871,73873,73875,73877,73879,73881,73883,73885,73888,73890,73892,73894],{"class":427,"line":33591},[425,73866,52096],{"class":701},[425,73868,54576],{"class":52055},[425,73870,54579],{"class":431},[425,73872,1204],{"class":701},[425,73874,63454],{"class":435},[425,73876,15917],{"class":431},[425,73878,1204],{"class":701},[425,73880,69879],{"class":435},[425,73882,61775],{"class":431},[425,73884,1204],{"class":701},[425,73886,73887],{"class":435},"\"年龄\"",[425,73889,54241],{"class":431},[425,73891,1204],{"class":701},[425,73893,69879],{"class":435},[425,73895,52062],{"class":701},[425,73897,73898,73900,73902,73904,73906,73908,73910,73912,73914,73916,73918,73921,73923,73925,73927],{"class":427,"line":33597},[425,73899,52096],{"class":701},[425,73901,54576],{"class":52055},[425,73903,54579],{"class":431},[425,73905,1204],{"class":701},[425,73907,63454],{"class":435},[425,73909,15917],{"class":431},[425,73911,1204],{"class":701},[425,73913,69981],{"class":435},[425,73915,61775],{"class":431},[425,73917,1204],{"class":701},[425,73919,73920],{"class":435},"\"薪资\"",[425,73922,54241],{"class":431},[425,73924,1204],{"class":701},[425,73926,69981],{"class":435},[425,73928,52062],{"class":701},[425,73930,73931,73933,73935,73937,73939,73941,73943,73945,73947,73949,73951,73953],{"class":427,"line":33606},[425,73932,52096],{"class":701},[425,73934,69899],{"class":52055},[425,73936,15917],{"class":431},[425,73938,1204],{"class":701},[425,73940,69906],{"class":435},[425,73942,15956],{"class":431},[425,73944,1204],{"class":701},[425,73946,8652],{"class":435},[425,73948,54241],{"class":431},[425,73950,1204],{"class":701},[425,73952,69906],{"class":435},[425,73954,52062],{"class":701},[425,73956,73957,73959,73961,73963,73965,73967,73969,73971],{"class":427,"line":33612},[425,73958,55989],{"class":701},[425,73960,69921],{"class":52055},[425,73962,67406],{"class":431},[425,73964,1204],{"class":701},[425,73966,10960],{"class":435},[425,73968,69930],{"class":701},[425,73970,69921],{"class":52055},[425,73972,52062],{"class":701},[425,73974,73975,73977,73979,73981,73983,73985,73987,73989],{"class":427,"line":33621},[425,73976,55989],{"class":701},[425,73978,69921],{"class":52055},[425,73980,67406],{"class":431},[425,73982,1204],{"class":701},[425,73984,11029],{"class":435},[425,73986,69949],{"class":701},[425,73988,69921],{"class":52055},[425,73990,52062],{"class":701},[425,73992,73993,73995,73997],{"class":427,"line":33627},[425,73994,52531],{"class":701},[425,73996,69899],{"class":52055},[425,73998,52062],{"class":701},[425,74000,74001,74003,74005,74007,74009,74011,74013,74015,74017,74019,74021,74023],{"class":427,"line":33633},[425,74002,52096],{"class":701},[425,74004,69899],{"class":52055},[425,74006,15917],{"class":431},[425,74008,1204],{"class":701},[425,74010,70003],{"class":435},[425,74012,15956],{"class":431},[425,74014,1204],{"class":701},[425,74016,8652],{"class":435},[425,74018,54241],{"class":431},[425,74020,1204],{"class":701},[425,74022,70003],{"class":435},[425,74024,52062],{"class":701},[425,74026,74027,74029,74031,74033,74035,74037,74039,74041],{"class":427,"line":33642},[425,74028,55989],{"class":701},[425,74030,69921],{"class":52055},[425,74032,67406],{"class":431},[425,74034,1204],{"class":701},[425,74036,70024],{"class":435},[425,74038,70027],{"class":701},[425,74040,69921],{"class":52055},[425,74042,52062],{"class":701},[425,74044,74045,74047,74049,74051,74053,74055,74057,74059],{"class":427,"line":33648},[425,74046,55989],{"class":701},[425,74048,69921],{"class":52055},[425,74050,67406],{"class":431},[425,74052,1204],{"class":701},[425,74054,70044],{"class":435},[425,74056,70047],{"class":701},[425,74058,69921],{"class":52055},[425,74060,52062],{"class":701},[425,74062,74063,74065,74067,74069,74071,74073,74075,74077],{"class":427,"line":33659},[425,74064,55989],{"class":701},[425,74066,69921],{"class":52055},[425,74068,67406],{"class":431},[425,74070,1204],{"class":701},[425,74072,70064],{"class":435},[425,74074,70067],{"class":701},[425,74076,69921],{"class":52055},[425,74078,52062],{"class":701},[425,74080,74081,74083,74085,74087,74089,74091,74093,74095],{"class":427,"line":33665},[425,74082,55989],{"class":701},[425,74084,69921],{"class":52055},[425,74086,67406],{"class":431},[425,74088,1204],{"class":701},[425,74090,70084],{"class":435},[425,74092,70087],{"class":701},[425,74094,69921],{"class":52055},[425,74096,52062],{"class":701},[425,74098,74099,74101,74103,74105,74107,74109,74111,74113],{"class":427,"line":33684},[425,74100,55989],{"class":701},[425,74102,69921],{"class":52055},[425,74104,67406],{"class":431},[425,74106,1204],{"class":701},[425,74108,70104],{"class":435},[425,74110,70107],{"class":701},[425,74112,69921],{"class":52055},[425,74114,52062],{"class":701},[425,74116,74117,74119,74121],{"class":427,"line":33690},[425,74118,52531],{"class":701},[425,74120,69899],{"class":52055},[425,74122,52062],{"class":701},[425,74124,74125,74127,74129],{"class":427,"line":33701},[425,74126,52096],{"class":701},[425,74128,54642],{"class":52055},[425,74130,52062],{"class":701},[425,74132,74133,74135,74137,74140,74142,74145,74147],{"class":427,"line":33707},[425,74134,55989],{"class":701},[425,74136,425],{"class":52055},[425,74138,74139],{"class":701},">+\u003C\u002F",[425,74141,425],{"class":52055},[425,74143,74144],{"class":701},">添加\u003C\u002F",[425,74146,54642],{"class":52055},[425,74148,52062],{"class":701},[425,74150,74151,74153,74155],{"class":427,"line":33727},[425,74152,53172],{"class":701},[425,74154,67380],{"class":52055},[425,74156,52062],{"class":701},[425,74158,74159,74161,74163,74165,74167,74169,74172,74174,74177,74179,74182,74184],{"class":427,"line":33743},[425,74160,52899],{"class":701},[425,74162,52366],{"class":52055},[425,74164,54241],{"class":431},[425,74166,1204],{"class":701},[425,74168,63335],{"class":435},[425,74170,74171],{"class":701},">共有数据 \u003C",[425,74173,425],{"class":52055},[425,74175,74176],{"class":701},">0\u003C\u002F",[425,74178,425],{"class":52055},[425,74180,74181],{"class":701},"> 条\u003C\u002F",[425,74183,52366],{"class":52055},[425,74185,52062],{"class":701},[425,74187,74188,74190,74192],{"class":427,"line":33749},[425,74189,52899],{"class":701},[425,74191,35],{"class":52055},[425,74193,52062],{"class":701},[425,74195,74196,74198,74200],{"class":427,"line":33763},[425,74197,52096],{"class":701},[425,74199,38],{"class":52055},[425,74201,52062],{"class":701},[425,74203,74204,74206,74208],{"class":427,"line":33769},[425,74205,55989],{"class":701},[425,74207,41],{"class":52055},[425,74209,52062],{"class":701},[425,74211,74212,74214,74216,74219,74221],{"class":427,"line":33775},[425,74213,56057],{"class":701},[425,74215,44],{"class":52055},[425,74217,74218],{"class":701},">ID\u003C\u002F",[425,74220,44],{"class":52055},[425,74222,52062],{"class":701},[425,74224,74225,74227,74229,74231,74233],{"class":427,"line":33786},[425,74226,56057],{"class":701},[425,74228,44],{"class":52055},[425,74230,70210],{"class":701},[425,74232,44],{"class":52055},[425,74234,52062],{"class":701},[425,74236,74237,74239,74241,74243,74245],{"class":427,"line":33792},[425,74238,56057],{"class":701},[425,74240,44],{"class":52055},[425,74242,70223],{"class":701},[425,74244,44],{"class":52055},[425,74246,52062],{"class":701},[425,74248,74249,74251,74253,74255,74257],{"class":427,"line":33798},[425,74250,56057],{"class":701},[425,74252,44],{"class":52055},[425,74254,70236],{"class":701},[425,74256,44],{"class":52055},[425,74258,52062],{"class":701},[425,74260,74261,74263,74265,74267,74269],{"class":427,"line":33808},[425,74262,56057],{"class":701},[425,74264,44],{"class":52055},[425,74266,70249],{"class":701},[425,74268,44],{"class":52055},[425,74270,52062],{"class":701},[425,74272,74273,74275,74277,74279,74281],{"class":427,"line":33814},[425,74274,56057],{"class":701},[425,74276,44],{"class":52055},[425,74278,70262],{"class":701},[425,74280,44],{"class":52055},[425,74282,52062],{"class":701},[425,74284,74285,74287,74289,74292,74294],{"class":427,"line":33825},[425,74286,56057],{"class":701},[425,74288,44],{"class":52055},[425,74290,74291],{"class":701},">录入时间\u003C\u002F",[425,74293,44],{"class":52055},[425,74295,52062],{"class":701},[425,74297,74298,74300,74302,74304,74306],{"class":427,"line":33831},[425,74299,56057],{"class":701},[425,74301,44],{"class":52055},[425,74303,70275],{"class":701},[425,74305,44],{"class":52055},[425,74307,52062],{"class":701},[425,74309,74310,74312,74314],{"class":427,"line":33841},[425,74311,56162],{"class":701},[425,74313,41],{"class":52055},[425,74315,52062],{"class":701},[425,74317,74318,74320,74322],{"class":427,"line":33846},[425,74319,52531],{"class":701},[425,74321,38],{"class":52055},[425,74323,52062],{"class":701},[425,74325,74326,74328,74330],{"class":427,"line":33852},[425,74327,52096],{"class":701},[425,74329,55],{"class":52055},[425,74331,52062],{"class":701},[425,74333,74334],{"class":427,"line":33901},[425,74335,74336],{"class":1216},"      \u003C!-- \u003Ctr>\n",[425,74338,74339],{"class":427,"line":33948},[425,74340,74341],{"class":1216},"        \u003Ctd>1\u003C\u002Ftd>\n",[425,74343,74344],{"class":427,"line":33953},[425,74345,74341],{"class":1216},[425,74347,74348],{"class":427,"line":33959},[425,74349,74341],{"class":1216},[425,74351,74352],{"class":427,"line":33978},[425,74353,74341],{"class":1216},[425,74355,74356],{"class":427,"line":33984},[425,74357,74341],{"class":1216},[425,74359,74360],{"class":427,"line":34004},[425,74361,74341],{"class":1216},[425,74363,74364],{"class":427,"line":34010},[425,74365,74341],{"class":1216},[425,74367,74368],{"class":427,"line":34016},[425,74369,74370],{"class":1216},"        \u003Ctd>\n",[425,74372,74373],{"class":427,"line":34026},[425,74374,74375],{"class":1216},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[425,74377,74378],{"class":427,"line":34031},[425,74379,74380],{"class":1216},"        \u003C\u002Ftd>\n",[425,74382,74383],{"class":427,"line":34037},[425,74384,74385],{"class":1216},"      \u003C\u002Ftr> -->\n",[425,74387,74388,74390,74392],{"class":427,"line":34053},[425,74389,52531],{"class":701},[425,74391,55],{"class":52055},[425,74393,52062],{"class":701},[425,74395,74396,74398,74400],{"class":427,"line":34098},[425,74397,53172],{"class":701},[425,74399,35],{"class":52055},[425,74401,52062],{"class":701},[425,74403,74404,74406,74408],{"class":427,"line":34104},[425,74405,52899],{"class":701},[425,74407,52568],{"class":52055},[425,74409,52062],{"class":701},[425,74411,74412],{"class":427,"line":34110},[425,74413,74414],{"class":1216},"    \u002F\u002F const initData = [{\n",[425,74416,74417],{"class":427,"line":34116},[425,74418,74419],{"class":1216},"    \u002F\u002F   unameId: 1,\n",[425,74421,74422],{"class":427,"line":34127},[425,74423,74424],{"class":1216},"    \u002F\u002F   uname: '华晨宇',\n",[425,74426,74427],{"class":427,"line":34133},[425,74428,74429],{"class":1216},"    \u002F\u002F   age: 22,\n",[425,74431,74432],{"class":427,"line":34139},[425,74433,74434],{"class":1216},"    \u002F\u002F   salary: 12000,\n",[425,74436,74437],{"class":427,"line":34145},[425,74438,74439],{"class":1216},"    \u002F\u002F   gender: '男',\n",[425,74441,74442],{"class":427,"line":34163},[425,74443,74444],{"class":1216},"    \u002F\u002F   city: '北京',\n",[425,74446,74447],{"class":427,"line":34177},[425,74448,74449],{"class":1216},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[425,74451,74452],{"class":427,"line":34186},[425,74453,74454],{"class":1216},"    \u002F\u002F }]\n",[425,74456,74457],{"class":427,"line":34195},[425,74458,74459],{"class":1216},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[425,74461,74462],{"class":427,"line":34204},[425,74463,74464],{"class":1216},"    \u002F\u002F 1.渲染业务\n",[425,74466,74467],{"class":427,"line":34213},[425,74468,74469],{"class":1216},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[425,74471,74472],{"class":427,"line":34219},[425,74473,74474],{"class":1216},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[425,74476,74477],{"class":427,"line":34225},[425,74478,74479],{"class":1216},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[425,74481,74482],{"class":427,"line":34233},[425,74483,3400],{"emptyLinePlaceholder":1084},[425,74485,74486],{"class":427,"line":34238},[425,74487,74488],{"class":1216},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[425,74490,74491],{"class":427,"line":34244},[425,74492,74493],{"class":1216},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[425,74495,74496,74498,74500,74502],{"class":427,"line":34255},[425,74497,12220],{"class":1155},[425,74499,58450],{"class":691},[425,74501,14563],{"class":1155},[425,74503,52593],{"class":701},[425,74505,74506,74509,74511],{"class":427,"line":34261},[425,74507,74508],{"class":701},"    console.",[425,74510,59002],{"class":431},[425,74512,53167],{"class":701},[425,74514,74515],{"class":427,"line":34281},[425,74516,3400],{"emptyLinePlaceholder":1084},[425,74518,74519],{"class":427,"line":34287},[425,74520,74521],{"class":1216},"    \u002F\u002F 时间函数\n",[425,74523,74524,74526,74529],{"class":427,"line":34293},[425,74525,70839],{"class":1155},[425,74527,74528],{"class":431}," getTime",[425,74530,11852],{"class":701},[425,74532,74533,74535,74538,74540,74542,74545],{"class":427,"line":34299},[425,74534,58983],{"class":1155},[425,74536,74537],{"class":691}," date",[425,74539,14563],{"class":1155},[425,74541,12577],{"class":1155},[425,74543,74544],{"class":431}," Date",[425,74546,2976],{"class":701},[425,74548,74549,74551,74553,74555,74558,74561,74563,74565,74567,74570,74573,74575,74577,74579,74581,74583,74585,74587],{"class":427,"line":34316},[425,74550,58983],{"class":1155},[425,74552,17088],{"class":691},[425,74554,14563],{"class":1155},[425,74556,74557],{"class":701}," date.",[425,74559,74560],{"class":431},"getHours",[425,74562,14049],{"class":701},[425,74564,2057],{"class":1155},[425,74566,3038],{"class":691},[425,74568,74569],{"class":1155}," ?",[425,74571,74572],{"class":435}," '0'",[425,74574,46321],{"class":1155},[425,74576,74557],{"class":701},[425,74578,74560],{"class":431},[425,74580,14049],{"class":701},[425,74582,948],{"class":1155},[425,74584,74557],{"class":701},[425,74586,74560],{"class":431},[425,74588,2976],{"class":701},[425,74590,74591,74593,74596,74598,74600,74603,74605,74607,74609,74611,74613,74615,74617,74619,74621,74623,74625,74627],{"class":427,"line":34322},[425,74592,58983],{"class":1155},[425,74594,74595],{"class":691}," m",[425,74597,14563],{"class":1155},[425,74599,74557],{"class":701},[425,74601,74602],{"class":431},"getMinutes",[425,74604,14049],{"class":701},[425,74606,2057],{"class":1155},[425,74608,3038],{"class":691},[425,74610,74569],{"class":1155},[425,74612,74572],{"class":435},[425,74614,46321],{"class":1155},[425,74616,74557],{"class":701},[425,74618,74602],{"class":431},[425,74620,14049],{"class":701},[425,74622,948],{"class":1155},[425,74624,74557],{"class":701},[425,74626,74602],{"class":431},[425,74628,2976],{"class":701},[425,74630,74631,74633,74635,74637,74639,74642,74644,74646,74648,74650,74652,74654,74656,74658,74660,74662,74664,74666],{"class":427,"line":34328},[425,74632,58983],{"class":1155},[425,74634,9428],{"class":691},[425,74636,14563],{"class":1155},[425,74638,74557],{"class":701},[425,74640,74641],{"class":431},"getSeconds",[425,74643,14049],{"class":701},[425,74645,2057],{"class":1155},[425,74647,3038],{"class":691},[425,74649,74569],{"class":1155},[425,74651,74572],{"class":435},[425,74653,46321],{"class":1155},[425,74655,74557],{"class":701},[425,74657,74641],{"class":431},[425,74659,14049],{"class":701},[425,74661,948],{"class":1155},[425,74663,74557],{"class":701},[425,74665,74641],{"class":431},[425,74667,2976],{"class":701},[425,74669,74670,74672,74675,74677,74679,74682,74684,74687,74689,74692,74694,74696,74699,74701,74703,74705,74707,74709,74711,74714,74716,74719,74721,74724,74726,74728,74730],{"class":427,"line":34334},[425,74671,58983],{"class":1155},[425,74673,74674],{"class":691}," str",[425,74676,14563],{"class":1155},[425,74678,63658],{"class":435},[425,74680,74681],{"class":701},"date",[425,74683,1706],{"class":435},[425,74685,74686],{"class":431},"getFullYear",[425,74688,3427],{"class":435},[425,74690,74691],{"class":435},"}\u002F${",[425,74693,74681],{"class":701},[425,74695,1706],{"class":435},[425,74697,74698],{"class":431},"getMonth",[425,74700,14049],{"class":435},[425,74702,1629],{"class":1155},[425,74704,26109],{"class":691},[425,74706,74691],{"class":435},[425,74708,74681],{"class":701},[425,74710,1706],{"class":435},[425,74712,74713],{"class":431},"getDate",[425,74715,3427],{"class":435},[425,74717,74718],{"class":435},"} ${",[425,74720,1564],{"class":701},[425,74722,74723],{"class":435},"}:${",[425,74725,1692],{"class":701},[425,74727,74723],{"class":435},[425,74729,1843],{"class":701},[425,74731,74732],{"class":435},"}`\n",[425,74734,74735,74738],{"class":427,"line":34340},[425,74736,74737],{"class":1155},"      return",[425,74739,74740],{"class":701}," str\n",[425,74742,74743],{"class":427,"line":34346},[425,74744,3187],{"class":701},[425,74746,74747],{"class":427,"line":34373},[425,74748,74749],{"class":1216},"    \u002F\u002F 渲染函数\n",[425,74751,74752,74754,74756,74758,74760,74762,74764,74766],{"class":427,"line":34397},[425,74753,12220],{"class":1155},[425,74755,70502],{"class":691},[425,74757,14563],{"class":1155},[425,74759,55151],{"class":701},[425,74761,55154],{"class":431},[425,74763,1159],{"class":701},[425,74765,70513],{"class":435},[425,74767,1165],{"class":701},[425,74769,74770,74772,74774],{"class":427,"line":34403},[425,74771,70839],{"class":1155},[425,74773,70842],{"class":431},[425,74775,11852],{"class":701},[425,74777,74778],{"class":427,"line":34409},[425,74779,74780],{"class":1216},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[425,74782,74783],{"class":427,"line":34415},[425,74784,74785],{"class":1216},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[425,74787,74788,74790,74793,74795,74797,74800,74802,74804,74806,74809,74811,74814],{"class":427,"line":34426},[425,74789,58983],{"class":1155},[425,74791,74792],{"class":691}," trArr",[425,74794,14563],{"class":1155},[425,74796,52720],{"class":701},[425,74798,74799],{"class":431},"map",[425,74801,1159],{"class":701},[425,74803,55204],{"class":1155},[425,74805,2664],{"class":701},[425,74807,74808],{"class":6216},"ele",[425,74810,13434],{"class":701},[425,74812,74813],{"class":6216},"index",[425,74815,13441],{"class":701},[425,74817,74818,74820],{"class":427,"line":34437},[425,74819,15749],{"class":1155},[425,74821,70923],{"class":435},[425,74823,74824],{"class":427,"line":34443},[425,74825,74826],{"class":435},"      \u003Ctr>\n",[425,74828,74829,74831,74833,74835,74838],{"class":427,"line":34460},[425,74830,70928],{"class":435},[425,74832,74808],{"class":701},[425,74834,1706],{"class":435},[425,74836,74837],{"class":701},"unameId",[425,74839,70943],{"class":435},[425,74841,74842,74844,74846,74848,74850],{"class":427,"line":34483},[425,74843,70928],{"class":435},[425,74845,74808],{"class":701},[425,74847,1706],{"class":435},[425,74849,70959],{"class":701},[425,74851,70943],{"class":435},[425,74853,74854,74856,74858,74860,74862],{"class":427,"line":34506},[425,74855,70928],{"class":435},[425,74857,74808],{"class":701},[425,74859,1706],{"class":435},[425,74861,70976],{"class":701},[425,74863,70943],{"class":435},[425,74865,74866,74868,74870,74872,74874],{"class":427,"line":34512},[425,74867,70928],{"class":435},[425,74869,74808],{"class":701},[425,74871,1706],{"class":435},[425,74873,70993],{"class":701},[425,74875,70943],{"class":435},[425,74877,74878,74880,74882,74884,74886],{"class":427,"line":34517},[425,74879,70928],{"class":435},[425,74881,74808],{"class":701},[425,74883,1706],{"class":435},[425,74885,71010],{"class":701},[425,74887,70943],{"class":435},[425,74889,74890,74892,74894,74896,74898],{"class":427,"line":34526},[425,74891,70928],{"class":435},[425,74893,74808],{"class":701},[425,74895,1706],{"class":435},[425,74897,71027],{"class":701},[425,74899,70943],{"class":435},[425,74901,74902,74904,74906,74908,74910],{"class":427,"line":34536},[425,74903,70928],{"class":435},[425,74905,74808],{"class":701},[425,74907,1706],{"class":435},[425,74909,3387],{"class":701},[425,74911,70943],{"class":435},[425,74913,74914],{"class":427,"line":34542},[425,74915,74370],{"class":435},[425,74917,74918,74921,74923],{"class":427,"line":34547},[425,74919,74920],{"class":435},"          \u003Ca href=\"#\" data-id=\"${",[425,74922,74813],{"class":701},[425,74924,74925],{"class":435},"}\">删除\u003C\u002Fa>\n",[425,74927,74928],{"class":427,"line":34553},[425,74929,74380],{"class":435},[425,74931,74932],{"class":427,"line":34566},[425,74933,74934],{"class":435},"      \u003C\u002Ftr>\n",[425,74936,74937],{"class":427,"line":34572},[425,74938,74939],{"class":435},"  `\n",[425,74941,74942],{"class":427,"line":34583},[425,74943,65570],{"class":701},[425,74945,74946,74948,74950],{"class":427,"line":34594},[425,74947,58999],{"class":701},[425,74949,59002],{"class":431},[425,74951,74952],{"class":701},"(trArr)\n",[425,74954,74955],{"class":427,"line":34613},[425,74956,3400],{"emptyLinePlaceholder":1084},[425,74958,74959],{"class":427,"line":50273},[425,74960,74961],{"class":1216},"      \u002F\u002F (2) 把数组转换为字符串join\n",[425,74963,74964],{"class":427,"line":50278},[425,74965,74966],{"class":1216},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[425,74968,74969,74971,74973,74976,74979,74981,74984],{"class":427,"line":50287},[425,74970,70854],{"class":701},[425,74972,1204],{"class":1155},[425,74974,74975],{"class":701}," trArr.",[425,74977,74978],{"class":431},"join",[425,74980,1159],{"class":701},[425,74982,74983],{"class":435},"''",[425,74985,1165],{"class":701},[425,74987,74988],{"class":427,"line":50296},[425,74989,74990],{"class":1216},"      \u002F\u002F 显示共有几条\n",[425,74992,74993,74995,74997,74999,75002,75005,75007,75009],{"class":427,"line":50301},[425,74994,56526],{"class":701},[425,74996,55154],{"class":431},[425,74998,1159],{"class":701},[425,75000,75001],{"class":435},"'.total span'",[425,75003,75004],{"class":701},").innerHTML ",[425,75006,1204],{"class":1155},[425,75008,52720],{"class":701},[425,75010,56586],{"class":691},[425,75012,75013],{"class":427,"line":50306},[425,75014,3187],{"class":701},[425,75016,75017],{"class":427,"line":50311},[425,75018,75019],{"class":1216},"    \u002F\u002F render()\n",[425,75021,75022],{"class":427,"line":50324},[425,75023,3400],{"emptyLinePlaceholder":1084},[425,75025,75026],{"class":427,"line":50329},[425,75027,75028],{"class":1216},"    \u002F\u002F 获取DOM对象\n",[425,75030,75031,75033,75035,75037,75039,75041,75043,75045],{"class":427,"line":50338},[425,75032,12220],{"class":1155},[425,75034,70576],{"class":691},[425,75036,14563],{"class":1155},[425,75038,55151],{"class":701},[425,75040,55154],{"class":431},[425,75042,1159],{"class":701},[425,75044,70587],{"class":435},[425,75046,1165],{"class":701},[425,75048,75049,75051,75053,75055,75057,75059,75061,75063],{"class":427,"line":50347},[425,75050,12220],{"class":1155},[425,75052,70403],{"class":691},[425,75054,14563],{"class":1155},[425,75056,55151],{"class":701},[425,75058,55154],{"class":431},[425,75060,1159],{"class":701},[425,75062,70414],{"class":435},[425,75064,1165],{"class":701},[425,75066,75067,75069,75071,75073,75075,75077,75079,75081],{"class":427,"line":50364},[425,75068,12220],{"class":1155},[425,75070,16686],{"class":691},[425,75072,14563],{"class":1155},[425,75074,55151],{"class":701},[425,75076,55154],{"class":431},[425,75078,1159],{"class":701},[425,75080,70433],{"class":435},[425,75082,1165],{"class":701},[425,75084,75086,75088,75090,75092,75094,75096,75098,75100],{"class":427,"line":75085},231,[425,75087,12220],{"class":1155},[425,75089,70462],{"class":691},[425,75091,14563],{"class":1155},[425,75093,55151],{"class":701},[425,75095,55154],{"class":431},[425,75097,1159],{"class":701},[425,75099,70473],{"class":435},[425,75101,1165],{"class":701},[425,75103,75105,75107,75109,75111,75113,75115,75117,75119],{"class":427,"line":75104},232,[425,75106,12220],{"class":1155},[425,75108,70442],{"class":691},[425,75110,14563],{"class":1155},[425,75112,55151],{"class":701},[425,75114,55154],{"class":431},[425,75116,1159],{"class":701},[425,75118,70453],{"class":435},[425,75120,1165],{"class":701},[425,75122,75124,75126,75128,75130,75132,75134,75136,75138],{"class":427,"line":75123},233,[425,75125,12220],{"class":1155},[425,75127,70482],{"class":691},[425,75129,14563],{"class":1155},[425,75131,55151],{"class":701},[425,75133,55154],{"class":431},[425,75135,1159],{"class":701},[425,75137,70493],{"class":435},[425,75139,1165],{"class":701},[425,75141,75143],{"class":427,"line":75142},234,[425,75144,3400],{"emptyLinePlaceholder":1084},[425,75146,75148],{"class":427,"line":75147},235,[425,75149,75150],{"class":1216},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[425,75152,75154,75156,75158,75160,75162,75164,75166,75168,75170],{"class":427,"line":75153},236,[425,75155,70594],{"class":701},[425,75157,58568],{"class":431},[425,75159,1159],{"class":701},[425,75161,70601],{"class":435},[425,75163,13434],{"class":701},[425,75165,55204],{"class":1155},[425,75167,2664],{"class":701},[425,75169,1232],{"class":6216},[425,75171,13441],{"class":701},[425,75173,75175],{"class":427,"line":75174},237,[425,75176,75177],{"class":1216},"      \u002F\u002F 禁止浏览器跳转\n",[425,75179,75181,75183,75185],{"class":427,"line":75180},238,[425,75182,70621],{"class":701},[425,75184,70624],{"class":431},[425,75186,2976],{"class":701},[425,75188,75190],{"class":427,"line":75189},239,[425,75191,75192],{"class":1216},"      \u002F\u002F 非空判断\n",[425,75194,75196],{"class":427,"line":75195},240,[425,75197,75198],{"class":1216},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[425,75200,75202],{"class":427,"line":75201},241,[425,75203,75204],{"class":1216},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[425,75206,75208,75210,75212,75214,75217,75219,75222,75225,75227,75229],{"class":427,"line":75207},242,[425,75209,55235],{"class":1155},[425,75211,2664],{"class":701},[425,75213,1376],{"class":1155},[425,75215,75216],{"class":701},"uname.value ",[425,75218,72112],{"class":1155},[425,75220,75221],{"class":1155}," !",[425,75223,75224],{"class":701},"age.value ",[425,75226,72112],{"class":1155},[425,75228,75221],{"class":1155},[425,75230,75231],{"class":701},"salary.value) {\n",[425,75233,75235,75237,75239,75241,75243],{"class":427,"line":75234},243,[425,75236,15749],{"class":1155},[425,75238,70695],{"class":431},[425,75240,1159],{"class":701},[425,75242,70700],{"class":435},[425,75244,1165],{"class":701},[425,75246,75248],{"class":427,"line":75247},244,[425,75249,53153],{"class":701},[425,75251,75253,75255,75257],{"class":427,"line":75252},245,[425,75254,58762],{"class":701},[425,75256,52639],{"class":431},[425,75258,75259],{"class":701},"({\n",[425,75261,75263],{"class":427,"line":75262},246,[425,75264,75265],{"class":1216},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[425,75267,75269],{"class":427,"line":75268},247,[425,75270,75271],{"class":1216},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[425,75273,75275],{"class":427,"line":75274},248,[425,75276,75277],{"class":1216},"        \u002F\u002F 对象的序号应为数组长度+1\n",[425,75279,75281],{"class":427,"line":75280},249,[425,75282,75283],{"class":1216},"        \u002F\u002F unameId: arr.length + 1,\n",[425,75285,75287],{"class":427,"line":75286},250,[425,75288,3400],{"emptyLinePlaceholder":1084},[425,75290,75292],{"class":427,"line":75291},251,[425,75293,75294],{"class":1216},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[425,75296,75298],{"class":427,"line":75297},252,[425,75299,75300],{"class":1216},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[425,75302,75304],{"class":427,"line":75303},253,[425,75305,75306],{"class":1216},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[425,75308,75310],{"class":427,"line":75309},254,[425,75311,75312],{"class":1216},"        \u002F\u002F 0当假看\n",[425,75314,75316,75319,75321,75323,75326,75328,75330,75332,75335,75337,75339,75342,75344],{"class":427,"line":75315},255,[425,75317,75318],{"class":701},"        unameId: arr.",[425,75320,52723],{"class":691},[425,75322,74569],{"class":1155},[425,75324,75325],{"class":701}," arr[arr.",[425,75327,52723],{"class":691},[425,75329,53026],{"class":1155},[425,75331,26109],{"class":691},[425,75333,75334],{"class":701},"].unameId ",[425,75336,1629],{"class":1155},[425,75338,26109],{"class":691},[425,75340,75341],{"class":1155}," :",[425,75343,26109],{"class":691},[425,75345,32221],{"class":701},[425,75347,75349],{"class":427,"line":75348},256,[425,75350,70748],{"class":701},[425,75352,75354],{"class":427,"line":75353},257,[425,75355,70753],{"class":701},[425,75357,75359],{"class":427,"line":75358},258,[425,75360,70763],{"class":701},[425,75362,75364],{"class":427,"line":75363},259,[425,75365,70758],{"class":701},[425,75367,75369],{"class":427,"line":75368},260,[425,75370,75371],{"class":701},"        city: city.value,\n",[425,75373,75375],{"class":427,"line":75374},261,[425,75376,75377],{"class":1216},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[425,75379,75381],{"class":427,"line":75380},262,[425,75382,75383],{"class":1216},"        \u002F\u002F time: new Date().toDateString()\n",[425,75385,75387,75390,75393],{"class":427,"line":75386},263,[425,75388,75389],{"class":701},"        time: ",[425,75391,75392],{"class":431},"getTime",[425,75394,2976],{"class":701},[425,75396,75398],{"class":427,"line":75397},264,[425,75399,65570],{"class":701},[425,75401,75403],{"class":427,"line":75402},265,[425,75404,75405],{"class":1216},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[425,75407,75409,75411],{"class":427,"line":75408},266,[425,75410,70823],{"class":431},[425,75412,2976],{"class":701},[425,75414,75416,75418,75420,75422,75424],{"class":427,"line":75415},267,[425,75417,70806],{"class":691},[425,75419,1706],{"class":701},[425,75421,70811],{"class":431},[425,75423,14049],{"class":701},[425,75425,75426],{"class":1216},"\u002F\u002F重置表单\n",[425,75428,75430],{"class":427,"line":75429},268,[425,75431,75432],{"class":1216},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[425,75434,75436,75439,75441,75443,75446,75448,75450,75452,75454],{"class":427,"line":75435},269,[425,75437,75438],{"class":701},"      localStorage.",[425,75440,72409],{"class":431},[425,75442,1159],{"class":701},[425,75444,75445],{"class":435},"'data'",[425,75447,13434],{"class":701},[425,75449,72419],{"class":691},[425,75451,1706],{"class":701},[425,75453,72424],{"class":431},[425,75455,75456],{"class":701},"(arr))\n",[425,75458,75460],{"class":427,"line":75459},270,[425,75461,34216],{"class":701},[425,75463,75465],{"class":427,"line":75464},271,[425,75466,3400],{"emptyLinePlaceholder":1084},[425,75468,75470],{"class":427,"line":75469},272,[425,75471,75472],{"class":1216},"    \u002F\u002F 3.删除业务\n",[425,75474,75476],{"class":427,"line":75475},273,[425,75477,75478],{"class":1216},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[425,75480,75482,75484,75486,75488,75490,75492,75494,75496,75498],{"class":427,"line":75481},274,[425,75483,71096],{"class":701},[425,75485,58568],{"class":431},[425,75487,1159],{"class":701},[425,75489,58573],{"class":435},[425,75491,13434],{"class":701},[425,75493,55204],{"class":1155},[425,75495,2664],{"class":701},[425,75497,1232],{"class":6216},[425,75499,13441],{"class":701},[425,75501,75503],{"class":427,"line":75502},275,[425,75504,75505],{"class":1216},"      \u002F\u002F 判断是否点击的是删除按钮\n",[425,75507,75509,75511,75513,75515,75517],{"class":427,"line":75508},276,[425,75510,55235],{"class":1155},[425,75512,67789],{"class":701},[425,75514,55241],{"class":1155},[425,75516,69011],{"class":435},[425,75518,13441],{"class":701},[425,75520,75522],{"class":427,"line":75521},277,[425,75523,75524],{"class":1216},"        \u002F\u002F alert(1)\n",[425,75526,75528],{"class":427,"line":75527},278,[425,75529,75530],{"class":1216},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[425,75532,75534],{"class":427,"line":75533},279,[425,75535,75536],{"class":1216},"        \u002F\u002F console.log(e.target)\n",[425,75538,75540],{"class":427,"line":75539},280,[425,75541,75542],{"class":1216},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[425,75544,75546],{"class":427,"line":75545},281,[425,75547,3400],{"emptyLinePlaceholder":1084},[425,75549,75551],{"class":427,"line":75550},282,[425,75552,75553],{"class":1216},"        \u002F\u002F 确认框，确然是否真的要删除\n",[425,75555,75557],{"class":427,"line":75556},283,[425,75558,75559],{"class":1216},"        \u002F\u002F confirm()为确认框\n",[425,75561,75563],{"class":427,"line":75562},284,[425,75564,75565],{"class":1216},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[425,75567,75569,75571,75573,75576,75578,75581],{"class":427,"line":75568},285,[425,75570,3497],{"class":1155},[425,75572,2664],{"class":701},[425,75574,75575],{"class":431},"confirm",[425,75577,1159],{"class":701},[425,75579,75580],{"class":435},"'您确定要删除这条数据吗？'",[425,75582,75583],{"class":701},")) {\n",[425,75585,75587,75590,75592,75594,75596],{"class":427,"line":75586},286,[425,75588,75589],{"class":701},"          arr.",[425,75591,58765],{"class":431},[425,75593,71149],{"class":701},[425,75595,1367],{"class":691},[425,75597,1165],{"class":701},[425,75599,75601],{"class":427,"line":75600},287,[425,75602,75603],{"class":1216},"          \u002F\u002F 3.4 重新渲染页面\n",[425,75605,75607,75610],{"class":427,"line":75606},288,[425,75608,75609],{"class":431},"          render",[425,75611,2976],{"class":701},[425,75613,75615],{"class":427,"line":75614},289,[425,75616,75617],{"class":1216},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[425,75619,75621,75624,75626,75628,75630,75632,75634,75636,75638],{"class":427,"line":75620},290,[425,75622,75623],{"class":701},"          localStorage.",[425,75625,72409],{"class":431},[425,75627,1159],{"class":701},[425,75629,75445],{"class":435},[425,75631,13434],{"class":701},[425,75633,72419],{"class":691},[425,75635,1706],{"class":701},[425,75637,72424],{"class":431},[425,75639,75456],{"class":701},[425,75641,75643],{"class":427,"line":75642},291,[425,75644,3529],{"class":701},[425,75646,75648],{"class":427,"line":75647},292,[425,75649,53153],{"class":701},[425,75651,75653],{"class":427,"line":75652},293,[425,75654,3400],{"emptyLinePlaceholder":1084},[425,75656,75658],{"class":427,"line":75657},294,[425,75659,34216],{"class":701},[425,75661,75663],{"class":427,"line":75662},295,[425,75664,3400],{"emptyLinePlaceholder":1084},[425,75666,75668,75670,75672],{"class":427,"line":75667},296,[425,75669,53172],{"class":701},[425,75671,52568],{"class":52055},[425,75673,52062],{"class":701},[425,75675,75677,75679,75681],{"class":427,"line":75676},297,[425,75678,52540],{"class":701},[425,75680,52555],{"class":52055},[425,75682,52062],{"class":701},[425,75684,75686],{"class":427,"line":75685},298,[425,75687,3400],{"emptyLinePlaceholder":1084},[425,75689,75691,75693,75695],{"class":427,"line":75690},299,[425,75692,52540],{"class":701},[425,75694,51390],{"class":52055},[425,75696,52062],{"class":701},[1099,75698,75700],{"id":75699},"_36-正则表达式","3.6 正则表达式",[19,75702,75703],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,75705,75706],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,75708,75709],{},"正则表达式的作用：",[447,75711,75712,75719,75725],{},[450,75713,75714,75715,75718],{},"表单验证（ ",[400,75716,75717],{},"匹配"," ）",[450,75720,75721,75722,75718],{},"过滤敏感词（ ",[400,75723,75724],{},"替换",[450,75726,75727,75728,75718],{},"字符串中提取我们想要的部分（ ",[400,75729,75730],{},"提取",[14,75732,75734],{"id":75733},"_361-语法","3.6.1 语法",[19,75736,75737],{},"正则表达式使用步骤：",[972,75739,75740,75743],{},[450,75741,75742],{},"定义规则",[450,75744,75745],{},"查找是否匹配",[19,75747,75748],{},"正则表达式里边不需要写引号",[19,75750,75751],{},[393,75752],{"alt":395,"src":75753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,75755,75756],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,75758,75759],{},"reg.test(str)",[19,75761,75762],{},[393,75763],{"alt":395,"src":75764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,75766,75767],{},[393,75768],{"alt":395,"src":75769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[14,75771,75773],{"id":75772},"_362-元字符","3.6.2 元字符",[972,75775,75776,75779,75782,75785,75792],{},[450,75777,75778],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[450,75780,75781],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[450,75783,75784],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[450,75786,75787,75788],{},"正则验证工具：",[22,75789,75790],{"href":75790,"rel":75791},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[26],[450,75793,75794],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22995,75796,75798],{"id":75797},"_3621-边界符","3.6.2.1 边界符",[19,75800,75801],{},[393,75802],{"alt":395,"src":75803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,75805,75806],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,75808,75809],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,75811,75812],{},"只匹配一次",[19,75814,75815],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22995,75817,75819],{"id":75818},"_3622-量词","3.6.2.2 量词",[19,75821,75822],{},[393,75823],{"alt":395,"src":75824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,75826,75827],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22995,75829,75831],{"id":75830},"_3623-元字符","3.6.2.3 元字符",[19,75833,75834],{},[393,75835],{"alt":395,"src":75836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,75838,75839],{},"匹配的是a或b或c []只选一个",[19,75841,75842],{},[393,75843],{"alt":395,"src":75844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,75846,75847],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,75849,75850],{},[393,75851],{"alt":395,"src":75852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,75854,75855],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,75857,75858],{},[393,75859],{"alt":395,"src":75860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[416,75862,75864],{"className":51388,"code":75863,"language":51390,"meta":395,"style":395},"\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",[422,75865,75866,75876,75890,75894,75902,75916,75936,75948,75956,75960,75968,75976,75981,76012,76039,76067,76071,76076,76104,76135,76140,76145,76176,76208,76240,76244,76249,76280,76310,76340,76344,76349,76380,76411,76441,76471,76475,76480,76513,76517,76522,76553,76584,76588,76593,76624,76654,76685,76689,76694,76726,76757,76788,76815,76846,76878,76911,76942,76973,77005,77036,77044,77052,77056],{"__ignoreMap":395},[425,75867,75868,75870,75872,75874],{"class":427,"line":428},[425,75869,52052],{"class":701},[425,75871,52056],{"class":52055},[425,75873,52059],{"class":431},[425,75875,52062],{"class":701},[425,75877,75878,75880,75882,75884,75886,75888],{"class":427,"line":698},[425,75879,2057],{"class":701},[425,75881,51390],{"class":52055},[425,75883,52071],{"class":431},[425,75885,1204],{"class":701},[425,75887,52076],{"class":435},[425,75889,52062],{"class":701},[425,75891,75892],{"class":427,"line":710},[425,75893,3400],{"emptyLinePlaceholder":1084},[425,75895,75896,75898,75900],{"class":427,"line":721},[425,75897,2057],{"class":701},[425,75899,52089],{"class":52055},[425,75901,52062],{"class":701},[425,75903,75904,75906,75908,75910,75912,75914],{"class":427,"line":735},[425,75905,52899],{"class":701},[425,75907,52099],{"class":52055},[425,75909,52102],{"class":431},[425,75911,1204],{"class":701},[425,75913,52107],{"class":435},[425,75915,52062],{"class":701},[425,75917,75918,75920,75922,75924,75926,75928,75930,75932,75934],{"class":427,"line":743},[425,75919,52899],{"class":701},[425,75921,52099],{"class":52055},[425,75923,15917],{"class":431},[425,75925,1204],{"class":701},[425,75927,52146],{"class":435},[425,75929,52126],{"class":431},[425,75931,1204],{"class":701},[425,75933,52153],{"class":435},[425,75935,52062],{"class":701},[425,75937,75938,75940,75942,75944,75946],{"class":427,"line":751},[425,75939,52899],{"class":701},[425,75941,52162],{"class":52055},[425,75943,52165],{"class":701},[425,75945,52162],{"class":52055},[425,75947,52062],{"class":701},[425,75949,75950,75952,75954],{"class":427,"line":759},[425,75951,52540],{"class":701},[425,75953,52089],{"class":52055},[425,75955,52062],{"class":701},[425,75957,75958],{"class":427,"line":770},[425,75959,3400],{"emptyLinePlaceholder":1084},[425,75961,75962,75964,75966],{"class":427,"line":780},[425,75963,2057],{"class":701},[425,75965,52555],{"class":52055},[425,75967,52062],{"class":701},[425,75969,75970,75972,75974],{"class":427,"line":790},[425,75971,52899],{"class":701},[425,75973,52568],{"class":52055},[425,75975,52062],{"class":701},[425,75977,75978],{"class":427,"line":805},[425,75979,75980],{"class":1216},"    \u002F\u002F 元字符中\n",[425,75982,75983,75985,75987,75989,75991,75994,75996,75998,76001,76003,76006,76009],{"class":427,"line":818},[425,75984,74508],{"class":701},[425,75986,59002],{"class":431},[425,75988,1159],{"class":701},[425,75990,1732],{"class":435},[425,75992,75993],{"class":48732},"哈",[425,75995,1732],{"class":435},[425,75997,1706],{"class":701},[425,75999,76000],{"class":431},"test",[425,76002,1159],{"class":701},[425,76004,76005],{"class":435},"'哈'",[425,76007,76008],{"class":701},"))  ",[425,76010,76011],{"class":1216},"\u002F\u002Ftrue\n",[425,76013,76014,76016,76018,76020,76022,76024,76026,76028,76030,76032,76035,76037],{"class":427,"line":831},[425,76015,74508],{"class":701},[425,76017,59002],{"class":431},[425,76019,1159],{"class":701},[425,76021,1732],{"class":435},[425,76023,75993],{"class":48732},[425,76025,1732],{"class":435},[425,76027,1706],{"class":701},[425,76029,76000],{"class":431},[425,76031,1159],{"class":701},[425,76033,76034],{"class":435},"'哈哈'",[425,76036,76008],{"class":701},[425,76038,76011],{"class":1216},[425,76040,76041,76043,76045,76047,76049,76051,76053,76055,76057,76059,76062,76065],{"class":427,"line":841},[425,76042,74508],{"class":701},[425,76044,59002],{"class":431},[425,76046,1159],{"class":701},[425,76048,1732],{"class":435},[425,76050,75993],{"class":48732},[425,76052,1732],{"class":435},[425,76054,1706],{"class":701},[425,76056,76000],{"class":431},[425,76058,1159],{"class":701},[425,76060,76061],{"class":435},"'二哈'",[425,76063,76064],{"class":701},"))   ",[425,76066,76011],{"class":1216},[425,76068,76069],{"class":427,"line":852},[425,76070,3400],{"emptyLinePlaceholder":1084},[425,76072,76073],{"class":427,"line":862},[425,76074,76075],{"class":1216},"    \u002F\u002F 1.边界符\n",[425,76077,76078,76080,76082,76084,76086,76088,76090,76092,76094,76096,76098,76100,76102],{"class":427,"line":878},[425,76079,74508],{"class":701},[425,76081,59002],{"class":431},[425,76083,1159],{"class":701},[425,76085,1732],{"class":435},[425,76087,2113],{"class":1155},[425,76089,75993],{"class":48732},[425,76091,1732],{"class":435},[425,76093,1706],{"class":701},[425,76095,76000],{"class":431},[425,76097,1159],{"class":701},[425,76099,76005],{"class":435},[425,76101,76008],{"class":701},[425,76103,76011],{"class":1216},[425,76105,76106,76108,76110,76112,76114,76116,76118,76120,76122,76124,76126,76128,76130,76132],{"class":427,"line":914},[425,76107,74508],{"class":701},[425,76109,59002],{"class":431},[425,76111,1159],{"class":701},[425,76113,1732],{"class":435},[425,76115,2113],{"class":1155},[425,76117,75993],{"class":48732},[425,76119,1451],{"class":1155},[425,76121,1732],{"class":435},[425,76123,1706],{"class":701},[425,76125,76000],{"class":431},[425,76127,1159],{"class":701},[425,76129,76034],{"class":435},[425,76131,76008],{"class":701},[425,76133,76134],{"class":1216},"\u002F\u002Ffalse\n",[425,76136,76137],{"class":427,"line":943},[425,76138,76139],{"class":1216},"    \u002F\u002F 2.量词\n",[425,76141,76142],{"class":427,"line":956},[425,76143,76144],{"class":1216},"    \u002F\u002F 量词 * 类似于 >= 0\n",[425,76146,76147,76149,76151,76153,76155,76157,76159,76162,76164,76166,76168,76170,76172,76174],{"class":427,"line":964},[425,76148,74508],{"class":701},[425,76150,59002],{"class":431},[425,76152,1159],{"class":701},[425,76154,1732],{"class":435},[425,76156,2113],{"class":1155},[425,76158,75993],{"class":48732},[425,76160,76161],{"class":1155},"*$",[425,76163,1732],{"class":435},[425,76165,1706],{"class":701},[425,76167,76000],{"class":431},[425,76169,1159],{"class":701},[425,76171,76034],{"class":435},[425,76173,76008],{"class":701},[425,76175,76011],{"class":1216},[425,76177,76178,76180,76182,76184,76186,76188,76190,76192,76194,76196,76198,76200,76203,76205],{"class":427,"line":2733},[425,76179,74508],{"class":701},[425,76181,59002],{"class":431},[425,76183,1159],{"class":701},[425,76185,1732],{"class":435},[425,76187,2113],{"class":1155},[425,76189,75993],{"class":48732},[425,76191,76161],{"class":1155},[425,76193,1732],{"class":435},[425,76195,1706],{"class":701},[425,76197,76000],{"class":431},[425,76199,1159],{"class":701},[425,76201,76202],{"class":435},"'二哈好傻'",[425,76204,76008],{"class":701},[425,76206,76207],{"class":1216},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[425,76209,76210,76212,76214,76216,76218,76220,76222,76224,76226,76228,76230,76232,76235,76237],{"class":427,"line":2750},[425,76211,74508],{"class":701},[425,76213,59002],{"class":431},[425,76215,1159],{"class":701},[425,76217,1732],{"class":435},[425,76219,2113],{"class":1155},[425,76221,75993],{"class":48732},[425,76223,76161],{"class":1155},[425,76225,1732],{"class":435},[425,76227,1706],{"class":701},[425,76229,76000],{"class":431},[425,76231,1159],{"class":701},[425,76233,76234],{"class":435},"'哈好哈'",[425,76236,76064],{"class":701},[425,76238,76239],{"class":1216},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[425,76241,76242],{"class":427,"line":2755},[425,76243,3400],{"emptyLinePlaceholder":1084},[425,76245,76246],{"class":427,"line":2760},[425,76247,76248],{"class":1216},"    \u002F\u002F +类似于>=1\n",[425,76250,76251,76253,76255,76257,76259,76261,76263,76266,76268,76270,76272,76274,76276,76278],{"class":427,"line":2765},[425,76252,74508],{"class":701},[425,76254,59002],{"class":431},[425,76256,1159],{"class":701},[425,76258,1732],{"class":435},[425,76260,2113],{"class":1155},[425,76262,75993],{"class":48732},[425,76264,76265],{"class":1155},"+$",[425,76267,1732],{"class":435},[425,76269,1706],{"class":701},[425,76271,76000],{"class":431},[425,76273,1159],{"class":701},[425,76275,76034],{"class":435},[425,76277,76008],{"class":701},[425,76279,76011],{"class":1216},[425,76281,76282,76284,76286,76288,76290,76292,76294,76296,76298,76300,76302,76304,76306,76308],{"class":427,"line":2779},[425,76283,74508],{"class":701},[425,76285,59002],{"class":431},[425,76287,1159],{"class":701},[425,76289,1732],{"class":435},[425,76291,2113],{"class":1155},[425,76293,75993],{"class":48732},[425,76295,76265],{"class":1155},[425,76297,1732],{"class":435},[425,76299,1706],{"class":701},[425,76301,76000],{"class":431},[425,76303,1159],{"class":701},[425,76305,76202],{"class":435},[425,76307,76008],{"class":701},[425,76309,76207],{"class":1216},[425,76311,76312,76314,76316,76318,76320,76322,76324,76326,76328,76330,76332,76334,76336,76338],{"class":427,"line":2784},[425,76313,74508],{"class":701},[425,76315,59002],{"class":431},[425,76317,1159],{"class":701},[425,76319,1732],{"class":435},[425,76321,2113],{"class":1155},[425,76323,75993],{"class":48732},[425,76325,76265],{"class":1155},[425,76327,1732],{"class":435},[425,76329,1706],{"class":701},[425,76331,76000],{"class":431},[425,76333,1159],{"class":701},[425,76335,76234],{"class":435},[425,76337,76064],{"class":701},[425,76339,76134],{"class":1216},[425,76341,76342],{"class":427,"line":3577},[425,76343,3400],{"emptyLinePlaceholder":1084},[425,76345,76346],{"class":427,"line":3591},[425,76347,76348],{"class":1216},"    \u002F\u002F ?类似于0次或一次\n",[425,76350,76351,76353,76355,76357,76359,76361,76364,76366,76368,76370,76372,76374,76376,76378],{"class":427,"line":3599},[425,76352,74508],{"class":701},[425,76354,59002],{"class":431},[425,76356,1159],{"class":701},[425,76358,1732],{"class":435},[425,76360,2113],{"class":1155},[425,76362,76363],{"class":48732},"哈？",[425,76365,1451],{"class":1155},[425,76367,1732],{"class":435},[425,76369,1706],{"class":701},[425,76371,76000],{"class":431},[425,76373,1159],{"class":701},[425,76375,74983],{"class":435},[425,76377,76064],{"class":701},[425,76379,76011],{"class":1216},[425,76381,76382,76384,76386,76388,76390,76392,76394,76397,76399,76401,76403,76405,76407,76409],{"class":427,"line":3604},[425,76383,74508],{"class":701},[425,76385,59002],{"class":431},[425,76387,1159],{"class":701},[425,76389,1732],{"class":435},[425,76391,2113],{"class":1155},[425,76393,75993],{"class":48732},[425,76395,76396],{"class":1155},"?$",[425,76398,1732],{"class":435},[425,76400,1706],{"class":701},[425,76402,76000],{"class":431},[425,76404,1159],{"class":701},[425,76406,76034],{"class":435},[425,76408,76008],{"class":701},[425,76410,76134],{"class":1216},[425,76412,76413,76415,76417,76419,76421,76423,76425,76427,76429,76431,76433,76435,76437,76439],{"class":427,"line":3610},[425,76414,74508],{"class":701},[425,76416,59002],{"class":431},[425,76418,1159],{"class":701},[425,76420,1732],{"class":435},[425,76422,2113],{"class":1155},[425,76424,75993],{"class":48732},[425,76426,76396],{"class":1155},[425,76428,1732],{"class":435},[425,76430,1706],{"class":701},[425,76432,76000],{"class":431},[425,76434,1159],{"class":701},[425,76436,76202],{"class":435},[425,76438,76008],{"class":701},[425,76440,76207],{"class":1216},[425,76442,76443,76445,76447,76449,76451,76453,76455,76457,76459,76461,76463,76465,76467,76469],{"class":427,"line":3616},[425,76444,74508],{"class":701},[425,76446,59002],{"class":431},[425,76448,1159],{"class":701},[425,76450,1732],{"class":435},[425,76452,2113],{"class":1155},[425,76454,75993],{"class":48732},[425,76456,76396],{"class":1155},[425,76458,1732],{"class":435},[425,76460,1706],{"class":701},[425,76462,76000],{"class":431},[425,76464,1159],{"class":701},[425,76466,76234],{"class":435},[425,76468,76008],{"class":701},[425,76470,76134],{"class":1216},[425,76472,76473],{"class":427,"line":3621},[425,76474,3400],{"emptyLinePlaceholder":1084},[425,76476,76477],{"class":427,"line":8948},[425,76478,76479],{"class":1216},"    \u002F\u002F {n}写几，就必须出现几次\n",[425,76481,76482,76484,76486,76488,76490,76492,76494,76497,76499,76501,76503,76505,76508,76511],{"class":427,"line":8972},[425,76483,74508],{"class":701},[425,76485,59002],{"class":431},[425,76487,1159],{"class":701},[425,76489,1732],{"class":435},[425,76491,2113],{"class":1155},[425,76493,75993],{"class":48732},[425,76495,76496],{"class":1155},"{4}$",[425,76498,1732],{"class":435},[425,76500,1706],{"class":701},[425,76502,76000],{"class":431},[425,76504,1159],{"class":701},[425,76506,76507],{"class":435},"'哈哈哈哈'",[425,76509,76510],{"class":701},")) ",[425,76512,76011],{"class":1216},[425,76514,76515],{"class":427,"line":8977},[425,76516,3400],{"emptyLinePlaceholder":1084},[425,76518,76519],{"class":427,"line":8983},[425,76520,76521],{"class":1216},"    \u002F\u002F {n,}大于等于n次\n",[425,76523,76524,76526,76528,76530,76532,76534,76536,76539,76541,76543,76545,76547,76549,76551],{"class":427,"line":9010},[425,76525,74508],{"class":701},[425,76527,59002],{"class":431},[425,76529,1159],{"class":701},[425,76531,1732],{"class":435},[425,76533,2113],{"class":1155},[425,76535,75993],{"class":48732},[425,76537,76538],{"class":1155},"{4,}$",[425,76540,1732],{"class":435},[425,76542,1706],{"class":701},[425,76544,76000],{"class":431},[425,76546,1159],{"class":701},[425,76548,76507],{"class":435},[425,76550,76510],{"class":701},[425,76552,76011],{"class":1216},[425,76554,76555,76557,76559,76561,76563,76565,76567,76569,76571,76573,76575,76577,76580,76582],{"class":427,"line":9015},[425,76556,74508],{"class":701},[425,76558,59002],{"class":431},[425,76560,1159],{"class":701},[425,76562,1732],{"class":435},[425,76564,2113],{"class":1155},[425,76566,75993],{"class":48732},[425,76568,76538],{"class":1155},[425,76570,1732],{"class":435},[425,76572,1706],{"class":701},[425,76574,76000],{"class":431},[425,76576,1159],{"class":701},[425,76578,76579],{"class":435},"'哈哈哈哈哈'",[425,76581,76510],{"class":701},[425,76583,76011],{"class":1216},[425,76585,76586],{"class":427,"line":9021},[425,76587,3400],{"emptyLinePlaceholder":1084},[425,76589,76590],{"class":427,"line":9033},[425,76591,76592],{"class":1216},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[425,76594,76595,76597,76599,76601,76603,76605,76607,76610,76612,76614,76616,76618,76620,76622],{"class":427,"line":9045},[425,76596,74508],{"class":701},[425,76598,59002],{"class":431},[425,76600,1159],{"class":701},[425,76602,1732],{"class":435},[425,76604,2113],{"class":1155},[425,76606,75993],{"class":48732},[425,76608,76609],{"class":1155},"{4,6}$",[425,76611,1732],{"class":435},[425,76613,1706],{"class":701},[425,76615,76000],{"class":431},[425,76617,1159],{"class":701},[425,76619,76507],{"class":435},[425,76621,76510],{"class":701},[425,76623,76011],{"class":1216},[425,76625,76626,76628,76630,76632,76634,76636,76638,76640,76642,76644,76646,76648,76650,76652],{"class":427,"line":9057},[425,76627,74508],{"class":701},[425,76629,59002],{"class":431},[425,76631,1159],{"class":701},[425,76633,1732],{"class":435},[425,76635,2113],{"class":1155},[425,76637,75993],{"class":48732},[425,76639,76609],{"class":1155},[425,76641,1732],{"class":435},[425,76643,1706],{"class":701},[425,76645,76000],{"class":431},[425,76647,1159],{"class":701},[425,76649,76579],{"class":435},[425,76651,76510],{"class":701},[425,76653,76011],{"class":1216},[425,76655,76656,76658,76660,76662,76664,76666,76668,76670,76672,76674,76676,76678,76681,76683],{"class":427,"line":10715},[425,76657,74508],{"class":701},[425,76659,59002],{"class":431},[425,76661,1159],{"class":701},[425,76663,1732],{"class":435},[425,76665,2113],{"class":1155},[425,76667,75993],{"class":48732},[425,76669,76609],{"class":1155},[425,76671,1732],{"class":435},[425,76673,1706],{"class":701},[425,76675,76000],{"class":431},[425,76677,1159],{"class":701},[425,76679,76680],{"class":435},"'哈哈哈哈哈哈哈'",[425,76682,76510],{"class":701},[425,76684,76134],{"class":1216},[425,76686,76687],{"class":427,"line":10740},[425,76688,3400],{"emptyLinePlaceholder":1084},[425,76690,76691],{"class":427,"line":10763},[425,76692,76693],{"class":1216},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[425,76695,76696,76698,76700,76702,76704,76706,76709,76711,76713,76715,76717,76719,76722,76724],{"class":427,"line":10787},[425,76697,74508],{"class":701},[425,76699,59002],{"class":431},[425,76701,1159],{"class":701},[425,76703,1732],{"class":435},[425,76705,2113],{"class":1155},[425,76707,76708],{"class":691},"[abc]",[425,76710,1451],{"class":1155},[425,76712,1732],{"class":435},[425,76714,1706],{"class":701},[425,76716,76000],{"class":431},[425,76718,1159],{"class":701},[425,76720,76721],{"class":435},"'a'",[425,76723,76008],{"class":701},[425,76725,76011],{"class":1216},[425,76727,76728,76730,76732,76734,76736,76738,76740,76742,76744,76746,76748,76750,76753,76755],{"class":427,"line":10792},[425,76729,74508],{"class":701},[425,76731,59002],{"class":431},[425,76733,1159],{"class":701},[425,76735,1732],{"class":435},[425,76737,2113],{"class":1155},[425,76739,76708],{"class":691},[425,76741,1451],{"class":1155},[425,76743,1732],{"class":435},[425,76745,1706],{"class":701},[425,76747,76000],{"class":431},[425,76749,1159],{"class":701},[425,76751,76752],{"class":435},"'b'",[425,76754,76008],{"class":701},[425,76756,76011],{"class":1216},[425,76758,76759,76761,76763,76765,76767,76769,76771,76773,76775,76777,76779,76781,76784,76786],{"class":427,"line":10797},[425,76760,74508],{"class":701},[425,76762,59002],{"class":431},[425,76764,1159],{"class":701},[425,76766,1732],{"class":435},[425,76768,2113],{"class":1155},[425,76770,76708],{"class":691},[425,76772,1451],{"class":1155},[425,76774,1732],{"class":435},[425,76776,1706],{"class":701},[425,76778,76000],{"class":431},[425,76780,1159],{"class":701},[425,76782,76783],{"class":435},"'c'",[425,76785,76008],{"class":701},[425,76787,76011],{"class":1216},[425,76789,76790,76792,76794,76796,76798,76800,76802,76804,76806,76808,76811,76813],{"class":427,"line":10802},[425,76791,74508],{"class":701},[425,76793,59002],{"class":431},[425,76795,1159],{"class":701},[425,76797,1732],{"class":435},[425,76799,76708],{"class":691},[425,76801,1732],{"class":435},[425,76803,1706],{"class":701},[425,76805,76000],{"class":431},[425,76807,1159],{"class":701},[425,76809,76810],{"class":435},"'ab'",[425,76812,76008],{"class":701},[425,76814,76011],{"class":1216},[425,76816,76817,76819,76821,76823,76825,76827,76829,76831,76833,76835,76837,76839,76841,76843],{"class":427,"line":10811},[425,76818,74508],{"class":701},[425,76820,59002],{"class":431},[425,76822,1159],{"class":701},[425,76824,1732],{"class":435},[425,76826,2113],{"class":1155},[425,76828,76708],{"class":691},[425,76830,1451],{"class":1155},[425,76832,1732],{"class":435},[425,76834,1706],{"class":701},[425,76836,76000],{"class":431},[425,76838,1159],{"class":701},[425,76840,76810],{"class":435},[425,76842,76008],{"class":701},[425,76844,76845],{"class":1216},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[425,76847,76848,76850,76852,76854,76856,76858,76860,76863,76865,76867,76869,76871,76873,76875],{"class":427,"line":10816},[425,76849,74508],{"class":701},[425,76851,59002],{"class":431},[425,76853,1159],{"class":701},[425,76855,1732],{"class":435},[425,76857,2113],{"class":1155},[425,76859,76708],{"class":691},[425,76861,76862],{"class":1155},"{2}$",[425,76864,1732],{"class":435},[425,76866,1706],{"class":701},[425,76868,76000],{"class":431},[425,76870,1159],{"class":701},[425,76872,76810],{"class":435},[425,76874,76008],{"class":701},[425,76876,76877],{"class":1216},"\u002F\u002Ftrue   可以选两个\n",[425,76879,76880,76882,76884,76886,76888,76890,76893,76895,76897,76899,76901,76903,76906,76908],{"class":427,"line":10822},[425,76881,74508],{"class":701},[425,76883,59002],{"class":431},[425,76885,1159],{"class":701},[425,76887,1732],{"class":435},[425,76889,2113],{"class":1155},[425,76891,76892],{"class":691},"[a-z]",[425,76894,1451],{"class":1155},[425,76896,1732],{"class":435},[425,76898,1706],{"class":701},[425,76900,76000],{"class":431},[425,76902,1159],{"class":701},[425,76904,76905],{"class":435},"'p'",[425,76907,76064],{"class":701},[425,76909,76910],{"class":1216},"\u002F\u002Ftrue   依然只能选一个\n",[425,76912,76913,76915,76917,76919,76921,76923,76926,76928,76930,76932,76934,76936,76938,76940],{"class":427,"line":10843},[425,76914,74508],{"class":701},[425,76916,59002],{"class":431},[425,76918,1159],{"class":701},[425,76920,1732],{"class":435},[425,76922,2113],{"class":1155},[425,76924,76925],{"class":691},"[A-Z]",[425,76927,1451],{"class":1155},[425,76929,1732],{"class":435},[425,76931,1706],{"class":701},[425,76933,76000],{"class":431},[425,76935,1159],{"class":701},[425,76937,76905],{"class":435},[425,76939,76064],{"class":701},[425,76941,76134],{"class":1216},[425,76943,76944,76946,76948,76950,76952,76954,76956,76958,76960,76962,76964,76966,76969,76971],{"class":427,"line":10849},[425,76945,74508],{"class":701},[425,76947,59002],{"class":431},[425,76949,1159],{"class":701},[425,76951,1732],{"class":435},[425,76953,2113],{"class":1155},[425,76955,76925],{"class":691},[425,76957,1451],{"class":1155},[425,76959,1732],{"class":435},[425,76961,1706],{"class":701},[425,76963,76000],{"class":431},[425,76965,1159],{"class":701},[425,76967,76968],{"class":435},"'P'",[425,76970,76064],{"class":701},[425,76972,76011],{"class":1216},[425,76974,76975,76977,76979,76981,76983,76985,76988,76990,76992,76994,76996,76998,77001,77003],{"class":427,"line":10863},[425,76976,74508],{"class":701},[425,76978,59002],{"class":431},[425,76980,1159],{"class":701},[425,76982,1732],{"class":435},[425,76984,2113],{"class":1155},[425,76986,76987],{"class":691},"[0-9]",[425,76989,1451],{"class":1155},[425,76991,1732],{"class":435},[425,76993,1706],{"class":701},[425,76995,76000],{"class":431},[425,76997,1159],{"class":701},[425,76999,77000],{"class":435},"'0'",[425,77002,76064],{"class":701},[425,77004,76011],{"class":1216},[425,77006,77007,77009,77011,77013,77015,77017,77020,77022,77024,77026,77028,77030,77032,77034],{"class":427,"line":10869},[425,77008,74508],{"class":701},[425,77010,59002],{"class":431},[425,77012,1159],{"class":701},[425,77014,1732],{"class":435},[425,77016,2113],{"class":1155},[425,77018,77019],{"class":691},"[a-zA-Z0-9]",[425,77021,1451],{"class":1155},[425,77023,1732],{"class":435},[425,77025,1706],{"class":701},[425,77027,76000],{"class":431},[425,77029,1159],{"class":701},[425,77031,76905],{"class":435},[425,77033,76008],{"class":701},[425,77035,76011],{"class":1216},[425,77037,77038,77040,77042],{"class":427,"line":10896},[425,77039,53172],{"class":701},[425,77041,52568],{"class":52055},[425,77043,52062],{"class":701},[425,77045,77046,77048,77050],{"class":427,"line":10905},[425,77047,52540],{"class":701},[425,77049,52555],{"class":52055},[425,77051,52062],{"class":701},[425,77053,77054],{"class":427,"line":10911},[425,77055,3400],{"emptyLinePlaceholder":1084},[425,77057,77058,77060,77062],{"class":427,"line":10919},[425,77059,52540],{"class":701},[425,77061,51390],{"class":52055},[425,77063,52062],{"class":701},[22995,77065,77067],{"id":77066},"_3624-修饰符","3.6.2.4 修饰符",[19,77069,77070],{},[393,77071],{"alt":395,"src":77072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,77074,77075],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,77077,77078],{},[393,77079],{"alt":395,"src":77080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[416,77082,77084],{"className":51388,"code":77083,"language":51390,"meta":395,"style":395},"\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",[422,77085,77086,77096,77110,77118,77132,77152,77164,77172,77180,77188,77220,77251,77256,77288,77299,77332,77341,77349,77357],{"__ignoreMap":395},[425,77087,77088,77090,77092,77094],{"class":427,"line":428},[425,77089,52052],{"class":701},[425,77091,52056],{"class":52055},[425,77093,52059],{"class":431},[425,77095,52062],{"class":701},[425,77097,77098,77100,77102,77104,77106,77108],{"class":427,"line":698},[425,77099,2057],{"class":701},[425,77101,51390],{"class":52055},[425,77103,52071],{"class":431},[425,77105,1204],{"class":701},[425,77107,52076],{"class":435},[425,77109,52062],{"class":701},[425,77111,77112,77114,77116],{"class":427,"line":710},[425,77113,2057],{"class":701},[425,77115,52089],{"class":52055},[425,77117,52062],{"class":701},[425,77119,77120,77122,77124,77126,77128,77130],{"class":427,"line":721},[425,77121,52899],{"class":701},[425,77123,52099],{"class":52055},[425,77125,52102],{"class":431},[425,77127,1204],{"class":701},[425,77129,52107],{"class":435},[425,77131,52062],{"class":701},[425,77133,77134,77136,77138,77140,77142,77144,77146,77148,77150],{"class":427,"line":735},[425,77135,52899],{"class":701},[425,77137,52099],{"class":52055},[425,77139,15917],{"class":431},[425,77141,1204],{"class":701},[425,77143,52146],{"class":435},[425,77145,52126],{"class":431},[425,77147,1204],{"class":701},[425,77149,52153],{"class":435},[425,77151,52062],{"class":701},[425,77153,77154,77156,77158,77160,77162],{"class":427,"line":743},[425,77155,52899],{"class":701},[425,77157,52162],{"class":52055},[425,77159,52165],{"class":701},[425,77161,52162],{"class":52055},[425,77163,52062],{"class":701},[425,77165,77166,77168,77170],{"class":427,"line":751},[425,77167,52540],{"class":701},[425,77169,52089],{"class":52055},[425,77171,52062],{"class":701},[425,77173,77174,77176,77178],{"class":427,"line":759},[425,77175,2057],{"class":701},[425,77177,52555],{"class":52055},[425,77179,52062],{"class":701},[425,77181,77182,77184,77186],{"class":427,"line":770},[425,77183,52899],{"class":701},[425,77185,52568],{"class":52055},[425,77187,52062],{"class":701},[425,77189,77190,77192,77194,77196,77198,77200,77203,77205,77207,77209,77211,77213,77216,77218],{"class":427,"line":780},[425,77191,74508],{"class":701},[425,77193,59002],{"class":431},[425,77195,1159],{"class":701},[425,77197,1732],{"class":435},[425,77199,2113],{"class":1155},[425,77201,77202],{"class":48732},"java",[425,77204,1451],{"class":1155},[425,77206,1732],{"class":435},[425,77208,1706],{"class":701},[425,77210,76000],{"class":431},[425,77212,1159],{"class":701},[425,77214,77215],{"class":435},"'java'",[425,77217,76510],{"class":701},[425,77219,76011],{"class":1216},[425,77221,77222,77224,77226,77228,77230,77232,77234,77236,77238,77240,77242,77244,77247,77249],{"class":427,"line":790},[425,77223,74508],{"class":701},[425,77225,59002],{"class":431},[425,77227,1159],{"class":701},[425,77229,1732],{"class":435},[425,77231,2113],{"class":1155},[425,77233,77202],{"class":48732},[425,77235,1451],{"class":1155},[425,77237,1732],{"class":435},[425,77239,1706],{"class":701},[425,77241,76000],{"class":431},[425,77243,1159],{"class":701},[425,77245,77246],{"class":435},"'Java'",[425,77248,76510],{"class":701},[425,77250,76134],{"class":1216},[425,77252,77253],{"class":427,"line":805},[425,77254,77255],{"class":1216},"    \u002F\u002F 不区分大小写、\n",[425,77257,77258,77260,77262,77264,77266,77268,77270,77272,77274,77276,77278,77280,77282,77284,77286],{"class":427,"line":818},[425,77259,74508],{"class":701},[425,77261,59002],{"class":431},[425,77263,1159],{"class":701},[425,77265,1732],{"class":435},[425,77267,2113],{"class":1155},[425,77269,77202],{"class":48732},[425,77271,1451],{"class":1155},[425,77273,1732],{"class":435},[425,77275,1589],{"class":1155},[425,77277,1706],{"class":701},[425,77279,76000],{"class":431},[425,77281,1159],{"class":701},[425,77283,77246],{"class":435},[425,77285,76510],{"class":701},[425,77287,76011],{"class":1216},[425,77289,77290,77292,77294,77296],{"class":427,"line":831},[425,77291,12220],{"class":1155},[425,77293,74674],{"class":691},[425,77295,14563],{"class":1155},[425,77297,77298],{"class":435}," 'java是一门编程语言，学完java工资很高'\n",[425,77300,77301,77303,77306,77308,77311,77314,77316,77318,77320,77322,77325,77327,77330],{"class":427,"line":841},[425,77302,12220],{"class":1155},[425,77304,77305],{"class":691}," result",[425,77307,14563],{"class":1155},[425,77309,77310],{"class":701}," str.",[425,77312,77313],{"class":431},"replace",[425,77315,1159],{"class":701},[425,77317,1732],{"class":435},[425,77319,77202],{"class":48732},[425,77321,1732],{"class":435},[425,77323,77324],{"class":1155},"ig",[425,77326,13434],{"class":701},[425,77328,77329],{"class":435},"'前端'",[425,77331,1165],{"class":701},[425,77333,77334,77336,77338],{"class":427,"line":852},[425,77335,74508],{"class":701},[425,77337,59002],{"class":431},[425,77339,77340],{"class":701},"(result)\n",[425,77342,77343,77345,77347],{"class":427,"line":862},[425,77344,53172],{"class":701},[425,77346,52568],{"class":52055},[425,77348,52062],{"class":701},[425,77350,77351,77353,77355],{"class":427,"line":878},[425,77352,52540],{"class":701},[425,77354,52555],{"class":52055},[425,77356,52062],{"class":701},[425,77358,77359,77361,77363],{"class":427,"line":914},[425,77360,52540],{"class":701},[425,77362,51390],{"class":52055},[425,77364,52062],{"class":701},[1074,77366,77367],{},"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":395,"searchDepth":698,"depth":698,"links":77369},[77370,77380,77392,77409,77416,77424],{"id":54115,"depth":698,"text":54116,"children":77371},[77372,77373,77374,77375,77376,77377,77378,77379],{"id":54119,"depth":710,"text":54120},{"id":54152,"depth":710,"text":54153},{"id":54191,"depth":710,"text":54192},{"id":54349,"depth":710,"text":54350},{"id":54397,"depth":710,"text":54398},{"id":54534,"depth":710,"text":54535},{"id":54856,"depth":710,"text":54857},{"id":57844,"depth":710,"text":57845},{"id":57872,"depth":698,"text":57873,"children":77381},[77382,77383,77384,77385,77386,77387,77388,77389,77390,77391],{"id":57876,"depth":710,"text":57877},{"id":57899,"depth":710,"text":57900},{"id":58814,"depth":710,"text":58815},{"id":59504,"depth":710,"text":59505},{"id":59786,"depth":710,"text":59787},{"id":63947,"depth":710,"text":63948},{"id":64117,"depth":710,"text":64118},{"id":64245,"depth":710,"text":64246},{"id":64270,"depth":710,"text":64271},{"id":65659,"depth":710,"text":65660},{"id":66812,"depth":698,"text":66813,"children":77393},[77394,77395,77396,77397,77398,77399,77400,77401,77402,77403,77404,77405,77406,77407,77408],{"id":66816,"depth":710,"text":66817},{"id":67470,"depth":710,"text":67471},{"id":69165,"depth":710,"text":69166},{"id":69206,"depth":710,"text":69207},{"id":69248,"depth":710,"text":69249},{"id":69262,"depth":710,"text":69263},{"id":69311,"depth":710,"text":69312},{"id":69323,"depth":710,"text":69324},{"id":69338,"depth":710,"text":69339},{"id":69374,"depth":710,"text":69375},{"id":69455,"depth":710,"text":69456},{"id":69583,"depth":710,"text":69584},{"id":69595,"depth":710,"text":69596},{"id":69614,"depth":710,"text":69615},{"id":71725,"depth":710,"text":71726},{"id":71744,"depth":698,"text":71745,"children":77410},[77411,77412,77413,77414,77415],{"id":71765,"depth":710,"text":71766},{"id":71785,"depth":710,"text":71786},{"id":71834,"depth":710,"text":71835},{"id":71959,"depth":710,"text":71960},{"id":72140,"depth":710,"text":72141},{"id":72158,"depth":698,"text":72159,"children":77417},[77418,77419,77420,77421,77422,77423],{"id":72173,"depth":710,"text":72174},{"id":72232,"depth":710,"text":72233},{"id":72256,"depth":710,"text":72257},{"id":72576,"depth":710,"text":72577},{"id":72608,"depth":710,"text":72609},{"id":72631,"depth":710,"text":72632},{"id":75699,"depth":698,"text":75700,"children":77425},[77426,77427],{"id":75733,"depth":710,"text":75734},{"id":75772,"depth":710,"text":75773},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":54087,"description":24374},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77434,"title":77435,"body":77436,"description":24374,"extension":1082,"meta":93573,"navigation":1084,"path":93574,"seo":93575,"stem":93576,"__hash__":93577},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77437,"toc":93509},[77438,77441,77444,77448,77452,77457,77462,77473,77477,77482,77485,77489,77492,77497,77501,77505,77508,77513,77516,77520,77523,77531,77534,77538,77543,77548,77551,77555,77560,77565,77568,77572,77577,77580,77585,77588,77593,77596,77601,77606,77609,77612,77616,77621,77626,77629,77633,77637,77640,77643,77646,77650,77654,77659,77664,77667,77671,77676,77681,77684,77687,77690,77693,77696,77699,77702,77705,77708,77713,77717,77722,77727,77730,77733,77736,77739,77742,77745,77748,77751,77755,77759,77762,77765,77768,77773,77775,77778,77781,77784,77787,77790,77793,77796,77799,77802,77805,77808,77811,77814,77819,77824,77829,77832,77836,77839,77844,77848,77850,77861,77866,77967,77970,77973,77976,77979,77982,77985,77988,77991,77993,77996,77999,78002,78005,78008,78010,78013,78016,78019,78022,78025,78028,78030,78033,78035,78037,78040,78044,78048,78051,78054,78057,78060,78063,78066,78069,78072,78075,78080,78200,78203,78206,78211,78214,78217,78220,78223,78228,78231,78234,78237,78240,78245,78248,78348,78413,78487,78491,78494,78497,78501,78504,78518,78547,78550,78553,78556,78559,78562,78565,78568,78570,78573,78576,78579,78582,78586,78591,78595,78600,78675,78678,78861,78864,78867,78870,78873,78876,78878,78881,78884,78887,78890,78893,78896,78898,78902,78905,78910,78913,78916,78919,78922,78924,78929,78932,78935,78938,78941,78943,78948,78951,78954,78956,78958,78961,78965,78968,78971,78976,78979,78982,78985,79035,79040,79044,79049,79052,79121,79124,79133,79137,79142,79145,79148,79156,79159,79176,80978,80982,80986,80991,80994,80998,81004,81010,81162,81167,81172,81175,81178,81181,81184,81187,81190,81193,81196,81199,81202,81205,81208,81213,81217,81220,81231,81235,81240,81243,81246,81249,81252,81255,81257,81260,81263,81266,81269,81271,81288,81291,81295,81298,81303,81308,81311,81314,81318,81321,81324,81333,81336,81340,81343,81348,81353,81420,81424,81427,81430,81435,81440,81526,81531,81535,81538,81541,81556,81559,81564,81568,81573,81682,81685,81696,81846,81850,81855,81964,81968,81973,81978,81983,81986,81993,82013,82049,82213,82218,82221,82226,82233,82236,82239,82242,82301,82357,82413,82417,82422,82737,82740,82744,82747,82752,82861,82866,82870,82875,82879,82950,82954,82956,82959,82962,83000,83276,83280,83297,83363,83397,83401,83404,83409,83438,83445,83454,83459,83474,83479,83488,83491,83628,83632,83694,83698,83703,83948,83952,83957,83960,83963,83966,83969,83973,83978,85559,85563,85567,85573,85576,85581,85585,85588,85593,85596,85607,85611,85616,85620,85625,85630,85633,85638,85642,85646,85649,85654,85659,85662,85665,85668,85790,85795,85897,85900,85903,85907,85912,86084,86089,86093,86096,86101,86167,86172,86175,86306,86309,86314,86317,86320,86411,86416,86419,86422,86425,86428,86433,86438,86441,86446,86451,86456,86460,86463,86466,86471,86476,86481,86486,86540,86543,86546,86551,86554,86557,86562,86567,86572,86576,86581,86595,86600,86603,86608,86612,86617,86622,86627,86632,86637,86642,86647,86652,86655,86659,86664,86667,86670,86673,86678,86683,86686,86689,86693,86696,86699,86704,86709,86714,86719,86722,86727,86732,86793,86798,86801,86806,88047,88052,88056,88060,88065,88068,88073,88078,88081,88086,88088,88093,88097,88100,88103,88114,88118,88123,88128,88183,88188,88193,88198,88409,88414,88418,88423,88426,88428,88431,88434,88881,88886,88893,88899,88902,88905,89169,89174,89178,89443,89448,89452,89457,89462,89467,89472,89803,89806,89811,89816,89819,89823,89827,89832,89837,89842,89847,89852,89857,89861,89864,89869,89874,89877,89951,89956,89961,89966,89968,89971,90341,90346,90351,90356,90359,90362,90464,90469,90474,90577,90581,90586,90590,90594,90599,90604,90607,90612,90615,90618,91011,91016,91019,91022,91025,91028,91548,91552,91557,91562,91567,91570,91575,91578,91581,91963,91968,91970,91972,91975,91978,92490,92494,92555,92558,92561,92564,92568,92571,92576,92581,93506],[10,77439,77435],{"id":77440},"_4js进阶",[19,77442,77443],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[1099,77445,77447],{"id":77446},"_41-作用域","4.1 作用域",[14,77449,77451],{"id":77450},"_411-局部作用域","4.1.1 局部作用域",[19,77453,77454],{},[393,77455],{"alt":395,"src":77456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,77458,77459],{},[393,77460],{"alt":395,"src":77461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[447,77463,77464,77467,77470],{},[450,77465,77466],{},"函数作用域在函数内部",[450,77468,77469],{},"块级作用域在{}",[450,77471,77472],{},"对象的那个{}不是作用域，不是块作用域",[14,77474,77476],{"id":77475},"_412-全局作用域","4.1.2 全局作用域",[19,77478,77479],{},[393,77480],{"alt":395,"src":77481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,77483,77484],{},"window.a=10不要这样写",[14,77486,77488],{"id":77487},"_413-作用域链","4.1.3 作用域链",[19,77490,77491],{},"变量查找机制",[19,77493,77494],{},[393,77495],{"alt":395,"src":77496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[1099,77498,77500],{"id":77499},"_42-垃圾回收机制","4.2 垃圾回收机制",[14,77502,77504],{"id":77503},"_421-大体介绍","4.2.1 大体介绍",[19,77506,77507],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,77509,77510],{},[393,77511],{"alt":395,"src":77512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,77514,77515],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[14,77517,77519],{"id":77518},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,77521,77522],{},"堆栈空间分配区别：",[972,77524,77525,77528],{},[450,77526,77527],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[450,77529,77530],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,77532,77533],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22995,77535,77537],{"id":77536},"_4221-引用计数","4.2.2.1 引用计数",[19,77539,77540],{},[393,77541],{"alt":395,"src":77542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,77544,77545],{},[393,77546],{"alt":395,"src":77547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,77549,77550],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22995,77552,77554],{"id":77553},"_4222-标记清除法","4.2.2.2 标记清除法",[19,77556,77557],{},[393,77558],{"alt":395,"src":77559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,77561,77562],{},[393,77563],{"alt":395,"src":77564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,77566,77567],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[1099,77569,77571],{"id":77570},"_43-闭包","4.3 闭包",[19,77573,77574],{},[393,77575],{"alt":395,"src":77576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,77578,77579],{},"闭包：内层函数+外层函数的变量",[19,77581,77582],{},[393,77583],{"alt":395,"src":77584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,77586,77587],{},"closure就是闭包",[19,77589,77590],{},[393,77591],{"alt":395,"src":77592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,77594,77595],{},"内层函数必须包含外层函数的变量才是闭包",[19,77597,77598],{},[393,77599],{"alt":395,"src":77600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,77602,77603],{},[393,77604],{"alt":395,"src":77605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,77607,77608],{},"闭包可能会引起内存泄漏",[19,77610,77611],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[1099,77613,77615],{"id":77614},"_44-变量提升","4.4 变量提升",[19,77617,77618],{},[393,77619],{"alt":395,"src":77620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,77622,77623],{},[393,77624],{"alt":395,"src":77625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,77627,77628],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[1099,77630,77632],{"id":77631},"_45-函数进阶","4.5 函数进阶",[14,77634,77636],{"id":77635},"_451-函数提升","4.5.1 函数提升",[19,77638,77639],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,77641,77642],{},"只提升函数声明，不提升函数调用",[52568,77644,77645],{},"\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,77647,77649],{"id":77648},"_452-函数参数","4.5.2 函数参数",[22995,77651,77653],{"id":77652},"_4521-动态参数","4.5.2.1 动态参数",[19,77655,77656],{},[393,77657],{"alt":395,"src":77658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,77660,77661],{},[393,77662],{"alt":395,"src":77663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,77665,77666],{},"箭头函数里边没有arguments",[22995,77668,77670],{"id":77669},"_4522-剩余参数","4.5.2.2 剩余参数",[19,77672,77673],{},[393,77674],{"alt":395,"src":77675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,77677,77678],{},[393,77679],{"alt":395,"src":77680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,77682,77683],{},"剩余参数使用的时候不需要写...",[19,77685,77686],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,77688,77689],{},"  function getSum(a,b,...arr) {",[19,77691,77692],{},"  console.log(11)",[19,77694,77695],{},"  }",[19,77697,77698],{},"  getSum(1,2,3,4)",[19,77700,77701],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,77703,77704],{},"  getSum(1,2)",[19,77706,77707],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,77709,77710],{},[393,77711],{"alt":395,"src":77712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22995,77714,77716],{"id":77715},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,77718,77719],{},[393,77720],{"alt":395,"src":77721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,77723,77724],{},[393,77725],{"alt":395,"src":77726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,77728,77729],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,77731,77732],{},"展开运算符可以用于数组之间的合并：",[19,77734,77735],{},"const arr1 = [1, 2, 3]",[19,77737,77738],{},"const arr2 = [3, 4, 5]",[19,77740,77741],{},"const arr = [...arr1, ...arr2]",[19,77743,77744],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,77746,77747],{},"剩余参数：函数参数使用，得到真数组",[19,77749,77750],{},"展开运算符：数组中使用，数组展开",[14,77752,77754],{"id":77753},"_453-箭头函数","4.5.3 箭头函数",[22995,77756,77758],{"id":77757},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,77760,77761],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,77763,77764],{},"它不是万能的！！！",[19,77766,77767],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,77769,77770],{},[393,77771],{"alt":395,"src":77772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,77774,1188],{},[19,77776,77777],{},"① 只有一个形参的时候，可以省略小括号：",[19,77779,77780],{},"const fn=x=>{console.log(x)}",[19,77782,77783],{},"② 只有一行代码时可以省略大括号：",[19,77785,77786],{},"const fn=x=>console.log(11)",[19,77788,77789],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,77791,77792],{},"const fn=x=>x+x",[19,77794,77795],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,77797,77798],{},"⑤ 阻止表单默认提交：",[19,77800,77801],{},"const form = document.querySelector('form')",[19,77803,77804],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,77806,77807],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,77809,77810],{},"const fn=uname=>({uname:uname})",[19,77812,77813],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,77815,77816],{},[393,77817],{"alt":395,"src":77818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,77820,77821],{},[393,77822],{"alt":395,"src":77823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,77825,77826],{},[393,77827],{"alt":395,"src":77828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,77830,77831],{},"一定不要忘记用()，有()就理解为自带return",[22995,77833,77835],{"id":77834},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,77837,77838],{},"箭头函数是没有动态参数的arguments",[19,77840,77841],{},[393,77842],{"alt":395,"src":77843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22995,77845,77847],{"id":77846},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,77849,12331],{},[972,77851,77852,77855,77858],{},[450,77853,77854],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[450,77856,77857],{},"事件回调函数使用箭头函数时，this 为全局的 window",[450,77859,77860],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,77862,77863],{},[393,77864],{"alt":395,"src":77865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[416,77867,77869],{"className":53822,"code":77868,"language":53824,"meta":395,"style":395},"  \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",[422,77870,77871,77879,77884,77889,77894,77899,77904,77908,77913,77917,77921,77926,77931,77936,77940,77944,77949,77954,77959],{"__ignoreMap":395},[425,77872,77873,77875,77877],{"class":427,"line":428},[425,77874,52899],{"class":701},[425,77876,52568],{"class":52055},[425,77878,52062],{"class":701},[425,77880,77881],{"class":427,"line":698},[425,77882,77883],{"class":701},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[425,77885,77886],{"class":427,"line":710},[425,77887,77888],{"class":701},"    console.log(this) \u002F\u002F指向window\n",[425,77890,77891],{"class":427,"line":721},[425,77892,77893],{"class":701},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[425,77895,77896],{"class":427,"line":735},[425,77897,77898],{"class":701},"    function fn() {\n",[425,77900,77901],{"class":427,"line":743},[425,77902,77903],{"class":701},"      console.log(this)  \u002F\u002F指向window\n",[425,77905,77906],{"class":427,"line":751},[425,77907,3187],{"class":701},[425,77909,77910],{"class":427,"line":759},[425,77911,77912],{"class":701},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[425,77914,77915],{"class":427,"line":770},[425,77916,3400],{"emptyLinePlaceholder":1084},[425,77918,77919],{"class":427,"line":780},[425,77920,72278],{"class":701},[425,77922,77923],{"class":427,"line":790},[425,77924,77925],{"class":701},"      name: 'andy',\n",[425,77927,77928],{"class":427,"line":805},[425,77929,77930],{"class":701},"      sayHai: function () {\n",[425,77932,77933],{"class":427,"line":818},[425,77934,77935],{"class":701},"        console.log(this)\n",[425,77937,77938],{"class":427,"line":831},[425,77939,53153],{"class":701},[425,77941,77942],{"class":427,"line":841},[425,77943,3187],{"class":701},[425,77945,77946],{"class":427,"line":852},[425,77947,77948],{"class":701},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[425,77950,77951],{"class":427,"line":862},[425,77952,77953],{"class":701},"    \u002F\u002F 2.箭头函数的this\n",[425,77955,77956],{"class":427,"line":878},[425,77957,77958],{"class":701},"    const fn = () => console.log(this)\n",[425,77960,77961,77963,77965],{"class":427,"line":914},[425,77962,53172],{"class":701},[425,77964,52568],{"class":52055},[425,77966,52062],{"class":701},[19,77968,77969],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,77971,77972],{},"const fn = () => console.log(this)",[19,77974,77975],{},"fn() \u002F\u002F指向window",[19,77977,77978],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,77980,77981],{},"①",[19,77983,77984],{},"const obj = {",[19,77986,77987],{},"uname: 'pink老师',",[19,77989,77990],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,77992,2093],{},[19,77994,77995],{},"调用对象里边的函数",[19,77997,77998],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,78000,78001],{},"obj.sayHai()",[19,78003,78004],{},"②",[19,78006,78007],{},"const obj1 = {",[19,78009,77987],{},[19,78011,78012],{},"sayHai: function () {",[19,78014,78015],{},"let i = 10",[19,78017,78018],{},"const count = () => {",[19,78020,78021],{},"console.log(this)",[19,78023,78024],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,78026,78027],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,78029,2093],{},[19,78031,78032],{},"count()",[19,78034,2093],{},[19,78036,2093],{},[19,78038,78039],{},"obj1.sayHai()",[1099,78041,78043],{"id":78042},"_46-解构赋值","4.6 解构赋值",[14,78045,78047],{"id":78046},"_461-数组解构","4.6.1 数组解构",[19,78049,78050],{},"以前要是使用数组中的值的话：",[19,78052,78053],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,78055,78056],{},"const arr=[100,60,80]",[19,78058,78059],{},"const max=arr[0]",[19,78061,78062],{},"const min=arr[1]",[19,78064,78065],{},"const avg=arr[2]",[19,78067,78068],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,78070,78071],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,78073,78074],{},"这个写法就类似于上边的那种用很多const的方法",[19,78076,78077],{},[393,78078],{"alt":395,"src":78079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[416,78081,78083],{"className":51388,"code":78082,"language":51390,"meta":395,"style":395},"①变量之间交换值:\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",[422,78084,78085,78090,78095,78100,78105,78110,78114,78118,78123,78127,78132,78137,78141,78146,78151,78162,78172,78177,78182,78187,78191,78195],{"__ignoreMap":395},[425,78086,78087],{"class":427,"line":428},[425,78088,78089],{"class":701},"①变量之间交换值:\n",[425,78091,78092],{"class":427,"line":698},[425,78093,78094],{"class":701},"let a=1\n",[425,78096,78097],{"class":427,"line":710},[425,78098,78099],{"class":701},"let b=2;\n",[425,78101,78102],{"class":427,"line":721},[425,78103,78104],{"class":701},"必须加这行代码，不然就会报错\n",[425,78106,78107],{"class":427,"line":735},[425,78108,78109],{"class":701},"[b,a]=[a,b]\n",[425,78111,78112],{"class":427,"line":743},[425,78113,3400],{"emptyLinePlaceholder":1084},[425,78115,78116],{"class":427,"line":751},[425,78117,3400],{"emptyLinePlaceholder":1084},[425,78119,78120],{"class":427,"line":759},[425,78121,78122],{"class":701},"可以写成下面的方式：\n",[425,78124,78125],{"class":427,"line":770},[425,78126,78094],{"class":701},[425,78128,78129],{"class":427,"line":780},[425,78130,78131],{"class":701},"let b=2\n",[425,78133,78134],{"class":427,"line":790},[425,78135,78136],{"class":701},";[b,a]=[a,b]\n",[425,78138,78139],{"class":427,"line":805},[425,78140,3400],{"emptyLinePlaceholder":1084},[425,78142,78143],{"class":427,"line":818},[425,78144,78145],{"class":701},"②排序\n",[425,78147,78148],{"class":427,"line":831},[425,78149,78150],{"class":701},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[425,78152,78153,78156,78159],{"class":427,"line":841},[425,78154,78155],{"class":701},"for (let i = 0; i ",[425,78157,2057],{"class":78158},"s7hpK",[425,78160,78161],{"class":701}," arr1.length; i++) {\n",[425,78163,78164,78167,78169],{"class":427,"line":852},[425,78165,78166],{"class":701},"   for (let j = 0; j ",[425,78168,2057],{"class":78158},[425,78170,78171],{"class":701}," arr1.length - 1; j++) {\n",[425,78173,78174],{"class":427,"line":862},[425,78175,78176],{"class":701},"      if (arr1[j] > arr1[j + 1]) {\n",[425,78178,78179],{"class":427,"line":878},[425,78180,78181],{"class":701},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[425,78183,78184],{"class":427,"line":914},[425,78185,78186],{"class":701},"       }\n",[425,78188,78189],{"class":427,"line":943},[425,78190,5309],{"class":701},[425,78192,78193],{"class":427,"line":956},[425,78194,2578],{"class":701},[425,78196,78197],{"class":427,"line":964},[425,78198,78199],{"class":701},"console.log(arr1)\n",[19,78201,78202],{},"数组解构的细节：",[19,78204,78205],{},"①变量多，单元值少",[19,78207,78208],{},[393,78209],{"alt":395,"src":78210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,78212,78213],{},"防止出现undefined的方法：",[19,78215,78216],{},"const [a=0,b=0] =[1]",[19,78218,78219],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,78221,78222],{},"②变量少，单元值多",[19,78224,78225],{},[393,78226],{"alt":395,"src":78227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,78229,78230],{},"此时可以使用剩余参数来接收多余的值",[19,78232,78233],{},"const [a,b,...c]=[1,2,3,4]",[19,78235,78236],{},"console.log(c) 输出[3,4]",[19,78238,78239],{},"③可以按需导入，忽略某些返回值",[19,78241,78242],{},[393,78243],{"alt":395,"src":78244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,78246,78247],{},"④支持多维数组的结构",[416,78249,78253],{"className":78250,"code":78251,"language":78252,"meta":395,"style":395},"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",[422,78254,78255,78283,78299,78314,78329],{"__ignoreMap":395},[425,78256,78257,78259,78261,78263,78265,78267,78269,78271,78274,78276,78278,78280],{"class":427,"line":428},[425,78258,7792],{"class":1155},[425,78260,52588],{"class":701},[425,78262,1204],{"class":1155},[425,78264,52981],{"class":701},[425,78266,1367],{"class":691},[425,78268,13434],{"class":701},[425,78270,1235],{"class":691},[425,78272,78273],{"class":701},", [",[425,78275,1229],{"class":691},[425,78277,13434],{"class":701},[425,78279,1442],{"class":691},[425,78281,78282],{"class":701},"]]\n",[425,78284,78285,78288,78290,78292,78294,78296],{"class":427,"line":698},[425,78286,78287],{"class":701},"console.",[425,78289,59002],{"class":431},[425,78291,4851],{"class":701},[425,78293,1341],{"class":691},[425,78295,5216],{"class":701},[425,78297,78298],{"class":1216},"  \u002F\u002F1\n",[425,78300,78301,78303,78305,78307,78309,78311],{"class":427,"line":710},[425,78302,78287],{"class":701},[425,78304,59002],{"class":431},[425,78306,4851],{"class":701},[425,78308,1367],{"class":691},[425,78310,5216],{"class":701},[425,78312,78313],{"class":1216},"  \u002F\u002F2\n",[425,78315,78316,78318,78320,78322,78324,78326],{"class":427,"line":721},[425,78317,78287],{"class":701},[425,78319,59002],{"class":431},[425,78321,4851],{"class":701},[425,78323,1235],{"class":691},[425,78325,5216],{"class":701},[425,78327,78328],{"class":1216},"  \u002F\u002F[3,4]\n",[425,78330,78331,78333,78335,78337,78339,78341,78343,78345],{"class":427,"line":735},[425,78332,78287],{"class":701},[425,78334,59002],{"class":431},[425,78336,4851],{"class":701},[425,78338,1235],{"class":691},[425,78340,5901],{"class":701},[425,78342,1341],{"class":691},[425,78344,5216],{"class":701},[425,78346,78347],{"class":1216},"  \u002F\u002F3\n",[416,78349,78351],{"className":78250,"code":78350,"language":78252,"meta":395,"style":395},"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",[422,78352,78353,78380,78391,78402],{"__ignoreMap":395},[425,78354,78355,78357,78360,78362,78364,78366,78368,78370,78372,78374,78376,78378],{"class":427,"line":428},[425,78356,7792],{"class":1155},[425,78358,78359],{"class":701}," [a, b, c] ",[425,78361,1204],{"class":1155},[425,78363,52981],{"class":701},[425,78365,1367],{"class":691},[425,78367,13434],{"class":701},[425,78369,1235],{"class":691},[425,78371,78273],{"class":701},[425,78373,1229],{"class":691},[425,78375,13434],{"class":701},[425,78377,1442],{"class":691},[425,78379,78282],{"class":701},[425,78381,78382,78384,78386,78389],{"class":427,"line":698},[425,78383,78287],{"class":701},[425,78385,59002],{"class":431},[425,78387,78388],{"class":701},"(a)",[425,78390,78298],{"class":1216},[425,78392,78393,78395,78397,78400],{"class":427,"line":710},[425,78394,78287],{"class":701},[425,78396,59002],{"class":431},[425,78398,78399],{"class":701},"(b)",[425,78401,78313],{"class":1216},[425,78403,78404,78406,78408,78411],{"class":427,"line":721},[425,78405,78287],{"class":701},[425,78407,59002],{"class":431},[425,78409,78410],{"class":701},"(c)",[425,78412,78328],{"class":1216},[416,78414,78416],{"className":78250,"code":78415,"language":78252,"meta":395,"style":395},"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",[422,78417,78418,78445,78455,78465,78475],{"__ignoreMap":395},[425,78419,78420,78422,78425,78427,78429,78431,78433,78435,78437,78439,78441,78443],{"class":427,"line":428},[425,78421,7792],{"class":1155},[425,78423,78424],{"class":701}," [a, b, [c, d]] ",[425,78426,1204],{"class":1155},[425,78428,52981],{"class":701},[425,78430,1367],{"class":691},[425,78432,13434],{"class":701},[425,78434,1235],{"class":691},[425,78436,78273],{"class":701},[425,78438,1229],{"class":691},[425,78440,13434],{"class":701},[425,78442,1442],{"class":691},[425,78444,78282],{"class":701},[425,78446,78447,78449,78451,78453],{"class":427,"line":698},[425,78448,78287],{"class":701},[425,78450,59002],{"class":431},[425,78452,78388],{"class":701},[425,78454,78298],{"class":1216},[425,78456,78457,78459,78461,78463],{"class":427,"line":710},[425,78458,78287],{"class":701},[425,78460,59002],{"class":431},[425,78462,78399],{"class":701},[425,78464,78313],{"class":1216},[425,78466,78467,78469,78471,78473],{"class":427,"line":721},[425,78468,78287],{"class":701},[425,78470,59002],{"class":431},[425,78472,78410],{"class":701},[425,78474,78347],{"class":1216},[425,78476,78477,78479,78481,78484],{"class":427,"line":735},[425,78478,78287],{"class":701},[425,78480,59002],{"class":431},[425,78482,78483],{"class":701},"(d)",[425,78485,78486],{"class":1216},"  \u002F\u002F4\n",[14,78488,78490],{"id":78489},"_462-对象解构","4.6.2 对象解构",[19,78492,78493],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,78495,78496],{},"用的非常非常多！！！！！！",[22995,78498,78500],{"id":78499},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,78502,78503],{},"基本语法：",[972,78505,78506,78509,78512,78515],{},[450,78507,78508],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[450,78510,78511],{},"对象属性的值将被赋值给与属性名相同的变量",[450,78513,78514],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[450,78516,78517],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[416,78519,78521],{"className":51388,"code":78520,"language":51390,"meta":395,"style":395},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[422,78522,78523,78528,78533,78538,78542],{"__ignoreMap":395},[425,78524,78525],{"class":427,"line":428},[425,78526,78527],{"class":701},"const obj = {\n",[425,78529,78530],{"class":427,"line":698},[425,78531,78532],{"class":701},"   uname: 'pink老师',\n",[425,78534,78535],{"class":427,"line":710},[425,78536,78537],{"class":701},"   age: 18,\n",[425,78539,78540],{"class":427,"line":721},[425,78541,2578],{"class":701},[425,78543,78544],{"class":427,"line":735},[425,78545,78546],{"class":701},"const { uname, age } = obj\n",[19,78548,78549],{},"上方代码这样写等价于：",[19,78551,78552],{},"const uname等价于obj.uname",[19,78554,78555],{},"变量名可以重新改名：",[19,78557,78558],{},"const uname='red老师'",[19,78560,78561],{},"const user={",[19,78563,78564],{},"  uname:'pink老师',",[19,78566,78567],{},"  age:18",[19,78569,2093],{},[19,78571,78572],{},"const {uname,age}=user",[19,78574,78575],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,78577,78578],{},"const {旧变量名：新变量名}=对象",[19,78580,78581],{},"const {uname:username,age}=user",[22995,78583,78585],{"id":78584},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,78587,78588],{},[393,78589],{"alt":395,"src":78590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22995,78592,78594],{"id":78593},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,78596,78597],{},[393,78598],{"alt":395,"src":78599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[416,78601,78603],{"className":53822,"code":78602,"language":53824,"meta":395,"style":395},"  \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",[422,78604,78605,78613,78618,78623,78628,78633,78638,78643,78648,78653,78657,78662,78667],{"__ignoreMap":395},[425,78606,78607,78609,78611],{"class":427,"line":428},[425,78608,52899],{"class":701},[425,78610,52568],{"class":52055},[425,78612,52062],{"class":701},[425,78614,78615],{"class":427,"line":698},[425,78616,78617],{"class":701},"    const pig = {\n",[425,78619,78620],{"class":427,"line":710},[425,78621,78622],{"class":701},"      name: '佩奇',\n",[425,78624,78625],{"class":427,"line":721},[425,78626,78627],{"class":701},"      family: {\n",[425,78629,78630],{"class":427,"line":735},[425,78631,78632],{"class":701},"        mother: '猪妈妈',\n",[425,78634,78635],{"class":427,"line":743},[425,78636,78637],{"class":701},"        father: '猪爸爸',\n",[425,78639,78640],{"class":427,"line":751},[425,78641,78642],{"class":701},"        sister: '乔治'\n",[425,78644,78645],{"class":427,"line":759},[425,78646,78647],{"class":701},"      },\n",[425,78649,78650],{"class":427,"line":770},[425,78651,78652],{"class":701},"      age: 6\n",[425,78654,78655],{"class":427,"line":780},[425,78656,3187],{"class":701},[425,78658,78659],{"class":427,"line":790},[425,78660,78661],{"class":701},"    \u002F\u002F 多级对象解构\n",[425,78663,78664],{"class":427,"line":805},[425,78665,78666],{"class":701},"    const { name, family: { mother, father, sister }, age } = pig\n",[425,78668,78669,78671,78673],{"class":427,"line":818},[425,78670,53172],{"class":701},[425,78672,52568],{"class":52055},[425,78674,52062],{"class":701},[19,78676,78677],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[416,78679,78682],{"className":78680,"code":78681,"language":77202,"meta":395,"style":395},"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",[422,78683,78684,78689,78700,78712,78724,78733,78737,78748,78760,78770,78775,78779,78789,78800,78809,78813,78817,78828,78839,78848,78852,78857],{"__ignoreMap":395},[425,78685,78686],{"class":427,"line":428},[425,78687,78688],{"class":1216},"    \u002F\u002F 这是后台传递过来的数据\n",[425,78690,78691,78693,78696,78698],{"class":427,"line":698},[425,78692,12220],{"class":1155},[425,78694,78695],{"class":701}," msg ",[425,78697,1204],{"class":1155},[425,78699,16569],{"class":701},[425,78701,78702,78705,78707,78710],{"class":427,"line":710},[425,78703,78704],{"class":435},"      \"code\"",[425,78706,948],{"class":1155},[425,78708,78709],{"class":691}," 200",[425,78711,32221],{"class":701},[425,78713,78714,78717,78719,78722],{"class":427,"line":721},[425,78715,78716],{"class":435},"      \"msg\"",[425,78718,948],{"class":1155},[425,78720,78721],{"class":435}," \"获取新闻列表成功\"",[425,78723,32221],{"class":701},[425,78725,78726,78729,78731],{"class":427,"line":735},[425,78727,78728],{"class":435},"      \"data\"",[425,78730,948],{"class":1155},[425,78732,56202],{"class":701},[425,78734,78735],{"class":427,"line":743},[425,78736,3510],{"class":701},[425,78738,78739,78742,78744,78746],{"class":427,"line":751},[425,78740,78741],{"class":435},"          \"id\"",[425,78743,948],{"class":1155},[425,78745,26109],{"class":691},[425,78747,32221],{"class":701},[425,78749,78750,78753,78755,78758],{"class":427,"line":759},[425,78751,78752],{"class":435},"          \"title\"",[425,78754,948],{"class":1155},[425,78756,78757],{"class":435}," \"5G商用自己，三大运用商收入下降\"",[425,78759,32221],{"class":701},[425,78761,78762,78765,78767],{"class":427,"line":770},[425,78763,78764],{"class":435},"          \"count\"",[425,78766,948],{"class":1155},[425,78768,78769],{"class":691}," 58\n",[425,78771,78772],{"class":427,"line":780},[425,78773,78774],{"class":701},"        },\n",[425,78776,78777],{"class":427,"line":790},[425,78778,3510],{"class":701},[425,78780,78781,78783,78785,78787],{"class":427,"line":805},[425,78782,78741],{"class":435},[425,78784,948],{"class":1155},[425,78786,15752],{"class":691},[425,78788,32221],{"class":701},[425,78790,78791,78793,78795,78798],{"class":427,"line":818},[425,78792,78752],{"class":435},[425,78794,948],{"class":1155},[425,78796,78797],{"class":435}," \"国际媒体头条速览\"",[425,78799,32221],{"class":701},[425,78801,78802,78804,78806],{"class":427,"line":831},[425,78803,78764],{"class":435},[425,78805,948],{"class":1155},[425,78807,78808],{"class":691}," 56\n",[425,78810,78811],{"class":427,"line":841},[425,78812,78774],{"class":701},[425,78814,78815],{"class":427,"line":852},[425,78816,3510],{"class":701},[425,78818,78819,78821,78823,78826],{"class":427,"line":862},[425,78820,78741],{"class":435},[425,78822,948],{"class":1155},[425,78824,78825],{"class":691}," 3",[425,78827,32221],{"class":701},[425,78829,78830,78832,78834,78837],{"class":427,"line":878},[425,78831,78752],{"class":435},[425,78833,948],{"class":1155},[425,78835,78836],{"class":435}," \"乌克兰和俄罗斯持续冲突\"",[425,78838,32221],{"class":701},[425,78840,78841,78843,78845],{"class":427,"line":914},[425,78842,78764],{"class":435},[425,78844,948],{"class":1155},[425,78846,78847],{"class":691}," 1669\n",[425,78849,78850],{"class":427,"line":943},[425,78851,78774],{"class":701},[425,78853,78854],{"class":427,"line":956},[425,78855,78856],{"class":701},"      ]\n",[425,78858,78859],{"class":427,"line":964},[425,78860,3187],{"class":701},[19,78862,78863],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,78865,78866],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,78868,78869],{},"\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,78871,78872],{},"function({data}) {",[19,78874,78875],{},"console.log(data)",[19,78877,2093],{},[19,78879,78880],{},"render(msg)",[19,78882,78883],{},"实参传递给形参的时候解构了",[19,78885,78886],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,78888,78889],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,78891,78892],{},"function render({data:mydata}) {",[19,78894,78895],{},"  console.log(data)",[19,78897,2093],{},[14,78899,78901],{"id":78900},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,78903,78904],{},"有两种情况：一个是数组结构，一个是立即执行函数",[972,78906,78907],{},[450,78908,78909],{},"如果对一个数组进行遍历，有两种方式：",[19,78911,78912],{},"①法1",[19,78914,78915],{},"const arr=[1,2,3]",[19,78917,78918],{},"arr.map(function(item,index) {",[19,78920,78921],{},"  console.log(item)",[19,78923,53219],{},[19,78925,78926],{},[393,78927],{"alt":395,"src":78928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,78930,78931],{},"②法2",[19,78933,78934],{},"const str='pink'",[19,78936,78937],{},"[1,2,3].map(function(item,index) {",[19,78939,78940],{},"console.log(item)",[19,78942,53219],{},[19,78944,78945],{},[393,78946],{"alt":395,"src":78947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,78949,78950],{},"此时会报错",[19,78952,78953],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,78955,78940],{},[19,78957,53219],{},[19,78959,78960],{},"内部会当成这样处理，所以我们用分号进行隔开",[1099,78962,78964],{"id":78963},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,78966,78967],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,78969,78970],{},"可以理解为加强版的for循环",[19,78972,78973],{},[393,78974],{"alt":395,"src":78975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,78977,78978],{},"里边不写return，不返回数组，只遍历不返回",[19,78980,78981],{},"map是返回数组",[19,78983,78984],{},"forEach主要用于遍历数组对象",[416,78986,78988],{"className":53822,"code":78987,"language":53824,"meta":395,"style":395},"  \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",[422,78989,78990,78998,79003,79008,79013,79018,79022,79027],{"__ignoreMap":395},[425,78991,78992,78994,78996],{"class":427,"line":428},[425,78993,52899],{"class":701},[425,78995,52568],{"class":52055},[425,78997,52062],{"class":701},[425,78999,79000],{"class":427,"line":698},[425,79001,79002],{"class":701},"    const arr = ['red', 'green', 'pink']\n",[425,79004,79005],{"class":427,"line":710},[425,79006,79007],{"class":701},"    const result = arr.forEach(function (item, index) {\n",[425,79009,79010],{"class":427,"line":721},[425,79011,79012],{"class":701},"      console.log(item)\n",[425,79014,79015],{"class":427,"line":735},[425,79016,79017],{"class":701},"      console.log(index)\n",[425,79019,79020],{"class":427,"line":743},[425,79021,34216],{"class":701},[425,79023,79024],{"class":427,"line":751},[425,79025,79026],{"class":701},"    console.log(result)\n",[425,79028,79029,79031,79033],{"class":427,"line":759},[425,79030,53172],{"class":701},[425,79032,52568],{"class":52055},[425,79034,52062],{"class":701},[19,79036,79037],{},[393,79038],{"alt":395,"src":79039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[1099,79041,79043],{"id":79042},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,79045,79046],{},[393,79047],{"alt":395,"src":79048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,79050,79051],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[416,79053,79055],{"className":53822,"code":79054,"language":53824,"meta":395,"style":395},"\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",[422,79056,79057,79065,79073,79078,79083,79087,79091,79096,79100,79105,79113],{"__ignoreMap":395},[425,79058,79059,79061,79063],{"class":427,"line":428},[425,79060,2057],{"class":701},[425,79062,52555],{"class":52055},[425,79064,52062],{"class":701},[425,79066,79067,79069,79071],{"class":427,"line":698},[425,79068,52899],{"class":701},[425,79070,52568],{"class":52055},[425,79072,52062],{"class":701},[425,79074,79075],{"class":427,"line":710},[425,79076,79077],{"class":701},"    const arr = [10, 20, 30]\n",[425,79079,79080],{"class":427,"line":721},[425,79081,79082],{"class":701},"    const newArr = arr.filter(function (item, index) {\n",[425,79084,79085],{"class":427,"line":735},[425,79086,79012],{"class":701},[425,79088,79089],{"class":427,"line":743},[425,79090,79017],{"class":701},[425,79092,79093],{"class":427,"line":751},[425,79094,79095],{"class":701},"      return item >= 20\n",[425,79097,79098],{"class":427,"line":759},[425,79099,34216],{"class":701},[425,79101,79102],{"class":427,"line":770},[425,79103,79104],{"class":701},"    console.log(newArr)\n",[425,79106,79107,79109,79111],{"class":427,"line":780},[425,79108,53172],{"class":701},[425,79110,52568],{"class":52055},[425,79112,52062],{"class":701},[425,79114,79115,79117,79119],{"class":427,"line":790},[425,79116,52540],{"class":701},[425,79118,52555],{"class":52055},[425,79120,52062],{"class":701},[19,79122,79123],{},"这个也可以写成箭头函数：",[416,79125,79127],{"className":51388,"code":79126,"language":51390,"meta":395,"style":395},"const newArr = arr.filter(item => item >= 20)\n",[422,79128,79129],{"__ignoreMap":395},[425,79130,79131],{"class":427,"line":428},[425,79132,79126],{"class":701},[1099,79134,79136],{"id":79135},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,79138,79139],{},[393,79140],{"alt":395,"src":79141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,79143,79144],{},"步骤：",[19,79146,79147],{},"①：渲染页面模块",[447,79149,79150,79153],{},[450,79151,79152],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[450,79154,79155],{},"用forEach+字符串的形式",[19,79157,79158],{},"②：点击不同需求，显示不同页面内容",[447,79160,79161,79164,79167,79170,79173],{},[450,79162,79163],{},"点击采取事件委托方式 .filter",[450,79165,79166],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[450,79168,79169],{},"筛选条件是根据点击的 data-index 来判断",[450,79171,79172],{},"可以使用对象解构，把事件对象解构",[450,79174,79175],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[416,79177,79179],{"className":51388,"code":79178,"language":51390,"meta":395,"style":395},"\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",[422,79180,79181,79191,79205,79209,79217,79231,79251,79263,79271,79277,79287,79297,79307,79311,79315,79321,79334,79346,79356,79368,79372,79376,79383,79396,79408,79425,79443,79456,79460,79464,79476,79486,79490,79494,79501,79542,79569,79579,79583,79587,79595,79607,79611,79615,79623,79635,79647,79658,79662,79666,79675,79687,79698,79702,79706,79715,79727,79739,79743,79747,79754,79764,79776,79788,79803,79807,79811,79819,79835,79845,79855,79865,79877,79881,79885,79895,79906,79916,79920,79928,79936,79940,79948,79963,79989,80014,80039,80058,80066,80080,80085,80090,80095,80100,80105,80113,80121,80126,80137,80142,80152,80162,80172,80182,80186,80190,80199,80208,80217,80226,80230,80234,80243,80252,80261,80270,80274,80278,80287,80296,80305,80314,80318,80322,80331,80340,80349,80358,80362,80366,80375,80384,80393,80402,80406,80410,80419,80428,80437,80446,80450,80454,80463,80472,80480,80489,80493,80497,80501,80506,80518,80523,80535,80539,80556,80584,80593,80598,80608,80618,80627,80632,80637,80641,80646,80663,80667,80672,80680,80685,80712,80717,80737,80742,80754,80759,80764,80769,80780,80794,80831,80849,80882,80899,80923,80927,80932,80938,80942,80946,80950,80958,80966,80970],{"__ignoreMap":395},[425,79182,79183,79185,79187,79189],{"class":427,"line":428},[425,79184,52052],{"class":701},[425,79186,52056],{"class":52055},[425,79188,52059],{"class":431},[425,79190,52062],{"class":701},[425,79192,79193,79195,79197,79199,79201,79203],{"class":427,"line":698},[425,79194,2057],{"class":701},[425,79196,51390],{"class":52055},[425,79198,52071],{"class":431},[425,79200,1204],{"class":701},[425,79202,52076],{"class":435},[425,79204,52062],{"class":701},[425,79206,79207],{"class":427,"line":710},[425,79208,3400],{"emptyLinePlaceholder":1084},[425,79210,79211,79213,79215],{"class":427,"line":721},[425,79212,2057],{"class":701},[425,79214,52089],{"class":52055},[425,79216,52062],{"class":701},[425,79218,79219,79221,79223,79225,79227,79229],{"class":427,"line":735},[425,79220,52899],{"class":701},[425,79222,52099],{"class":52055},[425,79224,52102],{"class":431},[425,79226,1204],{"class":701},[425,79228,52107],{"class":435},[425,79230,52062],{"class":701},[425,79232,79233,79235,79237,79239,79241,79243,79245,79247,79249],{"class":427,"line":743},[425,79234,52899],{"class":701},[425,79236,52099],{"class":52055},[425,79238,15917],{"class":431},[425,79240,1204],{"class":701},[425,79242,52146],{"class":435},[425,79244,52126],{"class":431},[425,79246,1204],{"class":701},[425,79248,52153],{"class":435},[425,79250,52062],{"class":701},[425,79252,79253,79255,79257,79259,79261],{"class":427,"line":751},[425,79254,52899],{"class":701},[425,79256,52162],{"class":52055},[425,79258,52165],{"class":701},[425,79260,52162],{"class":52055},[425,79262,52062],{"class":701},[425,79264,79265,79267,79269],{"class":427,"line":759},[425,79266,52899],{"class":701},[425,79268,1074],{"class":52055},[425,79270,52062],{"class":701},[425,79272,79273,79275],{"class":427,"line":770},[425,79274,7403],{"class":52055},[425,79276,16569],{"class":701},[425,79278,79279,79281,79283,79285],{"class":427,"line":780},[425,79280,55450],{"class":691},[425,79282,52192],{"class":701},[425,79284,1341],{"class":691},[425,79286,2307],{"class":701},[425,79288,79289,79291,79293,79295],{"class":427,"line":790},[425,79290,55461],{"class":691},[425,79292,52192],{"class":701},[425,79294,1341],{"class":691},[425,79296,2307],{"class":701},[425,79298,79299,79301,79303,79305],{"class":427,"line":805},[425,79300,73351],{"class":691},[425,79302,52192],{"class":701},[425,79304,61260],{"class":691},[425,79306,2307],{"class":701},[425,79308,79309],{"class":427,"line":818},[425,79310,3187],{"class":701},[425,79312,79313],{"class":427,"line":831},[425,79314,3400],{"emptyLinePlaceholder":1084},[425,79316,79317,79319],{"class":427,"line":841},[425,79318,62878],{"class":431},[425,79320,16569],{"class":701},[425,79322,79323,79325,79327,79330,79332],{"class":427,"line":852},[425,79324,55526],{"class":691},[425,79326,52192],{"class":701},[425,79328,79329],{"class":691},"990",[425,79331,52247],{"class":1155},[425,79333,2307],{"class":701},[425,79335,79336,79338,79340,79342,79344],{"class":427,"line":862},[425,79337,55461],{"class":691},[425,79339,52192],{"class":701},[425,79341,1341],{"class":691},[425,79343,52311],{"class":691},[425,79345,2307],{"class":701},[425,79347,79348,79350,79352,79354],{"class":427,"line":878},[425,79349,55764],{"class":691},[425,79351,52192],{"class":701},[425,79353,52232],{"class":691},[425,79355,2307],{"class":701},[425,79357,79358,79361,79363,79366],{"class":427,"line":914},[425,79359,79360],{"class":691},"      flex-wrap",[425,79362,52192],{"class":701},[425,79364,79365],{"class":691},"wrap",[425,79367,2307],{"class":701},[425,79369,79370],{"class":427,"line":943},[425,79371,3187],{"class":701},[425,79373,79374],{"class":427,"line":956},[425,79375,3400],{"emptyLinePlaceholder":1084},[425,79377,79378,79381],{"class":427,"line":964},[425,79379,79380],{"class":431},"    .item",[425,79382,16569],{"class":701},[425,79384,79385,79387,79389,79392,79394],{"class":427,"line":2733},[425,79386,55526],{"class":691},[425,79388,52192],{"class":701},[425,79390,79391],{"class":691},"240",[425,79393,52247],{"class":1155},[425,79395,2307],{"class":701},[425,79397,79398,79400,79402,79404,79406],{"class":427,"line":2750},[425,79399,62755],{"class":691},[425,79401,52192],{"class":701},[425,79403,1594],{"class":691},[425,79405,52247],{"class":1155},[425,79407,2307],{"class":701},[425,79409,79410,79412,79414,79416,79418,79421,79423],{"class":427,"line":2755},[425,79411,55450],{"class":691},[425,79413,52192],{"class":701},[425,79415,1848],{"class":691},[425,79417,52247],{"class":1155},[425,79419,79420],{"class":691}," 30",[425,79422,52247],{"class":1155},[425,79424,2307],{"class":701},[425,79426,79427,79429,79431,79433,79436,79439,79441],{"class":427,"line":2760},[425,79428,62615],{"class":691},[425,79430,52192],{"class":701},[425,79432,705],{"class":691},[425,79434,79435],{"class":691}," ease",[425,79437,79438],{"class":691}," .5",[425,79440,1843],{"class":1155},[425,79442,2307],{"class":701},[425,79444,79445,79448,79450,79452,79454],{"class":427,"line":2765},[425,79446,79447],{"class":691},"      margin-bottom",[425,79449,52192],{"class":701},[425,79451,1848],{"class":691},[425,79453,52247],{"class":1155},[425,79455,2307],{"class":701},[425,79457,79458],{"class":427,"line":2779},[425,79459,3187],{"class":701},[425,79461,79462],{"class":427,"line":2784},[425,79463,3400],{"emptyLinePlaceholder":1084},[425,79465,79466,79469,79471,79474],{"class":427,"line":3577},[425,79467,79468],{"class":431},"    .item:nth-child",[425,79470,1159],{"class":701},[425,79472,79473],{"class":691},"4n",[425,79475,13441],{"class":701},[425,79477,79478,79480,79482,79484],{"class":427,"line":3591},[425,79479,62755],{"class":691},[425,79481,52192],{"class":701},[425,79483,1341],{"class":691},[425,79485,2307],{"class":701},[425,79487,79488],{"class":427,"line":3599},[425,79489,3187],{"class":701},[425,79491,79492],{"class":427,"line":3604},[425,79493,3400],{"emptyLinePlaceholder":1084},[425,79495,79496,79499],{"class":427,"line":3610},[425,79497,79498],{"class":431},"    .item:hover",[425,79500,16569],{"class":701},[425,79502,79503,79506,79508,79510,79512,79514,79516,79518,79520,79523,79525,79527,79529,79531,79533,79535,79537,79540],{"class":427,"line":3616},[425,79504,79505],{"class":691},"      box-shadow",[425,79507,52192],{"class":701},[425,79509,1341],{"class":691},[425,79511,52247],{"class":1155},[425,79513,5093],{"class":691},[425,79515,52247],{"class":1155},[425,79517,3148],{"class":691},[425,79519,52247],{"class":1155},[425,79521,79522],{"class":691}," rgba",[425,79524,1159],{"class":701},[425,79526,1341],{"class":691},[425,79528,13434],{"class":701},[425,79530,1341],{"class":691},[425,79532,13434],{"class":701},[425,79534,1341],{"class":691},[425,79536,13434],{"class":701},[425,79538,79539],{"class":691},".2",[425,79541,3719],{"class":701},[425,79543,79544,79547,79549,79552,79554,79556,79558,79561,79563,79565,79567],{"class":427,"line":3621},[425,79545,79546],{"class":691},"      transform",[425,79548,52192],{"class":701},[425,79550,79551],{"class":691},"translate3d",[425,79553,1159],{"class":701},[425,79555,1341],{"class":691},[425,79557,13434],{"class":701},[425,79559,79560],{"class":691},"-4",[425,79562,52247],{"class":1155},[425,79564,13434],{"class":701},[425,79566,1341],{"class":691},[425,79568,3719],{"class":701},[425,79570,79571,79573,79575,79577],{"class":427,"line":8948},[425,79572,62780],{"class":691},[425,79574,52192],{"class":701},[425,79576,62785],{"class":691},[425,79578,2307],{"class":701},[425,79580,79581],{"class":427,"line":8972},[425,79582,3187],{"class":701},[425,79584,79585],{"class":427,"line":8977},[425,79586,3400],{"emptyLinePlaceholder":1084},[425,79588,79589,79591,79593],{"class":427,"line":8983},[425,79590,79380],{"class":431},[425,79592,56370],{"class":52055},[425,79594,16569],{"class":701},[425,79596,79597,79599,79601,79603,79605],{"class":427,"line":9010},[425,79598,55526],{"class":691},[425,79600,52192],{"class":701},[425,79602,1460],{"class":691},[425,79604,1477],{"class":1155},[425,79606,2307],{"class":701},[425,79608,79609],{"class":427,"line":9015},[425,79610,3187],{"class":701},[425,79612,79613],{"class":427,"line":9021},[425,79614,3400],{"emptyLinePlaceholder":1084},[425,79616,79617,79619,79621],{"class":427,"line":9033},[425,79618,79380],{"class":431},[425,79620,63059],{"class":431},[425,79622,16569],{"class":701},[425,79624,79625,79627,79629,79631,79633],{"class":427,"line":9045},[425,79626,55677],{"class":691},[425,79628,52192],{"class":701},[425,79630,1798],{"class":691},[425,79632,52247],{"class":1155},[425,79634,2307],{"class":701},[425,79636,79637,79639,79641,79643,79645],{"class":427,"line":9057},[425,79638,79447],{"class":691},[425,79640,52192],{"class":701},[425,79642,1594],{"class":691},[425,79644,52247],{"class":1155},[425,79646,2307],{"class":701},[425,79648,79649,79651,79653,79656],{"class":427,"line":10715},[425,79650,58171],{"class":691},[425,79652,52192],{"class":701},[425,79654,79655],{"class":691},"#666",[425,79657,2307],{"class":701},[425,79659,79660],{"class":427,"line":10740},[425,79661,3187],{"class":701},[425,79663,79664],{"class":427,"line":10763},[425,79665,3400],{"emptyLinePlaceholder":1084},[425,79667,79668,79670,79673],{"class":427,"line":10787},[425,79669,79380],{"class":431},[425,79671,79672],{"class":431}," .price",[425,79674,16569],{"class":701},[425,79676,79677,79679,79681,79683,79685],{"class":427,"line":10792},[425,79678,55677],{"class":691},[425,79680,52192],{"class":701},[425,79682,1898],{"class":691},[425,79684,52247],{"class":1155},[425,79686,2307],{"class":701},[425,79688,79689,79691,79693,79696],{"class":427,"line":10797},[425,79690,58171],{"class":691},[425,79692,52192],{"class":701},[425,79694,79695],{"class":691},"firebrick",[425,79697,2307],{"class":701},[425,79699,79700],{"class":427,"line":10802},[425,79701,3187],{"class":701},[425,79703,79704],{"class":427,"line":10811},[425,79705,3400],{"emptyLinePlaceholder":1084},[425,79707,79708,79710,79713],{"class":427,"line":10816},[425,79709,79380],{"class":431},[425,79711,79712],{"class":431}," .price::before",[425,79714,16569],{"class":701},[425,79716,79717,79720,79722,79725],{"class":427,"line":10822},[425,79718,79719],{"class":691},"      content",[425,79721,52192],{"class":701},[425,79723,79724],{"class":435},"'￥'",[425,79726,2307],{"class":701},[425,79728,79729,79731,79733,79735,79737],{"class":427,"line":10843},[425,79730,55677],{"class":691},[425,79732,52192],{"class":701},[425,79734,1697],{"class":691},[425,79736,52247],{"class":1155},[425,79738,2307],{"class":701},[425,79740,79741],{"class":427,"line":10849},[425,79742,3187],{"class":701},[425,79744,79745],{"class":427,"line":10863},[425,79746,3400],{"emptyLinePlaceholder":1084},[425,79748,79749,79752],{"class":427,"line":10869},[425,79750,79751],{"class":431},"    .filter",[425,79753,16569],{"class":701},[425,79755,79756,79758,79760,79762],{"class":427,"line":10896},[425,79757,55764],{"class":691},[425,79759,52192],{"class":701},[425,79761,52232],{"class":691},[425,79763,2307],{"class":701},[425,79765,79766,79768,79770,79772,79774],{"class":427,"line":10905},[425,79767,55526],{"class":691},[425,79769,52192],{"class":701},[425,79771,79329],{"class":691},[425,79773,52247],{"class":1155},[425,79775,2307],{"class":701},[425,79777,79778,79780,79782,79784,79786],{"class":427,"line":10911},[425,79779,55461],{"class":691},[425,79781,52192],{"class":701},[425,79783,1341],{"class":691},[425,79785,52311],{"class":691},[425,79787,2307],{"class":701},[425,79789,79790,79792,79794,79796,79798,79800],{"class":427,"line":10919},[425,79791,55450],{"class":691},[425,79793,52192],{"class":701},[425,79795,1804],{"class":691},[425,79797,52247],{"class":1155},[425,79799,79420],{"class":691},[425,79801,79802],{"class":1155},"px\n",[425,79804,79805],{"class":427,"line":10924},[425,79806,3187],{"class":701},[425,79808,79809],{"class":427,"line":17601},[425,79810,3400],{"emptyLinePlaceholder":1084},[425,79812,79813,79815,79817],{"class":427,"line":17607},[425,79814,79751],{"class":431},[425,79816,2412],{"class":52055},[425,79818,16569],{"class":701},[425,79820,79821,79823,79825,79827,79829,79831,79833],{"class":427,"line":17630},[425,79822,55450],{"class":691},[425,79824,52192],{"class":701},[425,79826,1594],{"class":691},[425,79828,52247],{"class":1155},[425,79830,9950],{"class":691},[425,79832,52247],{"class":1155},[425,79834,2307],{"class":701},[425,79836,79837,79839,79841,79843],{"class":427,"line":17636},[425,79838,62476],{"class":691},[425,79840,52192],{"class":701},[425,79842,62573],{"class":691},[425,79844,2307],{"class":701},[425,79846,79847,79849,79851,79853],{"class":427,"line":17659},[425,79848,58171],{"class":691},[425,79850,52192],{"class":701},[425,79852,79655],{"class":691},[425,79854,2307],{"class":701},[425,79856,79857,79859,79861,79863],{"class":427,"line":17673},[425,79858,64725],{"class":691},[425,79860,52192],{"class":701},[425,79862,55492],{"class":691},[425,79864,2307],{"class":701},[425,79866,79867,79869,79871,79873,79875],{"class":427,"line":17693},[425,79868,62505],{"class":691},[425,79870,52192],{"class":701},[425,79872,1848],{"class":691},[425,79874,52247],{"class":1155},[425,79876,2307],{"class":701},[425,79878,79879],{"class":427,"line":17699},[425,79880,3187],{"class":701},[425,79882,79883],{"class":427,"line":17710},[425,79884,3400],{"emptyLinePlaceholder":1084},[425,79886,79887,79889,79891,79893],{"class":427,"line":17733},[425,79888,79751],{"class":431},[425,79890,2412],{"class":52055},[425,79892,62655],{"class":431},[425,79894,16569],{"class":701},[425,79896,79897,79899,79901,79904],{"class":427,"line":17755},[425,79898,55639],{"class":691},[425,79900,52192],{"class":701},[425,79902,79903],{"class":691},"#05943c",[425,79905,2307],{"class":701},[425,79907,79908,79910,79912,79914],{"class":427,"line":17760},[425,79909,58171],{"class":691},[425,79911,52192],{"class":701},[425,79913,61597],{"class":691},[425,79915,2307],{"class":701},[425,79917,79918],{"class":427,"line":17766},[425,79919,3187],{"class":701},[425,79921,79922,79924,79926],{"class":427,"line":17780},[425,79923,53172],{"class":701},[425,79925,1074],{"class":52055},[425,79927,52062],{"class":701},[425,79929,79930,79932,79934],{"class":427,"line":17793},[425,79931,52540],{"class":701},[425,79933,52089],{"class":52055},[425,79935,52062],{"class":701},[425,79937,79938],{"class":427,"line":17798},[425,79939,3400],{"emptyLinePlaceholder":1084},[425,79941,79942,79944,79946],{"class":427,"line":17812},[425,79943,2057],{"class":701},[425,79945,52555],{"class":52055},[425,79947,52062],{"class":701},[425,79949,79950,79952,79954,79956,79958,79961],{"class":427,"line":17817},[425,79951,52899],{"class":701},[425,79953,52366],{"class":52055},[425,79955,54241],{"class":431},[425,79957,1204],{"class":701},[425,79959,79960],{"class":435},"\"filter\"",[425,79962,52062],{"class":701},[425,79964,79965,79967,79969,79971,79973,79975,79978,79980,79982,79985,79987],{"class":427,"line":17823},[425,79966,52096],{"class":701},[425,79968,22],{"class":52055},[425,79970,61812],{"class":431},[425,79972,1204],{"class":701},[425,79974,61817],{"class":435},[425,79976,79977],{"class":431}," data-index",[425,79979,1204],{"class":701},[425,79981,4678],{"class":435},[425,79983,79984],{"class":701},">0-100元\u003C\u002F",[425,79986,22],{"class":52055},[425,79988,52062],{"class":701},[425,79990,79991,79993,79995,79997,79999,80001,80003,80005,80007,80010,80012],{"class":427,"line":17828},[425,79992,52096],{"class":701},[425,79994,22],{"class":52055},[425,79996,61812],{"class":431},[425,79998,1204],{"class":701},[425,80000,61817],{"class":435},[425,80002,79977],{"class":431},[425,80004,1204],{"class":701},[425,80006,4701],{"class":435},[425,80008,80009],{"class":701},">100-300元\u003C\u002F",[425,80011,22],{"class":52055},[425,80013,52062],{"class":701},[425,80015,80016,80018,80020,80022,80024,80026,80028,80030,80032,80035,80037],{"class":427,"line":17842},[425,80017,52096],{"class":701},[425,80019,22],{"class":52055},[425,80021,61812],{"class":431},[425,80023,1204],{"class":701},[425,80025,61817],{"class":435},[425,80027,79977],{"class":431},[425,80029,1204],{"class":701},[425,80031,4714],{"class":435},[425,80033,80034],{"class":701},">300元以上\u003C\u002F",[425,80036,22],{"class":52055},[425,80038,52062],{"class":701},[425,80040,80041,80043,80045,80047,80049,80051,80054,80056],{"class":427,"line":17847},[425,80042,52096],{"class":701},[425,80044,22],{"class":52055},[425,80046,61812],{"class":431},[425,80048,1204],{"class":701},[425,80050,61817],{"class":435},[425,80052,80053],{"class":701},">全部区间\u003C\u002F",[425,80055,22],{"class":52055},[425,80057,52062],{"class":701},[425,80059,80060,80062,80064],{"class":427,"line":17852},[425,80061,53172],{"class":701},[425,80063,52366],{"class":52055},[425,80065,52062],{"class":701},[425,80067,80068,80070,80072,80074,80076,80078],{"class":427,"line":17866},[425,80069,52899],{"class":701},[425,80071,52366],{"class":52055},[425,80073,54241],{"class":431},[425,80075,1204],{"class":701},[425,80077,63363],{"class":435},[425,80079,52062],{"class":701},[425,80081,80082],{"class":427,"line":17878},[425,80083,80084],{"class":1216},"    \u003C!-- \u003Cdiv class=\"item\">\n",[425,80086,80087],{"class":427,"line":17883},[425,80088,80089],{"class":1216},"      \u003Cimg src=\"\" alt=\"\">\n",[425,80091,80092],{"class":427,"line":17896},[425,80093,80094],{"class":1216},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[425,80096,80097],{"class":427,"line":17901},[425,80098,80099],{"class":1216},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[425,80101,80102],{"class":427,"line":17906},[425,80103,80104],{"class":1216},"    \u003C\u002Fdiv> -->\n",[425,80106,80107,80109,80111],{"class":427,"line":17911},[425,80108,53172],{"class":701},[425,80110,52366],{"class":52055},[425,80112,52062],{"class":701},[425,80114,80115,80117,80119],{"class":427,"line":17924},[425,80116,52899],{"class":701},[425,80118,52568],{"class":52055},[425,80120,52062],{"class":701},[425,80122,80123],{"class":427,"line":17929},[425,80124,80125],{"class":1216},"    \u002F\u002F 2. 初始化数据\n",[425,80127,80128,80130,80133,80135],{"class":427,"line":33388},[425,80129,12220],{"class":1155},[425,80131,80132],{"class":691}," goodsList",[425,80134,14563],{"class":1155},[425,80136,56202],{"class":701},[425,80138,80139],{"class":427,"line":33394},[425,80140,80141],{"class":701},"      {\n",[425,80143,80144,80147,80150],{"class":427,"line":33400},[425,80145,80146],{"class":701},"        id: ",[425,80148,80149],{"class":435},"'4001172'",[425,80151,32221],{"class":701},[425,80153,80154,80157,80160],{"class":427,"line":33406},[425,80155,80156],{"class":701},"        name: ",[425,80158,80159],{"class":435},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[425,80161,32221],{"class":701},[425,80163,80164,80167,80170],{"class":427,"line":33412},[425,80165,80166],{"class":701},"        price: ",[425,80168,80169],{"class":435},"'289.00'",[425,80171,32221],{"class":701},[425,80173,80174,80177,80180],{"class":427,"line":33423},[425,80175,80176],{"class":701},"        picture: ",[425,80178,80179],{"class":435},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[425,80181,32221],{"class":701},[425,80183,80184],{"class":427,"line":33429},[425,80185,78647],{"class":701},[425,80187,80188],{"class":427,"line":33449},[425,80189,80141],{"class":701},[425,80191,80192,80194,80197],{"class":427,"line":33455},[425,80193,80146],{"class":701},[425,80195,80196],{"class":435},"'4001594'",[425,80198,32221],{"class":701},[425,80200,80201,80203,80206],{"class":427,"line":33466},[425,80202,80156],{"class":701},[425,80204,80205],{"class":435},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[425,80207,32221],{"class":701},[425,80209,80210,80212,80215],{"class":427,"line":33472},[425,80211,80166],{"class":701},[425,80213,80214],{"class":435},"'288.00'",[425,80216,32221],{"class":701},[425,80218,80219,80221,80224],{"class":427,"line":33478},[425,80220,80176],{"class":701},[425,80222,80223],{"class":435},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[425,80225,32221],{"class":701},[425,80227,80228],{"class":427,"line":33484},[425,80229,78647],{"class":701},[425,80231,80232],{"class":427,"line":33490},[425,80233,80141],{"class":701},[425,80235,80236,80238,80241],{"class":427,"line":33496},[425,80237,80146],{"class":701},[425,80239,80240],{"class":435},"'4001009'",[425,80242,32221],{"class":701},[425,80244,80245,80247,80250],{"class":427,"line":33502},[425,80246,80156],{"class":701},[425,80248,80249],{"class":435},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[425,80251,32221],{"class":701},[425,80253,80254,80256,80259],{"class":427,"line":33508},[425,80255,80166],{"class":701},[425,80257,80258],{"class":435},"'109.00'",[425,80260,32221],{"class":701},[425,80262,80263,80265,80268],{"class":427,"line":33528},[425,80264,80176],{"class":701},[425,80266,80267],{"class":435},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[425,80269,32221],{"class":701},[425,80271,80272],{"class":427,"line":33534},[425,80273,78647],{"class":701},[425,80275,80276],{"class":427,"line":33550},[425,80277,80141],{"class":701},[425,80279,80280,80282,80285],{"class":427,"line":33556},[425,80281,80146],{"class":701},[425,80283,80284],{"class":435},"'4001874'",[425,80286,32221],{"class":701},[425,80288,80289,80291,80294],{"class":427,"line":33570},[425,80290,80156],{"class":701},[425,80292,80293],{"class":435},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[425,80295,32221],{"class":701},[425,80297,80298,80300,80303],{"class":427,"line":33576},[425,80299,80166],{"class":701},[425,80301,80302],{"class":435},"'488.00'",[425,80304,32221],{"class":701},[425,80306,80307,80309,80312],{"class":427,"line":33591},[425,80308,80176],{"class":701},[425,80310,80311],{"class":435},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[425,80313,32221],{"class":701},[425,80315,80316],{"class":427,"line":33597},[425,80317,78647],{"class":701},[425,80319,80320],{"class":427,"line":33606},[425,80321,80141],{"class":701},[425,80323,80324,80326,80329],{"class":427,"line":33612},[425,80325,80146],{"class":701},[425,80327,80328],{"class":435},"'4001649'",[425,80330,32221],{"class":701},[425,80332,80333,80335,80338],{"class":427,"line":33621},[425,80334,80156],{"class":701},[425,80336,80337],{"class":435},"'大师监制龙泉青瓷茶叶罐'",[425,80339,32221],{"class":701},[425,80341,80342,80344,80347],{"class":427,"line":33627},[425,80343,80166],{"class":701},[425,80345,80346],{"class":435},"'139.00'",[425,80348,32221],{"class":701},[425,80350,80351,80353,80356],{"class":427,"line":33633},[425,80352,80176],{"class":701},[425,80354,80355],{"class":435},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[425,80357,32221],{"class":701},[425,80359,80360],{"class":427,"line":33642},[425,80361,78647],{"class":701},[425,80363,80364],{"class":427,"line":33648},[425,80365,80141],{"class":701},[425,80367,80368,80370,80373],{"class":427,"line":33659},[425,80369,80146],{"class":701},[425,80371,80372],{"class":435},"'3997185'",[425,80374,32221],{"class":701},[425,80376,80377,80379,80382],{"class":427,"line":33665},[425,80378,80156],{"class":701},[425,80380,80381],{"class":435},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[425,80383,32221],{"class":701},[425,80385,80386,80388,80391],{"class":427,"line":33684},[425,80387,80166],{"class":701},[425,80389,80390],{"class":435},"'108.00'",[425,80392,32221],{"class":701},[425,80394,80395,80397,80400],{"class":427,"line":33690},[425,80396,80176],{"class":701},[425,80398,80399],{"class":435},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[425,80401,32221],{"class":701},[425,80403,80404],{"class":427,"line":33701},[425,80405,78647],{"class":701},[425,80407,80408],{"class":427,"line":33707},[425,80409,80141],{"class":701},[425,80411,80412,80414,80417],{"class":427,"line":33727},[425,80413,80146],{"class":701},[425,80415,80416],{"class":435},"'3997403'",[425,80418,32221],{"class":701},[425,80420,80421,80423,80426],{"class":427,"line":33743},[425,80422,80156],{"class":701},[425,80424,80425],{"class":435},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[425,80427,32221],{"class":701},[425,80429,80430,80432,80435],{"class":427,"line":33749},[425,80431,80166],{"class":701},[425,80433,80434],{"class":435},"'100.00'",[425,80436,32221],{"class":701},[425,80438,80439,80441,80444],{"class":427,"line":33763},[425,80440,80176],{"class":701},[425,80442,80443],{"class":435},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[425,80445,32221],{"class":701},[425,80447,80448],{"class":427,"line":33769},[425,80449,78647],{"class":701},[425,80451,80452],{"class":427,"line":33775},[425,80453,80141],{"class":701},[425,80455,80456,80458,80461],{"class":427,"line":33786},[425,80457,80146],{"class":701},[425,80459,80460],{"class":435},"'3998274'",[425,80462,32221],{"class":701},[425,80464,80465,80467,80470],{"class":427,"line":33792},[425,80466,80156],{"class":701},[425,80468,80469],{"class":435},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[425,80471,32221],{"class":701},[425,80473,80474,80476,80478],{"class":427,"line":33798},[425,80475,80166],{"class":701},[425,80477,80346],{"class":435},[425,80479,32221],{"class":701},[425,80481,80482,80484,80487],{"class":427,"line":33808},[425,80483,80176],{"class":701},[425,80485,80486],{"class":435},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[425,80488,32221],{"class":701},[425,80490,80491],{"class":427,"line":33814},[425,80492,78647],{"class":701},[425,80494,80495],{"class":427,"line":33825},[425,80496,53864],{"class":701},[425,80498,80499],{"class":427,"line":33831},[425,80500,3400],{"emptyLinePlaceholder":1084},[425,80502,80503],{"class":427,"line":33841},[425,80504,80505],{"class":1216},"    \u002F\u002F 1.渲染函数\n",[425,80507,80508,80510,80512,80514,80516],{"class":427,"line":33846},[425,80509,70839],{"class":1155},[425,80511,70842],{"class":431},[425,80513,1159],{"class":701},[425,80515,4880],{"class":6216},[425,80517,13441],{"class":701},[425,80519,80520],{"class":427,"line":33852},[425,80521,80522],{"class":1216},"      \u002F\u002F 声明空字符串\n",[425,80524,80525,80528,80531,80533],{"class":427,"line":33901},[425,80526,80527],{"class":1155},"      let",[425,80529,80530],{"class":701}," str ",[425,80532,1204],{"class":1155},[425,80534,70859],{"class":435},[425,80536,80537],{"class":427,"line":33948},[425,80538,70864],{"class":1216},[425,80540,80541,80543,80546,80548,80551,80554],{"class":427,"line":33953},[425,80542,58762],{"class":701},[425,80544,80545],{"class":431},"forEach",[425,80547,1159],{"class":701},[425,80549,80550],{"class":6216},"item",[425,80552,80553],{"class":1155}," =>",[425,80555,16569],{"class":701},[425,80557,80558,80560,80563,80566,80568,80571,80573,80576,80579,80581],{"class":427,"line":33959},[425,80559,62025],{"class":1155},[425,80561,80562],{"class":701}," { ",[425,80564,80565],{"class":691},"name",[425,80567,13434],{"class":701},[425,80569,80570],{"class":691},"price",[425,80572,13434],{"class":701},[425,80574,80575],{"class":691},"picture",[425,80577,80578],{"class":701}," } ",[425,80580,1204],{"class":1155},[425,80582,80583],{"class":701}," item\n",[425,80585,80586,80589,80591],{"class":427,"line":33978},[425,80587,80588],{"class":701},"        str ",[425,80590,10476],{"class":1155},[425,80592,70923],{"class":435},[425,80594,80595],{"class":427,"line":33984},[425,80596,80597],{"class":435},"          \u003Cdiv class=\"item\">\n",[425,80599,80600,80603,80605],{"class":427,"line":34004},[425,80601,80602],{"class":435},"            \u003Cimg src=\"${",[425,80604,80575],{"class":701},[425,80606,80607],{"class":435},"}\" alt=\"\">\n",[425,80609,80610,80613,80615],{"class":427,"line":34010},[425,80611,80612],{"class":435},"            \u003Cp class=\"name\">${",[425,80614,80565],{"class":701},[425,80616,80617],{"class":435},"}\u003C\u002Fp>\n",[425,80619,80620,80623,80625],{"class":427,"line":34016},[425,80621,80622],{"class":435},"            \u003Cp class=\"price\">${",[425,80624,80570],{"class":701},[425,80626,80617],{"class":435},[425,80628,80629],{"class":427,"line":34026},[425,80630,80631],{"class":435},"          \u003C\u002Fdiv>\n",[425,80633,80634],{"class":427,"line":34031},[425,80635,80636],{"class":435},"        `\n",[425,80638,80639],{"class":427,"line":34037},[425,80640,65570],{"class":701},[425,80642,80643],{"class":427,"line":34053},[425,80644,80645],{"class":1216},"      \u002F\u002F 追加给List\n",[425,80647,80648,80650,80652,80654,80657,80659,80661],{"class":427,"line":34098},[425,80649,56526],{"class":701},[425,80651,55154],{"class":431},[425,80653,1159],{"class":701},[425,80655,80656],{"class":435},"'.list'",[425,80658,75004],{"class":701},[425,80660,1204],{"class":1155},[425,80662,74740],{"class":701},[425,80664,80665],{"class":427,"line":34104},[425,80666,3187],{"class":701},[425,80668,80669],{"class":427,"line":34110},[425,80670,80671],{"class":1216},"    \u002F\u002F 页面一打开就需要渲染\n",[425,80673,80674,80677],{"class":427,"line":34116},[425,80675,80676],{"class":431},"    render",[425,80678,80679],{"class":701},"(goodsList)\n",[425,80681,80682],{"class":427,"line":34127},[425,80683,80684],{"class":1216},"    \u002F\u002F 2.过滤筛选\n",[425,80686,80687,80689,80691,80693,80696,80698,80700,80702,80704,80706,80708,80710],{"class":427,"line":34133},[425,80688,53162],{"class":701},[425,80690,55154],{"class":431},[425,80692,1159],{"class":701},[425,80694,80695],{"class":435},"'.filter'",[425,80697,31581],{"class":701},[425,80699,58568],{"class":431},[425,80701,1159],{"class":701},[425,80703,58573],{"class":435},[425,80705,13434],{"class":701},[425,80707,1232],{"class":6216},[425,80709,80553],{"class":1155},[425,80711,16569],{"class":701},[425,80713,80714],{"class":427,"line":34139},[425,80715,80716],{"class":1216},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[425,80718,80719,80721,80723,80726,80728,80730,80732,80734],{"class":427,"line":34145},[425,80720,58983],{"class":1155},[425,80722,80562],{"class":701},[425,80724,80725],{"class":691},"tagName",[425,80727,13434],{"class":701},[425,80729,32292],{"class":691},[425,80731,80578],{"class":701},[425,80733,1204],{"class":1155},[425,80735,80736],{"class":701}," e.target\n",[425,80738,80739],{"class":427,"line":34163},[425,80740,80741],{"class":1216},"      \u002F\u002F 判断\n",[425,80743,80744,80746,80748,80750,80752],{"class":427,"line":34177},[425,80745,55235],{"class":1155},[425,80747,67789],{"class":701},[425,80749,55241],{"class":1155},[425,80751,69011],{"class":435},[425,80753,13441],{"class":701},[425,80755,80756],{"class":427,"line":34186},[425,80757,80758],{"class":1216},"        \u002F\u002F console.log(11)\n",[425,80760,80761],{"class":427,"line":34195},[425,80762,80763],{"class":1216},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[425,80765,80766],{"class":427,"line":34204},[425,80767,80768],{"class":1216},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[425,80770,80771,80773,80775,80777],{"class":427,"line":34213},[425,80772,52585],{"class":1155},[425,80774,52588],{"class":701},[425,80776,1204],{"class":1155},[425,80778,80779],{"class":701}," goodsList\n",[425,80781,80782,80784,80787,80789,80792],{"class":427,"line":34219},[425,80783,3497],{"class":1155},[425,80785,80786],{"class":701}," (dataset.index ",[425,80788,55241],{"class":1155},[425,80790,80791],{"class":435}," '1'",[425,80793,13441],{"class":701},[425,80795,80796,80799,80801,80804,80807,80809,80811,80813,80816,80818,80820,80823,80825,80827,80829],{"class":427,"line":34225},[425,80797,80798],{"class":701},"          arr ",[425,80800,1204],{"class":1155},[425,80802,80803],{"class":701}," goodsList.",[425,80805,80806],{"class":431},"filter",[425,80808,1159],{"class":701},[425,80810,80550],{"class":6216},[425,80812,80553],{"class":1155},[425,80814,80815],{"class":701}," item.price ",[425,80817,2712],{"class":1155},[425,80819,5093],{"class":691},[425,80821,80822],{"class":1155}," &&",[425,80824,80815],{"class":701},[425,80826,2601],{"class":1155},[425,80828,6754],{"class":691},[425,80830,1165],{"class":701},[425,80832,80833,80836,80838,80840,80842,80844,80847],{"class":427,"line":34233},[425,80834,80835],{"class":701},"        } ",[425,80837,2703],{"class":1155},[425,80839,2706],{"class":1155},[425,80841,80786],{"class":701},[425,80843,55241],{"class":1155},[425,80845,80846],{"class":435}," '2'",[425,80848,13441],{"class":701},[425,80850,80851,80853,80855,80857,80859,80861,80863,80865,80867,80869,80871,80873,80875,80877,80880],{"class":427,"line":34238},[425,80852,80798],{"class":701},[425,80854,1204],{"class":1155},[425,80856,80803],{"class":701},[425,80858,80806],{"class":431},[425,80860,1159],{"class":701},[425,80862,80550],{"class":6216},[425,80864,80553],{"class":1155},[425,80866,80815],{"class":701},[425,80868,2712],{"class":1155},[425,80870,6754],{"class":691},[425,80872,80822],{"class":1155},[425,80874,80815],{"class":701},[425,80876,2601],{"class":1155},[425,80878,80879],{"class":691}," 300",[425,80881,1165],{"class":701},[425,80883,80884,80886,80888,80890,80892,80894,80897],{"class":427,"line":34244},[425,80885,80835],{"class":701},[425,80887,2703],{"class":1155},[425,80889,2706],{"class":1155},[425,80891,80786],{"class":701},[425,80893,55241],{"class":1155},[425,80895,80896],{"class":435}," '3'",[425,80898,13441],{"class":701},[425,80900,80901,80903,80905,80907,80909,80911,80913,80915,80917,80919,80921],{"class":427,"line":34255},[425,80902,80798],{"class":701},[425,80904,1204],{"class":1155},[425,80906,80803],{"class":701},[425,80908,80806],{"class":431},[425,80910,1159],{"class":701},[425,80912,80550],{"class":6216},[425,80914,80553],{"class":1155},[425,80916,80815],{"class":701},[425,80918,2712],{"class":1155},[425,80920,80879],{"class":691},[425,80922,1165],{"class":701},[425,80924,80925],{"class":427,"line":34261},[425,80926,3529],{"class":701},[425,80928,80929],{"class":427,"line":34281},[425,80930,80931],{"class":1216},"        \u002F\u002F 渲染函数\n",[425,80933,80934,80936],{"class":427,"line":34287},[425,80935,71163],{"class":431},[425,80937,53167],{"class":701},[425,80939,80940],{"class":427,"line":34293},[425,80941,53153],{"class":701},[425,80943,80944],{"class":427,"line":34299},[425,80945,3400],{"emptyLinePlaceholder":1084},[425,80947,80948],{"class":427,"line":34316},[425,80949,34216],{"class":701},[425,80951,80952,80954,80956],{"class":427,"line":34322},[425,80953,53172],{"class":701},[425,80955,52568],{"class":52055},[425,80957,52062],{"class":701},[425,80959,80960,80962,80964],{"class":427,"line":34328},[425,80961,52540],{"class":701},[425,80963,52555],{"class":52055},[425,80965,52062],{"class":701},[425,80967,80968],{"class":427,"line":34334},[425,80969,3400],{"emptyLinePlaceholder":1084},[425,80971,80972,80974,80976],{"class":427,"line":34340},[425,80973,52540],{"class":701},[425,80975,51390],{"class":52055},[425,80977,52062],{"class":701},[1099,80979,80981],{"id":80980},"_410-深入了解对象","4.10 深入了解对象",[14,80983,80985],{"id":80984},"_4101-创建对象","4.10.1 创建对象",[19,80987,80988],{},[393,80989],{"alt":395,"src":80990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,80992,80993],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[14,80995,80997],{"id":80996},"_4102-构造函数","4.10.2 构造函数",[19,80999,81000,81003],{},[400,81001,81002],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,81005,81006,81009],{},[400,81007,81008],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[416,81011,81013],{"className":51388,"code":81012,"language":51390,"meta":395,"style":395},"\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",[422,81014,81015,81023,81028,81049,81062,81074,81086,81090,81095,81122,81127,81154],{"__ignoreMap":395},[425,81016,81017,81019,81021],{"class":427,"line":428},[425,81018,2057],{"class":701},[425,81020,52568],{"class":52055},[425,81022,52062],{"class":701},[425,81024,81025],{"class":427,"line":698},[425,81026,81027],{"class":1216},"\u002F\u002F例：\n",[425,81029,81030,81032,81035,81037,81039,81041,81043,81045,81047],{"class":427,"line":710},[425,81031,55204],{"class":1155},[425,81033,81034],{"class":431}," Pig",[425,81036,1159],{"class":701},[425,81038,80565],{"class":6216},[425,81040,1527],{"class":701},[425,81042,70976],{"class":6216},[425,81044,1527],{"class":701},[425,81046,70993],{"class":6216},[425,81048,13441],{"class":701},[425,81050,81051,81054,81057,81059],{"class":427,"line":721},[425,81052,81053],{"class":691},"    this",[425,81055,81056],{"class":701},".name",[425,81058,1204],{"class":1155},[425,81060,81061],{"class":701},"name\n",[425,81063,81064,81066,81069,81071],{"class":427,"line":735},[425,81065,81053],{"class":691},[425,81067,81068],{"class":701},".age",[425,81070,1204],{"class":1155},[425,81072,81073],{"class":701},"age\n",[425,81075,81076,81078,81081,81083],{"class":427,"line":743},[425,81077,81053],{"class":691},[425,81079,81080],{"class":701},".gender",[425,81082,1204],{"class":1155},[425,81084,81085],{"class":701},"gender    \n",[425,81087,81088],{"class":427,"line":751},[425,81089,2578],{"class":701},[425,81091,81092],{"class":427,"line":759},[425,81093,81094],{"class":1216},"\u002F\u002F创建佩奇对象\n",[425,81096,81097,81099,81102,81104,81106,81108,81111,81113,81115,81117,81120],{"class":427,"line":770},[425,81098,7792],{"class":1155},[425,81100,81101],{"class":691}," Peppa",[425,81103,12716],{"class":1155},[425,81105,81034],{"class":431},[425,81107,1159],{"class":701},[425,81109,81110],{"class":435},"'佩奇'",[425,81112,1527],{"class":701},[425,81114,1493],{"class":691},[425,81116,1527],{"class":701},[425,81118,81119],{"class":435},"'女'",[425,81121,1165],{"class":701},[425,81123,81124],{"class":427,"line":780},[425,81125,81126],{"class":1216},"\u002F\u002F创建乔治对象\n",[425,81128,81129,81131,81134,81136,81138,81140,81143,81145,81147,81149,81152],{"class":427,"line":790},[425,81130,7792],{"class":1155},[425,81132,81133],{"class":691}," George",[425,81135,12716],{"class":1155},[425,81137,81034],{"class":431},[425,81139,1159],{"class":701},[425,81141,81142],{"class":435},"'乔治'",[425,81144,1527],{"class":701},[425,81146,1229],{"class":691},[425,81148,1527],{"class":701},[425,81150,81151],{"class":435},"'男'",[425,81153,1165],{"class":701},[425,81155,81156,81158,81160],{"class":427,"line":805},[425,81157,52540],{"class":701},[425,81159,52568],{"class":52055},[425,81161,52062],{"class":701},[19,81163,81164],{},[393,81165],{"alt":395,"src":81166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,81168,81169],{},[393,81170],{"alt":395,"src":81171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,81173,81174],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,81176,81177],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,81179,81180],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,81182,81183],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,81185,81186],{},"这里用等号是因为：对象.属性=值",[19,81188,81189],{},"①利用对象字面量创建对象",[19,81191,81192],{},"const o={",[19,81194,81195],{},"name:'pink'",[19,81197,81198],{},"} ②利用new Object创建对象",[19,81200,81201],{},"const o=new Object({name:'pink'})",[19,81203,81204],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,81206,81207],{},"构造函数创建对象的执行过程：",[19,81209,81210],{},[393,81211],{"alt":395,"src":81212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[14,81214,81216],{"id":81215},"_4103-实例成员","4.10.3 实例成员",[19,81218,81219],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[972,81221,81222,81225,81228],{},[450,81223,81224],{},"实例对象的属性和方法即为实例成员",[450,81226,81227],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[450,81229,81230],{},"构造函数创建的实例对象彼此独立互不影响",[14,81232,81234],{"id":81233},"_4104-静态成员","4.10.4 静态成员",[19,81236,81237],{},[393,81238],{"alt":395,"src":81239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,81241,81242],{},"静态成员有Date.now() Math.PI Math.random()",[19,81244,81245],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,81247,81248],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,81250,81251],{},"function Pig(name) n {",[19,81253,81254],{},"this.name=name",[19,81256,2093],{},[19,81258,81259],{},"Pig.eyes=2",[19,81261,81262],{},"Pig.sayHai=function () { console.log(this) }",[19,81264,81265],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,81267,81268],{},"console.log(Pig.eyes) \u002F\u002F2",[19,81270,12331],{},[972,81272,81273,81276,81279,81282,81285],{},[450,81274,81275],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[450,81277,81278],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[450,81280,81281],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[450,81283,81284],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[450,81286,81287],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,81289,81290],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[14,81292,81294],{"id":81293},"_4105-内置构造函数","4.10.5 内置构造函数",[19,81296,81297],{},"内置构造函数包含：",[19,81299,81300],{},[393,81301],{"alt":395,"src":81302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,81304,81305],{},[393,81306],{"alt":395,"src":81307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,81309,81310],{},"这些基本数据类型，js对他们进行了包装",[52568,81312,81313],{},"\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",[22995,81315,81317],{"id":81316},"_41051-object","4.10.5.1 Object",[19,81319,81320],{},"Object 是内置的构造函数，用于创建普通对象",[19,81322,81323],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[416,81325,81327],{"className":51388,"code":81326,"language":51390,"meta":395,"style":395},"const user=new Object({name:'小明',age:15})\n",[422,81328,81329],{"__ignoreMap":395},[425,81330,81331],{"class":427,"line":428},[425,81332,81326],{"class":701},[19,81334,81335],{},"三个常用的静态方法：",[23907,81337,81339],{"id":81338},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,81341,81342],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,81344,81345],{},[393,81346],{"alt":395,"src":81347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,81349,81350],{},[393,81351],{"alt":395,"src":81352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[416,81354,81356],{"className":53822,"code":81355,"language":53824,"meta":395,"style":395},"\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",[422,81357,81358,81366,81374,81379,81384,81389,81394,81399,81404,81412],{"__ignoreMap":395},[425,81359,81360,81362,81364],{"class":427,"line":428},[425,81361,2057],{"class":701},[425,81363,52555],{"class":52055},[425,81365,52062],{"class":701},[425,81367,81368,81370,81372],{"class":427,"line":698},[425,81369,52899],{"class":701},[425,81371,52568],{"class":52055},[425,81373,52062],{"class":701},[425,81375,81376],{"class":427,"line":710},[425,81377,81378],{"class":701},"    const o = { name: 'pink', age: 6 }\n",[425,81380,81381],{"class":427,"line":721},[425,81382,81383],{"class":701},"    \u002F\u002F 获得所有属性名\n",[425,81385,81386],{"class":427,"line":735},[425,81387,81388],{"class":701},"    const arr = Object.keys(o)\n",[425,81390,81391],{"class":427,"line":743},[425,81392,81393],{"class":701},"    console.log(arr)\n",[425,81395,81396],{"class":427,"line":751},[425,81397,81398],{"class":701},"    \u002F\u002F 获得所有属性值\n",[425,81400,81401],{"class":427,"line":759},[425,81402,81403],{"class":701},"    console.log(Object.values(o))\n",[425,81405,81406,81408,81410],{"class":427,"line":770},[425,81407,53172],{"class":701},[425,81409,52568],{"class":52055},[425,81411,52062],{"class":701},[425,81413,81414,81416,81418],{"class":427,"line":780},[425,81415,52540],{"class":701},[425,81417,52555],{"class":52055},[425,81419,52062],{"class":701},[23907,81421,81423],{"id":81422},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,81425,81426],{},"Object.assign(oo,o)",[19,81428,81429],{},"后的东西添加给前 是追加",[19,81431,81432],{},[393,81433],{"alt":395,"src":81434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,81436,81437],{},[393,81438],{"alt":395,"src":81439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[416,81441,81443],{"className":53822,"code":81442,"language":53824,"meta":395,"style":395},"\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",[422,81444,81445,81453,81461,81465,81469,81473,81477,81481,81485,81490,81495,81500,81505,81510,81518],{"__ignoreMap":395},[425,81446,81447,81449,81451],{"class":427,"line":428},[425,81448,2057],{"class":701},[425,81450,52555],{"class":52055},[425,81452,52062],{"class":701},[425,81454,81455,81457,81459],{"class":427,"line":698},[425,81456,52899],{"class":701},[425,81458,52568],{"class":52055},[425,81460,52062],{"class":701},[425,81462,81463],{"class":427,"line":710},[425,81464,81378],{"class":701},[425,81466,81467],{"class":427,"line":721},[425,81468,81383],{"class":701},[425,81470,81471],{"class":427,"line":735},[425,81472,81388],{"class":701},[425,81474,81475],{"class":427,"line":743},[425,81476,81393],{"class":701},[425,81478,81479],{"class":427,"line":751},[425,81480,81398],{"class":701},[425,81482,81483],{"class":427,"line":759},[425,81484,81403],{"class":701},[425,81486,81487],{"class":427,"line":770},[425,81488,81489],{"class":701},"    const oo = {}\n",[425,81491,81492],{"class":427,"line":780},[425,81493,81494],{"class":701},"    Object.assign(oo, o)\n",[425,81496,81497],{"class":427,"line":790},[425,81498,81499],{"class":701},"    console.log(oo)\n",[425,81501,81502],{"class":427,"line":805},[425,81503,81504],{"class":701},"    Object.assign(o, { gender: '女' })\n",[425,81506,81507],{"class":427,"line":818},[425,81508,81509],{"class":701},"    console.log(o)\n",[425,81511,81512,81514,81516],{"class":427,"line":831},[425,81513,53172],{"class":701},[425,81515,52568],{"class":52055},[425,81517,52062],{"class":701},[425,81519,81520,81522,81524],{"class":427,"line":841},[425,81521,52540],{"class":701},[425,81523,52555],{"class":52055},[425,81525,52062],{"class":701},[19,81527,81528],{},[393,81529],{"alt":395,"src":81530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22995,81532,81534],{"id":81533},"_41052-array","4.10.5.2 Array",[19,81536,81537],{},"Array 是内置的构造函数，用于创建数组",[19,81539,81540],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[416,81542,81544],{"className":51388,"code":81543,"language":51390,"meta":395,"style":395},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[422,81545,81546,81551],{"__ignoreMap":395},[425,81547,81548],{"class":427,"line":428},[425,81549,81550],{"class":701},"const arr=new Array(3,5)\n",[425,81552,81553],{"class":427,"line":698},[425,81554,81555],{"class":701},"console.log(arr)  \u002F\u002F[3,5]\n",[19,81557,81558],{},"Array的实例方法，这个方法是实例成员",[19,81560,81561],{},[393,81562],{"alt":395,"src":81563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23907,81565,81567],{"id":81566},"_410521-reduce","4.10.5.2.1 reduce",[19,81569,81570],{},[393,81571],{"alt":395,"src":81572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[416,81574,81576],{"className":53822,"code":81575,"language":53824,"meta":395,"style":395},"\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",[422,81577,81578,81586,81594,81599,81604,81609,81614,81618,81623,81628,81633,81637,81642,81647,81651,81656,81661,81666,81674],{"__ignoreMap":395},[425,81579,81580,81582,81584],{"class":427,"line":428},[425,81581,2057],{"class":701},[425,81583,52555],{"class":52055},[425,81585,52062],{"class":701},[425,81587,81588,81590,81592],{"class":427,"line":698},[425,81589,52899],{"class":701},[425,81591,52568],{"class":52055},[425,81593,52062],{"class":701},[425,81595,81596],{"class":427,"line":710},[425,81597,81598],{"class":701},"    const arr = [1, 5, 8]\n",[425,81600,81601],{"class":427,"line":721},[425,81602,81603],{"class":701},"    \u002F\u002F 1.没有初始值\n",[425,81605,81606],{"class":427,"line":735},[425,81607,81608],{"class":701},"    const total = arr.reduce(function (prev, current) {\n",[425,81610,81611],{"class":427,"line":743},[425,81612,81613],{"class":701},"      return prev + current\n",[425,81615,81616],{"class":427,"line":751},[425,81617,34216],{"class":701},[425,81619,81620],{"class":427,"line":759},[425,81621,81622],{"class":701},"    console.log(total)   \u002F\u002F14\n",[425,81624,81625],{"class":427,"line":770},[425,81626,81627],{"class":701},"    \u002F\u002F 2.有初始值\n",[425,81629,81630],{"class":427,"line":780},[425,81631,81632],{"class":701},"    const total1 = arr.reduce(function (prev, current) {\n",[425,81634,81635],{"class":427,"line":790},[425,81636,81613],{"class":701},[425,81638,81639],{"class":427,"line":805},[425,81640,81641],{"class":701},"    }, 10)\n",[425,81643,81644],{"class":427,"line":818},[425,81645,81646],{"class":701},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[425,81648,81649],{"class":427,"line":831},[425,81650,3400],{"emptyLinePlaceholder":1084},[425,81652,81653],{"class":427,"line":841},[425,81654,81655],{"class":701},"    \u002F\u002F 3.箭头函数写法\n",[425,81657,81658],{"class":427,"line":852},[425,81659,81660],{"class":701},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[425,81662,81663],{"class":427,"line":862},[425,81664,81665],{"class":701},"    console.log(total2)   \u002F\u002F24\n",[425,81667,81668,81670,81672],{"class":427,"line":878},[425,81669,53172],{"class":701},[425,81671,52568],{"class":52055},[425,81673,52062],{"class":701},[425,81675,81676,81678,81680],{"class":427,"line":914},[425,81677,52540],{"class":701},[425,81679,52555],{"class":52055},[425,81681,52062],{"class":701},[19,81683,81684],{},"执行过程：",[972,81686,81687,81690,81693],{},[450,81688,81689],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[450,81691,81692],{},"每一次循环，把返回值给作为下一次循环的上一次值",[450,81694,81695],{},"如果有起始值，则起始值作为上一次值",[416,81697,81699],{"className":53822,"code":81698,"language":53824,"meta":395,"style":395},"\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",[422,81700,81701,81709,81717,81721,81725,81729,81733,81737,81741,81746,81751,81756,81761,81766,81770,81774,81778,81782,81786,81790,81795,81799,81804,81808,81813,81818,81822,81826,81830,81838],{"__ignoreMap":395},[425,81702,81703,81705,81707],{"class":427,"line":428},[425,81704,2057],{"class":701},[425,81706,52555],{"class":52055},[425,81708,52062],{"class":701},[425,81710,81711,81713,81715],{"class":427,"line":698},[425,81712,52899],{"class":701},[425,81714,52568],{"class":52055},[425,81716,52062],{"class":701},[425,81718,81719],{"class":427,"line":710},[425,81720,81598],{"class":701},[425,81722,81723],{"class":427,"line":721},[425,81724,81603],{"class":701},[425,81726,81727],{"class":427,"line":735},[425,81728,81608],{"class":701},[425,81730,81731],{"class":427,"line":743},[425,81732,81613],{"class":701},[425,81734,81735],{"class":427,"line":751},[425,81736,34216],{"class":701},[425,81738,81739],{"class":427,"line":759},[425,81740,81622],{"class":701},[425,81742,81743],{"class":427,"line":770},[425,81744,81745],{"class":701},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[425,81747,81748],{"class":427,"line":780},[425,81749,81750],{"class":701},"    \u002F\u002F     1              5                    6\n",[425,81752,81753],{"class":427,"line":790},[425,81754,81755],{"class":701},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[425,81757,81758],{"class":427,"line":805},[425,81759,81760],{"class":701},"    \u002F\u002F     6              8                    14\n",[425,81762,81763],{"class":427,"line":818},[425,81764,81765],{"class":701},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[425,81767,81768],{"class":427,"line":831},[425,81769,81627],{"class":701},[425,81771,81772],{"class":427,"line":841},[425,81773,81632],{"class":701},[425,81775,81776],{"class":427,"line":852},[425,81777,81613],{"class":701},[425,81779,81780],{"class":427,"line":862},[425,81781,81641],{"class":701},[425,81783,81784],{"class":427,"line":878},[425,81785,81646],{"class":701},[425,81787,81788],{"class":427,"line":914},[425,81789,81745],{"class":701},[425,81791,81792],{"class":427,"line":943},[425,81793,81794],{"class":701},"    \u002F\u002F     10             1                     11\n",[425,81796,81797],{"class":427,"line":956},[425,81798,81755],{"class":701},[425,81800,81801],{"class":427,"line":964},[425,81802,81803],{"class":701},"    \u002F\u002F     11             5                    16\n",[425,81805,81806],{"class":427,"line":2733},[425,81807,81755],{"class":701},[425,81809,81810],{"class":427,"line":2750},[425,81811,81812],{"class":701},"    \u002F\u002F     16             8                    24\n",[425,81814,81815],{"class":427,"line":2755},[425,81816,81817],{"class":701},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[425,81819,81820],{"class":427,"line":2760},[425,81821,81655],{"class":701},[425,81823,81824],{"class":427,"line":2765},[425,81825,81660],{"class":701},[425,81827,81828],{"class":427,"line":2779},[425,81829,81665],{"class":701},[425,81831,81832,81834,81836],{"class":427,"line":2784},[425,81833,53172],{"class":701},[425,81835,52568],{"class":52055},[425,81837,52062],{"class":701},[425,81839,81840,81842,81844],{"class":427,"line":3577},[425,81841,52540],{"class":701},[425,81843,52555],{"class":52055},[425,81845,52062],{"class":701},[23907,81847,81849],{"id":81848},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,81851,81852],{},[393,81853],{"alt":395,"src":81854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[416,81856,81858],{"className":53822,"code":81857,"language":53824,"meta":395,"style":395},"\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",[422,81859,81860,81868,81876,81881,81886,81891,81896,81900,81905,81910,81915,81920,81925,81930,81934,81939,81943,81948,81956],{"__ignoreMap":395},[425,81861,81862,81864,81866],{"class":427,"line":428},[425,81863,2057],{"class":701},[425,81865,52555],{"class":52055},[425,81867,52062],{"class":701},[425,81869,81870,81872,81874],{"class":427,"line":698},[425,81871,52899],{"class":701},[425,81873,52568],{"class":52055},[425,81875,52062],{"class":701},[425,81877,81878],{"class":427,"line":710},[425,81879,81880],{"class":701},"    const arr = [\n",[425,81882,81883],{"class":427,"line":721},[425,81884,81885],{"class":701},"      { name: '张三', salary: 10000 },\n",[425,81887,81888],{"class":427,"line":735},[425,81889,81890],{"class":701},"      { name: '李四', salary: 10000 },\n",[425,81892,81893],{"class":427,"line":743},[425,81894,81895],{"class":701},"      { name: '王五', salary: 10000 }\n",[425,81897,81898],{"class":427,"line":751},[425,81899,53864],{"class":701},[425,81901,81902],{"class":427,"line":759},[425,81903,81904],{"class":701},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[425,81906,81907],{"class":427,"line":770},[425,81908,81909],{"class":701},"    \u002F\u002F prev是累计值\n",[425,81911,81912],{"class":427,"line":780},[425,81913,81914],{"class":701},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[425,81916,81917],{"class":427,"line":790},[425,81918,81919],{"class":701},"    console.log(total)\n",[425,81921,81922],{"class":427,"line":805},[425,81923,81924],{"class":701},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[425,81926,81927],{"class":427,"line":818},[425,81928,81929],{"class":701},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[425,81931,81932],{"class":427,"line":831},[425,81933,81924],{"class":701},[425,81935,81936],{"class":427,"line":841},[425,81937,81938],{"class":701},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[425,81940,81941],{"class":427,"line":852},[425,81942,81924],{"class":701},[425,81944,81945],{"class":427,"line":862},[425,81946,81947],{"class":701},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[425,81949,81950,81952,81954],{"class":427,"line":878},[425,81951,53172],{"class":701},[425,81953,52568],{"class":52055},[425,81955,52062],{"class":701},[425,81957,81958,81960,81962],{"class":427,"line":914},[425,81959,52540],{"class":701},[425,81961,52555],{"class":52055},[425,81963,52062],{"class":701},[23907,81965,81967],{"id":81966},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,81969,81970],{},[393,81971],{"alt":395,"src":81972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,81974,81975],{},[393,81976],{"alt":395,"src":81977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[972,81979,81980],{},[450,81981,81982],{},"find()",[19,81984,81985],{},"循环查找，找到第一个就ok",[19,81987,81988],{},[22,81989,81992],{"href":81990,"rel":81991},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[26],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[416,81994,81996],{"className":51388,"code":81995,"language":51390,"meta":395,"style":395},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[422,81997,81998,82003,82008],{"__ignoreMap":395},[425,81999,82000],{"class":427,"line":428},[425,82001,82002],{"class":701},"const array1 = [5, 12, 8, 130, 44]\n",[425,82004,82005],{"class":427,"line":698},[425,82006,82007],{"class":701},"const found = array1.find((element) => element > 10)\n",[425,82009,82010],{"class":427,"line":710},[425,82011,82012],{"class":701},"console.log(found)  \u002F\u002F12\n",[19,82014,82015,82017,82018,82023,82024,82027,82028,82030,82031,82036,82037,82039,82040,82042,82043,82045,82046],{},[422,82016,81982],{}," 方法是一个",[22,82019,82022],{"href":82020,"rel":82021},"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",[26],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[422,82025,82026],{},"callbackFn"," 函数，直到 ",[422,82029,82026],{}," 返回一个",[22,82032,82035],{"href":82033,"rel":82034},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[26],"真值","。然后 ",[422,82038,81982],{}," 返回该元素并停止迭代数组。如果 ",[422,82041,82026],{}," 从未返回真值，则 ",[422,82044,81982],{}," 返回 ",[422,82047,82048],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[416,82050,82052],{"className":53822,"code":82051,"language":53824,"meta":395,"style":395},"\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",[422,82053,82054,82062,82070,82075,82080,82085,82089,82094,82099,82103,82108,82113,82117,82121,82126,82131,82135,82139,82144,82149,82154,82159,82164,82168,82173,82178,82183,82188,82192,82197,82205],{"__ignoreMap":395},[425,82055,82056,82058,82060],{"class":427,"line":428},[425,82057,2057],{"class":701},[425,82059,52555],{"class":52055},[425,82061,52062],{"class":701},[425,82063,82064,82066,82068],{"class":427,"line":698},[425,82065,52899],{"class":701},[425,82067,52568],{"class":52055},[425,82069,52062],{"class":701},[425,82071,82072],{"class":427,"line":710},[425,82073,82074],{"class":701},"    const arr = ['red', 'blue', 'green']\n",[425,82076,82077],{"class":427,"line":721},[425,82078,82079],{"class":701},"    const found = arr.find(item => item === 'pink')\n",[425,82081,82082],{"class":427,"line":735},[425,82083,82084],{"class":701},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[425,82086,82087],{"class":427,"line":743},[425,82088,3400],{"emptyLinePlaceholder":1084},[425,82090,82091],{"class":427,"line":751},[425,82092,82093],{"class":701},"    \u002F\u002F 使用场景，用于查找数据\n",[425,82095,82096],{"class":427,"line":759},[425,82097,82098],{"class":701},"    const arr1 = [\n",[425,82100,82101],{"class":427,"line":770},[425,82102,80141],{"class":701},[425,82104,82105],{"class":427,"line":780},[425,82106,82107],{"class":701},"        name: '小米',\n",[425,82109,82110],{"class":427,"line":790},[425,82111,82112],{"class":701},"        price: 1999\n",[425,82114,82115],{"class":427,"line":805},[425,82116,78647],{"class":701},[425,82118,82119],{"class":427,"line":818},[425,82120,80141],{"class":701},[425,82122,82123],{"class":427,"line":831},[425,82124,82125],{"class":701},"        name: '华为',\n",[425,82127,82128],{"class":427,"line":841},[425,82129,82130],{"class":701},"        price: 3999\n",[425,82132,82133],{"class":427,"line":852},[425,82134,53153],{"class":701},[425,82136,82137],{"class":427,"line":862},[425,82138,53864],{"class":701},[425,82140,82141],{"class":427,"line":878},[425,82142,82143],{"class":701},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[425,82145,82146],{"class":427,"line":914},[425,82147,82148],{"class":701},"    \u002F\u002F const found1 = arr1.find(item => {\n",[425,82150,82151],{"class":427,"line":943},[425,82152,82153],{"class":701},"    \u002F\u002F   if (item.name === '小米') {\n",[425,82155,82156],{"class":427,"line":956},[425,82157,82158],{"class":701},"    \u002F\u002F     return item\n",[425,82160,82161],{"class":427,"line":964},[425,82162,82163],{"class":701},"    \u002F\u002F   }\n",[425,82165,82166],{"class":427,"line":2733},[425,82167,64045],{"class":701},[425,82169,82170],{"class":427,"line":2750},[425,82171,82172],{"class":701},"    \u002F\u002F 另一种写法\n",[425,82174,82175],{"class":427,"line":2755},[425,82176,82177],{"class":701},"    const found1 = arr1.find(item => {\n",[425,82179,82180],{"class":427,"line":2760},[425,82181,82182],{"class":701},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[425,82184,82185],{"class":427,"line":2765},[425,82186,82187],{"class":701},"      return item.name = '小米'\n",[425,82189,82190],{"class":427,"line":2779},[425,82191,34216],{"class":701},[425,82193,82194],{"class":427,"line":2784},[425,82195,82196],{"class":701},"    console.log(found1)\n",[425,82198,82199,82201,82203],{"class":427,"line":3577},[425,82200,53172],{"class":701},[425,82202,52568],{"class":52055},[425,82204,52062],{"class":701},[425,82206,82207,82209,82211],{"class":427,"line":3591},[425,82208,52540],{"class":701},[425,82210,52555],{"class":52055},[425,82212,52062],{"class":701},[19,82214,82215],{},[393,82216],{"alt":395,"src":82217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,82219,82220],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[972,82222,82223],{"start":698},[450,82224,82225],{},"every()返回的是布尔值",[19,82227,82228],{},[22,82229,82232],{"href":82230,"rel":82231},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[26],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,82234,82235],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,82237,82238],{},"some是只有有一个就没问题",[19,82240,82241],{},"every是必须全是才行",[416,82243,82247],{"className":82244,"code":82245,"language":82246,"meta":395,"style":395},"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",[422,82248,82249,82265,82279,82283,82292],{"__ignoreMap":395},[425,82250,82251,82253,82256,82258,82260,82263],{"class":427,"line":428},[425,82252,55204],{"class":1155},[425,82254,82255],{"class":701}," isBigEnough(element, ",[425,82257,74813],{"class":1155},[425,82259,13434],{"class":701},[425,82261,82262],{"class":1155},"array",[425,82264,13441],{"class":701},[425,82266,82267,82270,82273,82275,82277],{"class":427,"line":698},[425,82268,82269],{"class":1155},"  return",[425,82271,82272],{"class":701}," element ",[425,82274,2712],{"class":1155},[425,82276,3038],{"class":691},[425,82278,2307],{"class":701},[425,82280,82281],{"class":427,"line":710},[425,82282,2578],{"class":701},[425,82284,82285,82288,82290],{"class":427,"line":721},[425,82286,82287],{"class":701},"[12, 5, 8, 130, 44].every(isBigEnough); ",[425,82289,34084],{"class":1155},[425,82291,55271],{"class":701},[425,82293,82294,82297,82299],{"class":427,"line":735},[425,82295,82296],{"class":701},"[12, 54, 18, 130, 44].every(isBigEnough); ",[425,82298,34084],{"class":1155},[425,82300,58695],{"class":701},[416,82302,82304],{"className":53822,"code":82303,"language":53824,"meta":395,"style":395},"\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",[422,82305,82306,82314,82322,82327,82331,82336,82341,82349],{"__ignoreMap":395},[425,82307,82308,82310,82312],{"class":427,"line":428},[425,82309,2057],{"class":701},[425,82311,52555],{"class":52055},[425,82313,52062],{"class":701},[425,82315,82316,82318,82320],{"class":427,"line":698},[425,82317,52899],{"class":701},[425,82319,52568],{"class":52055},[425,82321,52062],{"class":701},[425,82323,82324],{"class":427,"line":710},[425,82325,82326],{"class":701},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[425,82328,82329],{"class":427,"line":721},[425,82330,79077],{"class":701},[425,82332,82333],{"class":427,"line":735},[425,82334,82335],{"class":701},"    const flag = arr.every(item => item >= 10)\n",[425,82337,82338],{"class":427,"line":743},[425,82339,82340],{"class":701},"    console.log(flag)    \u002F\u002Ftrue\n",[425,82342,82343,82345,82347],{"class":427,"line":751},[425,82344,53172],{"class":701},[425,82346,52568],{"class":52055},[425,82348,52062],{"class":701},[425,82350,82351,82353,82355],{"class":427,"line":759},[425,82352,52540],{"class":701},[425,82354,52555],{"class":52055},[425,82356,52062],{"class":701},[416,82358,82360],{"className":53822,"code":82359,"language":53824,"meta":395,"style":395},"\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",[422,82361,82362,82370,82378,82382,82387,82392,82397,82405],{"__ignoreMap":395},[425,82363,82364,82366,82368],{"class":427,"line":428},[425,82365,2057],{"class":701},[425,82367,52555],{"class":52055},[425,82369,52062],{"class":701},[425,82371,82372,82374,82376],{"class":427,"line":698},[425,82373,52899],{"class":701},[425,82375,52568],{"class":52055},[425,82377,52062],{"class":701},[425,82379,82380],{"class":427,"line":710},[425,82381,82326],{"class":701},[425,82383,82384],{"class":427,"line":721},[425,82385,82386],{"class":701},"    const arr = [10, 0, 5]\n",[425,82388,82389],{"class":427,"line":735},[425,82390,82391],{"class":701},"    const flag = arr.some(item => item >= 10)\n",[425,82393,82394],{"class":427,"line":743},[425,82395,82396],{"class":701},"    console.log(flag)   \u002F\u002Ftrue\n",[425,82398,82399,82401,82403],{"class":427,"line":751},[425,82400,53172],{"class":701},[425,82402,52568],{"class":52055},[425,82404,52062],{"class":701},[425,82406,82407,82409,82411],{"class":427,"line":759},[425,82408,52540],{"class":701},[425,82410,52555],{"class":52055},[425,82412,52062],{"class":701},[23907,82414,82416],{"id":82415},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,82418,82419],{},[393,82420],{"alt":395,"src":82421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[416,82423,82425],{"className":51388,"code":82424,"language":51390,"meta":395,"style":395},"\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",[422,82426,82427,82437,82451,82455,82463,82477,82497,82509,82517,82524,82536,82548,82560,82572,82582,82592,82596,82604,82612,82616,82624,82636,82644,82666,82671,82676,82709,82717,82725,82729],{"__ignoreMap":395},[425,82428,82429,82431,82433,82435],{"class":427,"line":428},[425,82430,52052],{"class":701},[425,82432,52056],{"class":52055},[425,82434,52059],{"class":431},[425,82436,52062],{"class":701},[425,82438,82439,82441,82443,82445,82447,82449],{"class":427,"line":698},[425,82440,2057],{"class":701},[425,82442,51390],{"class":52055},[425,82444,52071],{"class":431},[425,82446,1204],{"class":701},[425,82448,52076],{"class":435},[425,82450,52062],{"class":701},[425,82452,82453],{"class":427,"line":710},[425,82454,3400],{"emptyLinePlaceholder":1084},[425,82456,82457,82459,82461],{"class":427,"line":721},[425,82458,2057],{"class":701},[425,82460,52089],{"class":52055},[425,82462,52062],{"class":701},[425,82464,82465,82467,82469,82471,82473,82475],{"class":427,"line":735},[425,82466,52899],{"class":701},[425,82468,52099],{"class":52055},[425,82470,52102],{"class":431},[425,82472,1204],{"class":701},[425,82474,52107],{"class":435},[425,82476,52062],{"class":701},[425,82478,82479,82481,82483,82485,82487,82489,82491,82493,82495],{"class":427,"line":743},[425,82480,52899],{"class":701},[425,82482,52099],{"class":52055},[425,82484,15917],{"class":431},[425,82486,1204],{"class":701},[425,82488,52146],{"class":435},[425,82490,52126],{"class":431},[425,82492,1204],{"class":701},[425,82494,52153],{"class":435},[425,82496,52062],{"class":701},[425,82498,82499,82501,82503,82505,82507],{"class":427,"line":751},[425,82500,52899],{"class":701},[425,82502,52162],{"class":52055},[425,82504,52165],{"class":701},[425,82506,52162],{"class":52055},[425,82508,52062],{"class":701},[425,82510,82511,82513,82515],{"class":427,"line":759},[425,82512,52899],{"class":701},[425,82514,1074],{"class":52055},[425,82516,52062],{"class":701},[425,82518,82519,82522],{"class":427,"line":770},[425,82520,82521],{"class":52055},"    div",[425,82523,16569],{"class":701},[425,82525,82526,82528,82530,82532,82534],{"class":427,"line":780},[425,82527,55526],{"class":691},[425,82529,52192],{"class":701},[425,82531,2724],{"class":691},[425,82533,52247],{"class":1155},[425,82535,2307],{"class":701},[425,82537,82538,82540,82542,82544,82546],{"class":427,"line":790},[425,82539,55540],{"class":691},[425,82541,52192],{"class":701},[425,82543,1550],{"class":691},[425,82545,52247],{"class":1155},[425,82547,2307],{"class":701},[425,82549,82550,82552,82554,82556,82558],{"class":427,"line":805},[425,82551,58114],{"class":691},[425,82553,52192],{"class":701},[425,82555,1550],{"class":691},[425,82557,52247],{"class":1155},[425,82559,2307],{"class":701},[425,82561,82562,82564,82566,82568,82570],{"class":427,"line":818},[425,82563,65888],{"class":691},[425,82565,52192],{"class":701},[425,82567,1646],{"class":691},[425,82569,52247],{"class":1155},[425,82571,2307],{"class":701},[425,82573,82574,82576,82578,82580],{"class":427,"line":831},[425,82575,58041],{"class":691},[425,82577,52192],{"class":701},[425,82579,52347],{"class":691},[425,82581,2307],{"class":701},[425,82583,82584,82586,82588,82590],{"class":427,"line":841},[425,82585,55639],{"class":691},[425,82587,52192],{"class":701},[425,82589,52400],{"class":691},[425,82591,2307],{"class":701},[425,82593,82594],{"class":427,"line":852},[425,82595,3187],{"class":701},[425,82597,82598,82600,82602],{"class":427,"line":862},[425,82599,53172],{"class":701},[425,82601,1074],{"class":52055},[425,82603,52062],{"class":701},[425,82605,82606,82608,82610],{"class":427,"line":878},[425,82607,52540],{"class":701},[425,82609,52089],{"class":52055},[425,82611,52062],{"class":701},[425,82613,82614],{"class":427,"line":914},[425,82615,3400],{"emptyLinePlaceholder":1084},[425,82617,82618,82620,82622],{"class":427,"line":943},[425,82619,2057],{"class":701},[425,82621,52555],{"class":52055},[425,82623,52062],{"class":701},[425,82625,82626,82628,82630,82632,82634],{"class":427,"line":956},[425,82627,52899],{"class":701},[425,82629,52366],{"class":52055},[425,82631,56069],{"class":701},[425,82633,52366],{"class":52055},[425,82635,52062],{"class":701},[425,82637,82638,82640,82642],{"class":427,"line":964},[425,82639,52899],{"class":701},[425,82641,52568],{"class":52055},[425,82643,52062],{"class":701},[425,82645,82646,82648,82651,82653,82656,82659,82661,82664],{"class":427,"line":2733},[425,82647,12220],{"class":1155},[425,82649,82650],{"class":691}," spec",[425,82652,14563],{"class":1155},[425,82654,82655],{"class":701}," { size: ",[425,82657,82658],{"class":435},"'40cm*40cm'",[425,82660,56219],{"class":701},[425,82662,82663],{"class":435},"'黑色'",[425,82665,56359],{"class":701},[425,82667,82668],{"class":427,"line":2750},[425,82669,82670],{"class":1216},"    \u002F\u002F const arr = Object.values(spec)\n",[425,82672,82673],{"class":427,"line":2755},[425,82674,82675],{"class":1216},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[425,82677,82678,82680,82682,82684,82687,82689,82691,82694,82697,82700,82702,82704,82707],{"class":427,"line":2760},[425,82679,53162],{"class":701},[425,82681,55154],{"class":431},[425,82683,1159],{"class":701},[425,82685,82686],{"class":435},"'div'",[425,82688,75004],{"class":701},[425,82690,1204],{"class":1155},[425,82692,82693],{"class":701}," Object.",[425,82695,82696],{"class":431},"values",[425,82698,82699],{"class":701},"(spec).",[425,82701,74978],{"class":431},[425,82703,1159],{"class":701},[425,82705,82706],{"class":435},"'\u002F'",[425,82708,1165],{"class":701},[425,82710,82711,82713,82715],{"class":427,"line":2765},[425,82712,53172],{"class":701},[425,82714,52568],{"class":52055},[425,82716,52062],{"class":701},[425,82718,82719,82721,82723],{"class":427,"line":2779},[425,82720,52540],{"class":701},[425,82722,52555],{"class":52055},[425,82724,52062],{"class":701},[425,82726,82727],{"class":427,"line":2784},[425,82728,3400],{"emptyLinePlaceholder":1084},[425,82730,82731,82733,82735],{"class":427,"line":3577},[425,82732,52540],{"class":701},[425,82734,51390],{"class":52055},[425,82736,52062],{"class":701},[19,82738,82739],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23907,82741,82743],{"id":82742},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,82745,82746],{},"静态方法，将伪数组转换为真数组",[19,82748,82749],{},[393,82750],{"alt":395,"src":82751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[416,82753,82755],{"className":53822,"code":82754,"language":53824,"meta":395,"style":395},"\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",[422,82756,82757,82765,82773,82785,82797,82809,82817,82825,82830,82835,82840,82845,82853],{"__ignoreMap":395},[425,82758,82759,82761,82763],{"class":427,"line":428},[425,82760,2057],{"class":701},[425,82762,52555],{"class":52055},[425,82764,52062],{"class":701},[425,82766,82767,82769,82771],{"class":427,"line":698},[425,82768,52899],{"class":701},[425,82770,447],{"class":52055},[425,82772,52062],{"class":701},[425,82774,82775,82777,82779,82781,82783],{"class":427,"line":710},[425,82776,52096],{"class":701},[425,82778,450],{"class":52055},[425,82780,56069],{"class":701},[425,82782,450],{"class":52055},[425,82784,52062],{"class":701},[425,82786,82787,82789,82791,82793,82795],{"class":427,"line":721},[425,82788,52096],{"class":701},[425,82790,450],{"class":52055},[425,82792,56069],{"class":701},[425,82794,450],{"class":52055},[425,82796,52062],{"class":701},[425,82798,82799,82801,82803,82805,82807],{"class":427,"line":735},[425,82800,52096],{"class":701},[425,82802,450],{"class":52055},[425,82804,56069],{"class":701},[425,82806,450],{"class":52055},[425,82808,52062],{"class":701},[425,82810,82811,82813,82815],{"class":427,"line":743},[425,82812,53172],{"class":701},[425,82814,447],{"class":52055},[425,82816,52062],{"class":701},[425,82818,82819,82821,82823],{"class":427,"line":751},[425,82820,52899],{"class":701},[425,82822,52568],{"class":52055},[425,82824,52062],{"class":701},[425,82826,82827],{"class":427,"line":759},[425,82828,82829],{"class":701},"    const lis = document.querySelectorAll('li')\n",[425,82831,82832],{"class":427,"line":770},[425,82833,82834],{"class":701},"    const liss = Array.from(lis)\n",[425,82836,82837],{"class":427,"line":780},[425,82838,82839],{"class":701},"    liss.pop()\n",[425,82841,82842],{"class":427,"line":790},[425,82843,82844],{"class":701},"    console.log(liss)\n",[425,82846,82847,82849,82851],{"class":427,"line":805},[425,82848,53172],{"class":701},[425,82850,52568],{"class":52055},[425,82852,52062],{"class":701},[425,82854,82855,82857,82859],{"class":427,"line":818},[425,82856,52540],{"class":701},[425,82858,52555],{"class":52055},[425,82860,52062],{"class":701},[19,82862,82863],{},[393,82864],{"alt":395,"src":82865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22995,82867,82869],{"id":82868},"_41053-string","4.10.5.3 String",[19,82871,82872],{},[393,82873],{"alt":395,"src":82874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23907,82876,82878],{"id":82877},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[416,82880,82882],{"className":53822,"code":82881,"language":53824,"meta":395,"style":395},"\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",[422,82883,82884,82892,82900,82905,82910,82915,82919,82924,82929,82934,82942],{"__ignoreMap":395},[425,82885,82886,82888,82890],{"class":427,"line":428},[425,82887,2057],{"class":701},[425,82889,52555],{"class":52055},[425,82891,52062],{"class":701},[425,82893,82894,82896,82898],{"class":427,"line":698},[425,82895,52899],{"class":701},[425,82897,52568],{"class":52055},[425,82899,52062],{"class":701},[425,82901,82902],{"class":427,"line":710},[425,82903,82904],{"class":701},"    \u002F\u002F 把字符串转化为数组\n",[425,82906,82907],{"class":427,"line":721},[425,82908,82909],{"class":701},"    const str = 'pink,red'\n",[425,82911,82912],{"class":427,"line":735},[425,82913,82914],{"class":701},"    const arr = str.split(',')\n",[425,82916,82917],{"class":427,"line":743},[425,82918,81393],{"class":701},[425,82920,82921],{"class":427,"line":751},[425,82922,82923],{"class":701},"    const str1 = '2025-8-25'\n",[425,82925,82926],{"class":427,"line":759},[425,82927,82928],{"class":701},"    const arr1 = str1.split('-')\n",[425,82930,82931],{"class":427,"line":770},[425,82932,82933],{"class":701},"    console.log(arr1)\n",[425,82935,82936,82938,82940],{"class":427,"line":780},[425,82937,53172],{"class":701},[425,82939,52568],{"class":52055},[425,82941,52062],{"class":701},[425,82943,82944,82946,82948],{"class":427,"line":790},[425,82945,52540],{"class":701},[425,82947,52555],{"class":52055},[425,82949,52062],{"class":701},[23907,82951,82953],{"id":82952},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,82955,6181],{},[19,82957,82958],{},"substring(indexStart)",[19,82960,82961],{},"substring(indexStart, indexEnd)",[447,82963,82964,82975,82987,82997],{},[450,82965,82966,82967,82970,82971,82974],{},"如果省略了 ",[422,82968,82969],{},"indexEnd","，则 ",[422,82972,82973],{},"substring()"," 提取字符直到字符串的末尾",[450,82976,82977,82978,82981,82982,82970,82984,82986],{},"如果 ",[422,82979,82980],{},"indexStart"," 等于 ",[422,82983,82969],{},[422,82985,82973],{}," 返回一个空字符串",[450,82988,82977,82989,82991,82992,82970,82994,82996],{},[422,82990,82980],{}," 大于 ",[422,82993,82969],{},[422,82995,82973],{}," 的效果就像交换了这两个参数一样",[450,82998,82999],{},"结束的索引号不包含想要截取的部分",[416,83001,83003],{"className":82244,"code":83002,"language":82246,"meta":395,"style":395},"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",[422,83004,83005,83017,83021,83055,83085,83089,83120,83124,83151,83181,83211,83215,83246],{"__ignoreMap":395},[425,83006,83007,83010,83012,83015],{"class":427,"line":428},[425,83008,83009],{"class":701},"const anyString ",[425,83011,1204],{"class":1155},[425,83013,83014],{"class":435}," \"Mozilla\"",[425,83016,2307],{"class":701},[425,83018,83019],{"class":427,"line":698},[425,83020,3400],{"emptyLinePlaceholder":1084},[425,83022,83023,83026,83028,83030,83032,83035,83037,83040,83042,83044,83046,83048,83050,83052],{"class":427,"line":710},[425,83024,83025],{"class":691},"console",[425,83027,1706],{"class":701},[425,83029,59002],{"class":691},[425,83031,1159],{"class":701},[425,83033,83034],{"class":691},"anyString",[425,83036,1706],{"class":701},[425,83038,83039],{"class":691},"substring",[425,83041,1159],{"class":701},[425,83043,1341],{"class":691},[425,83045,13434],{"class":701},[425,83047,1367],{"class":691},[425,83049,76008],{"class":701},[425,83051,34084],{"class":1155},[425,83053,83054],{"class":435}," 'M'\n",[425,83056,83057,83059,83061,83063,83065,83067,83069,83071,83073,83075,83077,83079,83081,83083],{"class":427,"line":721},[425,83058,83025],{"class":691},[425,83060,1706],{"class":701},[425,83062,59002],{"class":691},[425,83064,1159],{"class":701},[425,83066,83034],{"class":691},[425,83068,1706],{"class":701},[425,83070,83039],{"class":691},[425,83072,1159],{"class":701},[425,83074,1367],{"class":691},[425,83076,13434],{"class":701},[425,83078,1341],{"class":691},[425,83080,76008],{"class":701},[425,83082,34084],{"class":1155},[425,83084,83054],{"class":435},[425,83086,83087],{"class":427,"line":735},[425,83088,3400],{"emptyLinePlaceholder":1084},[425,83090,83091,83093,83095,83097,83099,83101,83103,83105,83107,83109,83111,83113,83115,83117],{"class":427,"line":743},[425,83092,83025],{"class":691},[425,83094,1706],{"class":701},[425,83096,59002],{"class":691},[425,83098,1159],{"class":701},[425,83100,83034],{"class":691},[425,83102,1706],{"class":701},[425,83104,83039],{"class":691},[425,83106,1159],{"class":701},[425,83108,1341],{"class":691},[425,83110,13434],{"class":701},[425,83112,1493],{"class":691},[425,83114,76008],{"class":701},[425,83116,34084],{"class":1155},[425,83118,83119],{"class":435}," 'Mozill'\n",[425,83121,83122],{"class":427,"line":751},[425,83123,3400],{"emptyLinePlaceholder":1084},[425,83125,83126,83128,83130,83132,83134,83136,83138,83140,83142,83144,83146,83148],{"class":427,"line":759},[425,83127,83025],{"class":691},[425,83129,1706],{"class":701},[425,83131,59002],{"class":691},[425,83133,1159],{"class":701},[425,83135,83034],{"class":691},[425,83137,1706],{"class":701},[425,83139,83039],{"class":691},[425,83141,1159],{"class":701},[425,83143,1442],{"class":691},[425,83145,76008],{"class":701},[425,83147,34084],{"class":1155},[425,83149,83150],{"class":435}," 'lla'\n",[425,83152,83153,83155,83157,83159,83161,83163,83165,83167,83169,83171,83173,83175,83177,83179],{"class":427,"line":770},[425,83154,83025],{"class":691},[425,83156,1706],{"class":701},[425,83158,59002],{"class":691},[425,83160,1159],{"class":701},[425,83162,83034],{"class":691},[425,83164,1706],{"class":701},[425,83166,83039],{"class":691},[425,83168,1159],{"class":701},[425,83170,1442],{"class":691},[425,83172,13434],{"class":701},[425,83174,1518],{"class":691},[425,83176,76064],{"class":701},[425,83178,34084],{"class":1155},[425,83180,83150],{"class":435},[425,83182,83183,83185,83187,83189,83191,83193,83195,83197,83199,83201,83203,83205,83207,83209],{"class":427,"line":780},[425,83184,83025],{"class":691},[425,83186,1706],{"class":701},[425,83188,59002],{"class":691},[425,83190,1159],{"class":701},[425,83192,83034],{"class":691},[425,83194,1706],{"class":701},[425,83196,83039],{"class":691},[425,83198,1159],{"class":701},[425,83200,1518],{"class":691},[425,83202,13434],{"class":701},[425,83204,1442],{"class":691},[425,83206,76008],{"class":701},[425,83208,34084],{"class":1155},[425,83210,83150],{"class":435},[425,83212,83213],{"class":427,"line":790},[425,83214,3400],{"emptyLinePlaceholder":1084},[425,83216,83217,83219,83221,83223,83225,83227,83229,83231,83233,83235,83237,83239,83241,83243],{"class":427,"line":805},[425,83218,83025],{"class":691},[425,83220,1706],{"class":701},[425,83222,59002],{"class":691},[425,83224,1159],{"class":701},[425,83226,83034],{"class":691},[425,83228,1706],{"class":701},[425,83230,83039],{"class":691},[425,83232,1159],{"class":701},[425,83234,1341],{"class":691},[425,83236,13434],{"class":701},[425,83238,1518],{"class":691},[425,83240,76008],{"class":701},[425,83242,34084],{"class":1155},[425,83244,83245],{"class":435}," 'Mozilla'\n",[425,83247,83248,83250,83252,83254,83256,83258,83260,83262,83264,83266,83268,83270,83272,83274],{"class":427,"line":818},[425,83249,83025],{"class":691},[425,83251,1706],{"class":701},[425,83253,59002],{"class":691},[425,83255,1159],{"class":701},[425,83257,83034],{"class":691},[425,83259,1706],{"class":701},[425,83261,83039],{"class":691},[425,83263,1159],{"class":701},[425,83265,1341],{"class":691},[425,83267,13434],{"class":701},[425,83269,1594],{"class":691},[425,83271,76008],{"class":701},[425,83273,34084],{"class":1155},[425,83275,83245],{"class":435},[23907,83277,83279],{"id":83278},"_410533-startswith","4.10.5.3.3 startsWith",[19,83281,83282,83285,83286,83291,83292,83294,83295],{},[422,83283,83284],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[400,83287,83288],{},[422,83289,83290],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[422,83293,2376],{}," 或 ",[422,83296,66775],{},[416,83298,83300],{"className":78250,"code":83299,"language":78252,"meta":395,"style":395},"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",[422,83301,83302,83314,83333,83338,83358],{"__ignoreMap":395},[425,83303,83304,83306,83309,83311],{"class":427,"line":428},[425,83305,7792],{"class":1155},[425,83307,83308],{"class":701}," str1 ",[425,83310,1204],{"class":1155},[425,83312,83313],{"class":435}," \"Saturday night plans\"\n",[425,83315,83316,83318,83320,83323,83326,83328,83331],{"class":427,"line":698},[425,83317,78287],{"class":701},[425,83319,59002],{"class":431},[425,83321,83322],{"class":701},"(str1.",[425,83324,83325],{"class":431},"startsWith",[425,83327,1159],{"class":701},[425,83329,83330],{"class":435},"\"Sat\"",[425,83332,31252],{"class":701},[425,83334,83335],{"class":427,"line":710},[425,83336,83337],{"class":1216},"\u002F\u002F Expected output: true\n",[425,83339,83340,83342,83344,83346,83348,83350,83352,83354,83356],{"class":427,"line":721},[425,83341,78287],{"class":701},[425,83343,59002],{"class":431},[425,83345,83322],{"class":701},[425,83347,83325],{"class":431},[425,83349,1159],{"class":701},[425,83351,83330],{"class":435},[425,83353,13434],{"class":701},[425,83355,1229],{"class":691},[425,83357,31252],{"class":701},[425,83359,83360],{"class":427,"line":735},[425,83361,83362],{"class":1216},"\u002F\u002F Expected output: false\n",[416,83364,83366],{"className":51388,"code":83365,"language":51390,"meta":395,"style":395},"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",[422,83367,83368,83373,83378,83382,83387,83392],{"__ignoreMap":395},[425,83369,83370],{"class":427,"line":428},[425,83371,83372],{"class":701},"startsWith(searchString)\n",[425,83374,83375],{"class":427,"line":698},[425,83376,83377],{"class":701},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[425,83379,83380],{"class":427,"line":710},[425,83381,3400],{"emptyLinePlaceholder":1084},[425,83383,83384],{"class":427,"line":721},[425,83385,83386],{"class":701},"const str3 = 'pink老师上课中'\n",[425,83388,83389],{"class":427,"line":735},[425,83390,83391],{"class":701},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[425,83393,83394],{"class":427,"line":743},[425,83395,83396],{"class":701},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23907,83398,83400],{"id":83399},"_410534-includes","4.10.5.3.4 includes",[19,83402,83403],{},"includes(searchString) includes(searchString, position)",[972,83405,83406],{},[450,83407,83408],{},"searchString:",[19,83410,83411,83412,83414,83415,83420,83421,83426,83427,22497,83430,83433,83434,83437],{},"一个要在 ",[422,83413,2316],{}," 中查找的字符串。",[22,83416,83419],{"href":83417,"rel":83418},"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",[26],"不能是正则表达式","。所有非正则表达式的值都会被",[22,83422,83425],{"href":83423,"rel":83424},"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",[26],"强制转换为字符串","，因此如果该参数被省略或传入 ",[422,83428,83429],{},"undefined",[422,83431,83432],{},"includes()"," 方法会在字符串中搜索 ",[422,83435,83436],{},"\"undefined\"","，这通常不是你想要的",[972,83439,83440],{"start":698},[450,83441,83442,948],{},[422,83443,83444],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,83446,83447,83448,83451,83452],{},"在字符串中开始搜索 ",[422,83449,83450],{},"searchString"," 的位置。默认值为 ",[422,83453,1341],{},[972,83455,83456],{"start":710},[450,83457,83458],{},"返回值：",[19,83460,83461,83462,83464,83465,83469,83470],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[422,83463,83450],{}," 为空字符串的情况），则返回 ",[400,83466,83467],{},[422,83468,2376],{}," ，否则返回 ",[400,83471,83472],{},[422,83473,66775],{},[972,83475,83476],{"start":721},[450,83477,83478],{},"异常：",[19,83480,82977,83481,978,83483,83487],{},[422,83482,83450],{},[22,83484,83486],{"href":83417,"rel":83485},[26],"是一个正则表达式","，则会抛出",[19,83489,83490],{},"只要是有就是true，不需要非得以谁开头结尾",[416,83492,83494],{"className":78250,"code":83493,"language":78252,"meta":395,"style":395},"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",[422,83495,83496,83507,83530,83549,83569,83591,83610],{"__ignoreMap":395},[425,83497,83498,83500,83502,83504],{"class":427,"line":428},[425,83499,7792],{"class":1155},[425,83501,80530],{"class":701},[425,83503,1204],{"class":1155},[425,83505,83506],{"class":435}," \"To be, or not to be, that is the question.\"\n",[425,83508,83509,83511,83513,83516,83519,83521,83524,83527],{"class":427,"line":698},[425,83510,78287],{"class":701},[425,83512,59002],{"class":431},[425,83514,83515],{"class":701},"(str.",[425,83517,83518],{"class":431},"includes",[425,83520,1159],{"class":701},[425,83522,83523],{"class":435},"\"To be\"",[425,83525,83526],{"class":701},"))",[425,83528,83529],{"class":1216},"  \u002F\u002F true\n",[425,83531,83532,83534,83536,83538,83540,83542,83545,83547],{"class":427,"line":710},[425,83533,78287],{"class":701},[425,83535,59002],{"class":431},[425,83537,83515],{"class":701},[425,83539,83518],{"class":431},[425,83541,1159],{"class":701},[425,83543,83544],{"class":435},"\"question\"",[425,83546,83526],{"class":701},[425,83548,83529],{"class":1216},[425,83550,83551,83553,83555,83557,83559,83561,83564,83566],{"class":427,"line":721},[425,83552,78287],{"class":701},[425,83554,59002],{"class":431},[425,83556,83515],{"class":701},[425,83558,83518],{"class":431},[425,83560,1159],{"class":701},[425,83562,83563],{"class":435},"\"nonexistent\"",[425,83565,83526],{"class":701},[425,83567,83568],{"class":1216},"  \u002F\u002F false\n",[425,83570,83571,83573,83575,83577,83579,83581,83583,83585,83587,83589],{"class":427,"line":735},[425,83572,78287],{"class":701},[425,83574,59002],{"class":431},[425,83576,83515],{"class":701},[425,83578,83518],{"class":431},[425,83580,1159],{"class":701},[425,83582,83523],{"class":435},[425,83584,13434],{"class":701},[425,83586,1367],{"class":691},[425,83588,83526],{"class":701},[425,83590,83568],{"class":1216},[425,83592,83593,83595,83597,83599,83601,83603,83606,83608],{"class":427,"line":743},[425,83594,78287],{"class":701},[425,83596,59002],{"class":431},[425,83598,83515],{"class":701},[425,83600,83518],{"class":431},[425,83602,1159],{"class":701},[425,83604,83605],{"class":435},"\"TO BE\"",[425,83607,83526],{"class":701},[425,83609,83568],{"class":1216},[425,83611,83612,83614,83616,83618,83620,83622,83624,83626],{"class":427,"line":751},[425,83613,78287],{"class":701},[425,83615,59002],{"class":431},[425,83617,83515],{"class":701},[425,83619,83518],{"class":431},[425,83621,1159],{"class":701},[425,83623,8652],{"class":435},[425,83625,83526],{"class":701},[425,83627,83529],{"class":1216},[23907,83629,83631],{"id":83630},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[416,83633,83635],{"className":53822,"code":83634,"language":53824,"meta":395,"style":395},"\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",[422,83636,83637,83645,83653,83658,83663,83668,83673,83678,83686],{"__ignoreMap":395},[425,83638,83639,83641,83643],{"class":427,"line":428},[425,83640,2057],{"class":701},[425,83642,52555],{"class":52055},[425,83644,52062],{"class":701},[425,83646,83647,83649,83651],{"class":427,"line":698},[425,83648,52899],{"class":701},[425,83650,52568],{"class":52055},[425,83652,52062],{"class":701},[425,83654,83655],{"class":427,"line":710},[425,83656,83657],{"class":701},"    const num = 10\n",[425,83659,83660],{"class":427,"line":721},[425,83661,83662],{"class":701},"    \u002F\u002F 强制转换\n",[425,83664,83665],{"class":427,"line":735},[425,83666,83667],{"class":701},"    console.log(String(num))\n",[425,83669,83670],{"class":427,"line":743},[425,83671,83672],{"class":701},"    \u002F\u002F toString()方法转换\n",[425,83674,83675],{"class":427,"line":751},[425,83676,83677],{"class":701},"    console.log(num.toString())\n",[425,83679,83680,83682,83684],{"class":427,"line":759},[425,83681,53172],{"class":701},[425,83683,52568],{"class":52055},[425,83685,52062],{"class":701},[425,83687,83688,83690,83692],{"class":427,"line":770},[425,83689,52540],{"class":701},[425,83691,52555],{"class":52055},[425,83693,52062],{"class":701},[23907,83695,83697],{"id":83696},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,83699,83700],{},[393,83701],{"alt":395,"src":83702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[416,83704,83706],{"className":51388,"code":83705,"language":51390,"meta":395,"style":395},"\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",[422,83707,83708,83718,83732,83736,83744,83758,83778,83790,83798,83802,83810,83822,83830,83842,83847,83852,83857,83904,83920,83928,83936,83940],{"__ignoreMap":395},[425,83709,83710,83712,83714,83716],{"class":427,"line":428},[425,83711,52052],{"class":701},[425,83713,52056],{"class":52055},[425,83715,52059],{"class":431},[425,83717,52062],{"class":701},[425,83719,83720,83722,83724,83726,83728,83730],{"class":427,"line":698},[425,83721,2057],{"class":701},[425,83723,51390],{"class":52055},[425,83725,52071],{"class":431},[425,83727,1204],{"class":701},[425,83729,52076],{"class":435},[425,83731,52062],{"class":701},[425,83733,83734],{"class":427,"line":710},[425,83735,3400],{"emptyLinePlaceholder":1084},[425,83737,83738,83740,83742],{"class":427,"line":721},[425,83739,2057],{"class":701},[425,83741,52089],{"class":52055},[425,83743,52062],{"class":701},[425,83745,83746,83748,83750,83752,83754,83756],{"class":427,"line":735},[425,83747,52899],{"class":701},[425,83749,52099],{"class":52055},[425,83751,52102],{"class":431},[425,83753,1204],{"class":701},[425,83755,52107],{"class":435},[425,83757,52062],{"class":701},[425,83759,83760,83762,83764,83766,83768,83770,83772,83774,83776],{"class":427,"line":743},[425,83761,52899],{"class":701},[425,83763,52099],{"class":52055},[425,83765,15917],{"class":431},[425,83767,1204],{"class":701},[425,83769,52146],{"class":435},[425,83771,52126],{"class":431},[425,83773,1204],{"class":701},[425,83775,52153],{"class":435},[425,83777,52062],{"class":701},[425,83779,83780,83782,83784,83786,83788],{"class":427,"line":751},[425,83781,52899],{"class":701},[425,83783,52162],{"class":52055},[425,83785,52165],{"class":701},[425,83787,52162],{"class":52055},[425,83789,52062],{"class":701},[425,83791,83792,83794,83796],{"class":427,"line":759},[425,83793,52540],{"class":701},[425,83795,52089],{"class":52055},[425,83797,52062],{"class":701},[425,83799,83800],{"class":427,"line":770},[425,83801,3400],{"emptyLinePlaceholder":1084},[425,83803,83804,83806,83808],{"class":427,"line":780},[425,83805,2057],{"class":701},[425,83807,52555],{"class":52055},[425,83809,52062],{"class":701},[425,83811,83812,83814,83816,83818,83820],{"class":427,"line":790},[425,83813,52899],{"class":701},[425,83815,52366],{"class":52055},[425,83817,56069],{"class":701},[425,83819,52366],{"class":52055},[425,83821,52062],{"class":701},[425,83823,83824,83826,83828],{"class":427,"line":805},[425,83825,52899],{"class":701},[425,83827,52568],{"class":52055},[425,83829,52062],{"class":701},[425,83831,83832,83834,83837,83839],{"class":427,"line":818},[425,83833,12220],{"class":1155},[425,83835,83836],{"class":691}," gift",[425,83838,14563],{"class":1155},[425,83840,83841],{"class":435}," '50g的茶叶，清洗球'\n",[425,83843,83844],{"class":427,"line":831},[425,83845,83846],{"class":1216},"    \u002F\u002F 1.把字符串拆分为数组\n",[425,83848,83849],{"class":427,"line":841},[425,83850,83851],{"class":1216},"    \u002F\u002F console.log(gift.split(','))\n",[425,83853,83854],{"class":427,"line":852},[425,83855,83856],{"class":1216},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[425,83858,83859,83861,83863,83865,83868,83871,83873,83876,83878,83880,83882,83884,83886,83889,83891,83894,83896,83898,83900,83902],{"class":427,"line":862},[425,83860,12220],{"class":1155},[425,83862,74674],{"class":691},[425,83864,14563],{"class":1155},[425,83866,83867],{"class":701}," gift.",[425,83869,83870],{"class":431},"split",[425,83872,1159],{"class":701},[425,83874,83875],{"class":435},"'，'",[425,83877,31581],{"class":701},[425,83879,74799],{"class":431},[425,83881,1159],{"class":701},[425,83883,80550],{"class":6216},[425,83885,80553],{"class":1155},[425,83887,83888],{"class":435}," `\u003Cspan>【赠品】${",[425,83890,80550],{"class":701},[425,83892,83893],{"class":435},"}\u003C\u002Fspan>\u003Cbr>`",[425,83895,31581],{"class":701},[425,83897,74978],{"class":431},[425,83899,1159],{"class":701},[425,83901,74983],{"class":435},[425,83903,1165],{"class":701},[425,83905,83906,83908,83910,83912,83914,83916,83918],{"class":427,"line":878},[425,83907,53162],{"class":701},[425,83909,55154],{"class":431},[425,83911,1159],{"class":701},[425,83913,82686],{"class":435},[425,83915,75004],{"class":701},[425,83917,1204],{"class":1155},[425,83919,74740],{"class":701},[425,83921,83922,83924,83926],{"class":427,"line":914},[425,83923,53172],{"class":701},[425,83925,52568],{"class":52055},[425,83927,52062],{"class":701},[425,83929,83930,83932,83934],{"class":427,"line":943},[425,83931,52540],{"class":701},[425,83933,52555],{"class":52055},[425,83935,52062],{"class":701},[425,83937,83938],{"class":427,"line":956},[425,83939,3400],{"emptyLinePlaceholder":1084},[425,83941,83942,83944,83946],{"class":427,"line":964},[425,83943,52540],{"class":701},[425,83945,51390],{"class":52055},[425,83947,52062],{"class":701},[22995,83949,83951],{"id":83950},"_41054-number","4.10.5.4 Number",[19,83953,83954],{},[393,83955],{"alt":395,"src":83956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,83958,83959],{},"整数也可以进行toFixed来保留小数",[19,83961,83962],{},"比如：",[19,83964,83965],{},"const price=10",[19,83967,83968],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22995,83970,83972],{"id":83971},"_41055-购物车展示","4.10.5.5 购物车展示",[19,83974,83975],{},[393,83976],{"alt":395,"src":83977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[416,83979,83981],{"className":51388,"code":83980,"language":51390,"meta":395,"style":395},"\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",[422,83982,83983,83993,84007,84011,84019,84033,84053,84065,84073,84079,84089,84099,84109,84113,84117,84123,84135,84149,84153,84157,84163,84175,84191,84201,84217,84221,84225,84231,84241,84251,84255,84259,84267,84279,84291,84303,84307,84311,84319,84331,84335,84339,84350,84360,84372,84384,84394,84398,84402,84410,84419,84431,84441,84451,84455,84459,84467,84476,84483,84493,84505,84509,84513,84522,84532,84543,84555,84567,84571,84575,84584,84594,84605,84609,84613,84619,84631,84643,84653,84663,84681,84693,84697,84701,84710,84722,84732,84742,84754,84758,84766,84774,84778,84786,84800,84808,84822,84850,84858,84866,84876,84880,84888,84896,84905,84913,84922,84932,84936,84940,84948,84956,84965,84973,84981,84994,84998,85002,85010,85018,85027,85035,85043,85058,85062,85066,85074,85082,85091,85099,85107,85121,85129,85133,85137,85142,85168,85173,85210,85215,85238,85243,85297,85302,85338,85342,85348,85353,85362,85376,85385,85404,85413,85423,85428,85433,85446,85451,85505,85531,85539,85547,85551],{"__ignoreMap":395},[425,83984,83985,83987,83989,83991],{"class":427,"line":428},[425,83986,52052],{"class":701},[425,83988,52056],{"class":52055},[425,83990,52059],{"class":431},[425,83992,52062],{"class":701},[425,83994,83995,83997,83999,84001,84003,84005],{"class":427,"line":698},[425,83996,2057],{"class":701},[425,83998,51390],{"class":52055},[425,84000,52071],{"class":431},[425,84002,1204],{"class":701},[425,84004,52076],{"class":435},[425,84006,52062],{"class":701},[425,84008,84009],{"class":427,"line":710},[425,84010,3400],{"emptyLinePlaceholder":1084},[425,84012,84013,84015,84017],{"class":427,"line":721},[425,84014,2057],{"class":701},[425,84016,52089],{"class":52055},[425,84018,52062],{"class":701},[425,84020,84021,84023,84025,84027,84029,84031],{"class":427,"line":735},[425,84022,52899],{"class":701},[425,84024,52099],{"class":52055},[425,84026,52102],{"class":431},[425,84028,1204],{"class":701},[425,84030,52107],{"class":435},[425,84032,52062],{"class":701},[425,84034,84035,84037,84039,84041,84043,84045,84047,84049,84051],{"class":427,"line":743},[425,84036,52899],{"class":701},[425,84038,52099],{"class":52055},[425,84040,15917],{"class":431},[425,84042,1204],{"class":701},[425,84044,52146],{"class":435},[425,84046,52126],{"class":431},[425,84048,1204],{"class":701},[425,84050,52153],{"class":435},[425,84052,52062],{"class":701},[425,84054,84055,84057,84059,84061,84063],{"class":427,"line":751},[425,84056,52899],{"class":701},[425,84058,52162],{"class":52055},[425,84060,52165],{"class":701},[425,84062,52162],{"class":52055},[425,84064,52062],{"class":701},[425,84066,84067,84069,84071],{"class":427,"line":759},[425,84068,52899],{"class":701},[425,84070,1074],{"class":52055},[425,84072,52062],{"class":701},[425,84074,84075,84077],{"class":427,"line":770},[425,84076,7403],{"class":52055},[425,84078,16569],{"class":701},[425,84080,84081,84083,84085,84087],{"class":427,"line":780},[425,84082,55450],{"class":691},[425,84084,52192],{"class":701},[425,84086,1341],{"class":691},[425,84088,2307],{"class":701},[425,84090,84091,84093,84095,84097],{"class":427,"line":790},[425,84092,55461],{"class":691},[425,84094,52192],{"class":701},[425,84096,1341],{"class":691},[425,84098,2307],{"class":701},[425,84100,84101,84103,84105,84107],{"class":427,"line":805},[425,84102,73351],{"class":691},[425,84104,52192],{"class":701},[425,84106,61260],{"class":691},[425,84108,2307],{"class":701},[425,84110,84111],{"class":427,"line":818},[425,84112,3187],{"class":701},[425,84114,84115],{"class":427,"line":831},[425,84116,3400],{"emptyLinePlaceholder":1084},[425,84118,84119,84121],{"class":427,"line":841},[425,84120,62878],{"class":431},[425,84122,16569],{"class":701},[425,84124,84125,84127,84129,84131,84133],{"class":427,"line":852},[425,84126,55526],{"class":691},[425,84128,52192],{"class":701},[425,84130,79329],{"class":691},[425,84132,52247],{"class":1155},[425,84134,2307],{"class":701},[425,84136,84137,84139,84141,84143,84145,84147],{"class":427,"line":862},[425,84138,55461],{"class":691},[425,84140,52192],{"class":701},[425,84142,1460],{"class":691},[425,84144,52247],{"class":1155},[425,84146,52311],{"class":691},[425,84148,2307],{"class":701},[425,84150,84151],{"class":427,"line":878},[425,84152,3187],{"class":701},[425,84154,84155],{"class":427,"line":914},[425,84156,3400],{"emptyLinePlaceholder":1084},[425,84158,84159,84161],{"class":427,"line":943},[425,84160,79380],{"class":431},[425,84162,16569],{"class":701},[425,84164,84165,84167,84169,84171,84173],{"class":427,"line":956},[425,84166,55450],{"class":691},[425,84168,52192],{"class":701},[425,84170,1723],{"class":691},[425,84172,52247],{"class":1155},[425,84174,2307],{"class":701},[425,84176,84177,84179,84181,84183,84185,84187,84189],{"class":427,"line":964},[425,84178,62615],{"class":691},[425,84180,52192],{"class":701},[425,84182,705],{"class":691},[425,84184,79435],{"class":691},[425,84186,79438],{"class":691},[425,84188,1843],{"class":1155},[425,84190,2307],{"class":701},[425,84192,84193,84195,84197,84199],{"class":427,"line":2733},[425,84194,55764],{"class":691},[425,84196,52192],{"class":701},[425,84198,52232],{"class":691},[425,84200,2307],{"class":701},[425,84202,84203,84205,84207,84209,84211,84213,84215],{"class":427,"line":2750},[425,84204,62732],{"class":691},[425,84206,52192],{"class":701},[425,84208,1367],{"class":691},[425,84210,52247],{"class":1155},[425,84212,52276],{"class":691},[425,84214,62999],{"class":691},[425,84216,2307],{"class":701},[425,84218,84219],{"class":427,"line":2755},[425,84220,3187],{"class":701},[425,84222,84223],{"class":427,"line":2760},[425,84224,3400],{"emptyLinePlaceholder":1084},[425,84226,84227,84229],{"class":427,"line":2765},[425,84228,79498],{"class":431},[425,84230,16569],{"class":701},[425,84232,84233,84235,84237,84239],{"class":427,"line":2779},[425,84234,62780],{"class":691},[425,84236,52192],{"class":701},[425,84238,62785],{"class":691},[425,84240,2307],{"class":701},[425,84242,84243,84245,84247,84249],{"class":427,"line":2784},[425,84244,55639],{"class":691},[425,84246,52192],{"class":701},[425,84248,62573],{"class":691},[425,84250,2307],{"class":701},[425,84252,84253],{"class":427,"line":3577},[425,84254,3187],{"class":701},[425,84256,84257],{"class":427,"line":3591},[425,84258,3400],{"emptyLinePlaceholder":1084},[425,84260,84261,84263,84265],{"class":427,"line":3599},[425,84262,79380],{"class":431},[425,84264,56370],{"class":52055},[425,84266,16569],{"class":701},[425,84268,84269,84271,84273,84275,84277],{"class":427,"line":3604},[425,84270,55526],{"class":691},[425,84272,52192],{"class":701},[425,84274,1760],{"class":691},[425,84276,52247],{"class":1155},[425,84278,2307],{"class":701},[425,84280,84281,84283,84285,84287,84289],{"class":427,"line":3610},[425,84282,55540],{"class":691},[425,84284,52192],{"class":701},[425,84286,1760],{"class":691},[425,84288,52247],{"class":1155},[425,84290,2307],{"class":701},[425,84292,84293,84295,84297,84299,84301],{"class":427,"line":3616},[425,84294,62505],{"class":691},[425,84296,52192],{"class":701},[425,84298,1468],{"class":691},[425,84300,52247],{"class":1155},[425,84302,2307],{"class":701},[425,84304,84305],{"class":427,"line":3621},[425,84306,3187],{"class":701},[425,84308,84309],{"class":427,"line":8948},[425,84310,3400],{"emptyLinePlaceholder":1084},[425,84312,84313,84315,84317],{"class":427,"line":8972},[425,84314,79380],{"class":431},[425,84316,63059],{"class":431},[425,84318,16569],{"class":701},[425,84320,84321,84323,84325,84327,84329],{"class":427,"line":8977},[425,84322,55526],{"class":691},[425,84324,52192],{"class":701},[425,84326,2724],{"class":691},[425,84328,52247],{"class":1155},[425,84330,2307],{"class":701},[425,84332,84333],{"class":427,"line":8983},[425,84334,3187],{"class":701},[425,84336,84337],{"class":427,"line":9010},[425,84338,3400],{"emptyLinePlaceholder":1084},[425,84340,84341,84343,84345,84348],{"class":427,"line":9015},[425,84342,79380],{"class":431},[425,84344,63059],{"class":431},[425,84346,84347],{"class":431}," .tag",[425,84349,16569],{"class":701},[425,84351,84352,84354,84356,84358],{"class":427,"line":9021},[425,84353,55764],{"class":691},[425,84355,52192],{"class":701},[425,84357,61624],{"class":691},[425,84359,2307],{"class":701},[425,84361,84362,84364,84366,84368,84370],{"class":427,"line":9033},[425,84363,55450],{"class":691},[425,84365,52192],{"class":701},[425,84367,1235],{"class":691},[425,84369,52247],{"class":1155},[425,84371,2307],{"class":701},[425,84373,84374,84376,84378,84380,84382],{"class":427,"line":9045},[425,84375,55677],{"class":691},[425,84377,52192],{"class":701},[425,84379,1646],{"class":691},[425,84381,52247],{"class":1155},[425,84383,2307],{"class":701},[425,84385,84386,84388,84390,84392],{"class":427,"line":9057},[425,84387,58171],{"class":691},[425,84389,52192],{"class":701},[425,84391,62825],{"class":691},[425,84393,2307],{"class":701},[425,84395,84396],{"class":427,"line":10715},[425,84397,3187],{"class":701},[425,84399,84400],{"class":427,"line":10740},[425,84401,3400],{"emptyLinePlaceholder":1084},[425,84403,84404,84406,84408],{"class":427,"line":10763},[425,84405,79380],{"class":431},[425,84407,79672],{"class":431},[425,84409,32221],{"class":701},[425,84411,84412,84414,84417],{"class":427,"line":10787},[425,84413,79380],{"class":431},[425,84415,84416],{"class":431}," .sub-total",[425,84418,16569],{"class":701},[425,84420,84421,84423,84425,84427,84429],{"class":427,"line":10792},[425,84422,55677],{"class":691},[425,84424,52192],{"class":701},[425,84426,1798],{"class":691},[425,84428,52247],{"class":1155},[425,84430,2307],{"class":701},[425,84432,84433,84435,84437,84439],{"class":427,"line":10797},[425,84434,58171],{"class":691},[425,84436,52192],{"class":701},[425,84438,79695],{"class":691},[425,84440,2307],{"class":701},[425,84442,84443,84445,84447,84449],{"class":427,"line":10802},[425,84444,62592],{"class":691},[425,84446,52192],{"class":701},[425,84448,1367],{"class":691},[425,84450,2307],{"class":701},[425,84452,84453],{"class":427,"line":10811},[425,84454,3187],{"class":701},[425,84456,84457],{"class":427,"line":10816},[425,84458,3400],{"emptyLinePlaceholder":1084},[425,84460,84461,84463,84465],{"class":427,"line":10822},[425,84462,79380],{"class":431},[425,84464,79712],{"class":431},[425,84466,32221],{"class":701},[425,84468,84469,84471,84474],{"class":427,"line":10843},[425,84470,79380],{"class":431},[425,84472,84473],{"class":431}," .sub-total::before",[425,84475,32221],{"class":701},[425,84477,84478,84481],{"class":427,"line":10849},[425,84479,84480],{"class":431},"    .amount::before",[425,84482,16569],{"class":701},[425,84484,84485,84487,84489,84491],{"class":427,"line":10863},[425,84486,79719],{"class":691},[425,84488,52192],{"class":701},[425,84490,79724],{"class":435},[425,84492,2307],{"class":701},[425,84494,84495,84497,84499,84501,84503],{"class":427,"line":10869},[425,84496,55677],{"class":691},[425,84498,52192],{"class":701},[425,84500,1646],{"class":691},[425,84502,52247],{"class":1155},[425,84504,2307],{"class":701},[425,84506,84507],{"class":427,"line":10896},[425,84508,3187],{"class":701},[425,84510,84511],{"class":427,"line":10905},[425,84512,3400],{"emptyLinePlaceholder":1084},[425,84514,84515,84517,84520],{"class":427,"line":10911},[425,84516,79380],{"class":431},[425,84518,84519],{"class":431}," .spec",[425,84521,16569],{"class":701},[425,84523,84524,84526,84528,84530],{"class":427,"line":10919},[425,84525,62592],{"class":691},[425,84527,52192],{"class":701},[425,84529,1235],{"class":691},[425,84531,2307],{"class":701},[425,84533,84534,84536,84538,84541],{"class":427,"line":10924},[425,84535,58171],{"class":691},[425,84537,52192],{"class":701},[425,84539,84540],{"class":691},"#888",[425,84542,2307],{"class":701},[425,84544,84545,84547,84549,84551,84553],{"class":427,"line":17601},[425,84546,55677],{"class":691},[425,84548,52192],{"class":701},[425,84550,1697],{"class":691},[425,84552,52247],{"class":1155},[425,84554,2307],{"class":701},[425,84556,84557,84559,84561,84563,84565],{"class":427,"line":17607},[425,84558,62755],{"class":691},[425,84560,52192],{"class":701},[425,84562,1848],{"class":691},[425,84564,52247],{"class":1155},[425,84566,2307],{"class":701},[425,84568,84569],{"class":427,"line":17630},[425,84570,3187],{"class":701},[425,84572,84573],{"class":427,"line":17636},[425,84574,3400],{"emptyLinePlaceholder":1084},[425,84576,84577,84579,84582],{"class":427,"line":17659},[425,84578,79380],{"class":431},[425,84580,84581],{"class":431}," .count",[425,84583,16569],{"class":701},[425,84585,84586,84588,84590,84592],{"class":427,"line":17673},[425,84587,62592],{"class":691},[425,84589,52192],{"class":701},[425,84591,1367],{"class":691},[425,84593,2307],{"class":701},[425,84595,84596,84598,84600,84603],{"class":427,"line":17693},[425,84597,58171],{"class":691},[425,84599,52192],{"class":701},[425,84601,84602],{"class":691},"#aaa",[425,84604,2307],{"class":701},[425,84606,84607],{"class":427,"line":17699},[425,84608,3187],{"class":701},[425,84610,84611],{"class":427,"line":17710},[425,84612,3400],{"emptyLinePlaceholder":1084},[425,84614,84615,84617],{"class":427,"line":17733},[425,84616,73230],{"class":431},[425,84618,16569],{"class":701},[425,84620,84621,84623,84625,84627,84629],{"class":427,"line":17755},[425,84622,55526],{"class":691},[425,84624,52192],{"class":701},[425,84626,79329],{"class":691},[425,84628,52247],{"class":1155},[425,84630,2307],{"class":701},[425,84632,84633,84635,84637,84639,84641],{"class":427,"line":17760},[425,84634,55461],{"class":691},[425,84636,52192],{"class":701},[425,84638,1341],{"class":691},[425,84640,52311],{"class":691},[425,84642,2307],{"class":701},[425,84644,84645,84647,84649,84651],{"class":427,"line":17766},[425,84646,55764],{"class":691},[425,84648,52192],{"class":701},[425,84650,52232],{"class":691},[425,84652,2307],{"class":701},[425,84654,84655,84657,84659,84661],{"class":427,"line":17780},[425,84656,55775],{"class":691},[425,84658,52192],{"class":701},[425,84660,52335],{"class":691},[425,84662,2307],{"class":701},[425,84664,84665,84668,84670,84672,84674,84676,84679],{"class":427,"line":17793},[425,84666,84667],{"class":691},"      border-top",[425,84669,52192],{"class":701},[425,84671,1367],{"class":691},[425,84673,52247],{"class":1155},[425,84675,52276],{"class":691},[425,84677,84678],{"class":691}," #4e4e4e",[425,84680,2307],{"class":701},[425,84682,84683,84685,84687,84689,84691],{"class":427,"line":17798},[425,84684,55450],{"class":691},[425,84686,52192],{"class":701},[425,84688,1848],{"class":691},[425,84690,52247],{"class":1155},[425,84692,2307],{"class":701},[425,84694,84695],{"class":427,"line":17812},[425,84696,3187],{"class":701},[425,84698,84699],{"class":427,"line":17817},[425,84700,3400],{"emptyLinePlaceholder":1084},[425,84702,84703,84705,84708],{"class":427,"line":17823},[425,84704,73230],{"class":431},[425,84706,84707],{"class":431}," .amount",[425,84709,16569],{"class":701},[425,84711,84712,84714,84716,84718,84720],{"class":427,"line":17828},[425,84713,55677],{"class":691},[425,84715,52192],{"class":701},[425,84717,1798],{"class":691},[425,84719,52247],{"class":1155},[425,84721,2307],{"class":701},[425,84723,84724,84726,84728,84730],{"class":427,"line":17842},[425,84725,58171],{"class":691},[425,84727,52192],{"class":701},[425,84729,79695],{"class":691},[425,84731,2307],{"class":701},[425,84733,84734,84736,84738,84740],{"class":427,"line":17847},[425,84735,63089],{"class":691},[425,84737,52192],{"class":701},[425,84739,52244],{"class":691},[425,84741,2307],{"class":701},[425,84743,84744,84746,84748,84750,84752],{"class":427,"line":17852},[425,84745,62505],{"class":691},[425,84747,52192],{"class":701},[425,84749,1804],{"class":691},[425,84751,52247],{"class":1155},[425,84753,2307],{"class":701},[425,84755,84756],{"class":427,"line":17866},[425,84757,3187],{"class":701},[425,84759,84760,84762,84764],{"class":427,"line":17878},[425,84761,53172],{"class":701},[425,84763,1074],{"class":52055},[425,84765,52062],{"class":701},[425,84767,84768,84770,84772],{"class":427,"line":17883},[425,84769,52540],{"class":701},[425,84771,52089],{"class":52055},[425,84773,52062],{"class":701},[425,84775,84776],{"class":427,"line":17896},[425,84777,3400],{"emptyLinePlaceholder":1084},[425,84779,84780,84782,84784],{"class":427,"line":17901},[425,84781,2057],{"class":701},[425,84783,52555],{"class":52055},[425,84785,52062],{"class":701},[425,84787,84788,84790,84792,84794,84796,84798],{"class":427,"line":17906},[425,84789,52899],{"class":701},[425,84791,52366],{"class":52055},[425,84793,54241],{"class":431},[425,84795,1204],{"class":701},[425,84797,63363],{"class":435},[425,84799,52062],{"class":701},[425,84801,84802,84804,84806],{"class":427,"line":17911},[425,84803,53172],{"class":701},[425,84805,52366],{"class":52055},[425,84807,52062],{"class":701},[425,84809,84810,84812,84814,84816,84818,84820],{"class":427,"line":17924},[425,84811,52899],{"class":701},[425,84813,52366],{"class":52055},[425,84815,54241],{"class":431},[425,84817,1204],{"class":701},[425,84819,63335],{"class":435},[425,84821,52062],{"class":701},[425,84823,84824,84826,84828,84831,84833,84835,84837,84840,84842,84844,84846,84848],{"class":427,"line":17929},[425,84825,52096],{"class":701},[425,84827,52366],{"class":52055},[425,84829,84830],{"class":701},">合计：\u003C",[425,84832,425],{"class":52055},[425,84834,54241],{"class":431},[425,84836,1204],{"class":701},[425,84838,84839],{"class":435},"\"amount\"",[425,84841,56069],{"class":701},[425,84843,425],{"class":52055},[425,84845,56069],{"class":701},[425,84847,52366],{"class":52055},[425,84849,52062],{"class":701},[425,84851,84852,84854,84856],{"class":427,"line":33388},[425,84853,53172],{"class":701},[425,84855,52366],{"class":52055},[425,84857,52062],{"class":701},[425,84859,84860,84862,84864],{"class":427,"line":33394},[425,84861,52899],{"class":701},[425,84863,52568],{"class":52055},[425,84865,52062],{"class":701},[425,84867,84868,84870,84872,84874],{"class":427,"line":33400},[425,84869,12220],{"class":1155},[425,84871,80132],{"class":691},[425,84873,14563],{"class":1155},[425,84875,56202],{"class":701},[425,84877,84878],{"class":427,"line":33406},[425,84879,80141],{"class":701},[425,84881,84882,84884,84886],{"class":427,"line":33412},[425,84883,80146],{"class":701},[425,84885,80149],{"class":435},[425,84887,32221],{"class":701},[425,84889,84890,84892,84894],{"class":427,"line":33423},[425,84891,80156],{"class":701},[425,84893,80159],{"class":435},[425,84895,32221],{"class":701},[425,84897,84898,84900,84903],{"class":427,"line":33429},[425,84899,80166],{"class":701},[425,84901,84902],{"class":691},"289.9",[425,84904,32221],{"class":701},[425,84906,84907,84909,84911],{"class":427,"line":33449},[425,84908,80176],{"class":701},[425,84910,80179],{"class":435},[425,84912,32221],{"class":701},[425,84914,84915,84918,84920],{"class":427,"line":33455},[425,84916,84917],{"class":701},"        count: ",[425,84919,1235],{"class":691},[425,84921,32221],{"class":701},[425,84923,84924,84927,84930],{"class":427,"line":33466},[425,84925,84926],{"class":701},"        spec: { color: ",[425,84928,84929],{"class":435},"'白色'",[425,84931,56359],{"class":701},[425,84933,84934],{"class":427,"line":33472},[425,84935,78647],{"class":701},[425,84937,84938],{"class":427,"line":33478},[425,84939,80141],{"class":701},[425,84941,84942,84944,84946],{"class":427,"line":33484},[425,84943,80146],{"class":701},[425,84945,80240],{"class":435},[425,84947,32221],{"class":701},[425,84949,84950,84952,84954],{"class":427,"line":33490},[425,84951,80156],{"class":701},[425,84953,80249],{"class":435},[425,84955,32221],{"class":701},[425,84957,84958,84960,84963],{"class":427,"line":33496},[425,84959,80166],{"class":701},[425,84961,84962],{"class":691},"109.8",[425,84964,32221],{"class":701},[425,84966,84967,84969,84971],{"class":427,"line":33502},[425,84968,80176],{"class":701},[425,84970,80267],{"class":435},[425,84972,32221],{"class":701},[425,84974,84975,84977,84979],{"class":427,"line":33508},[425,84976,84917],{"class":701},[425,84978,1229],{"class":691},[425,84980,32221],{"class":701},[425,84982,84983,84986,84988,84990,84992],{"class":427,"line":33528},[425,84984,84985],{"class":701},"        spec: { size: ",[425,84987,82658],{"class":435},[425,84989,56219],{"class":701},[425,84991,82663],{"class":435},[425,84993,56359],{"class":701},[425,84995,84996],{"class":427,"line":33534},[425,84997,78647],{"class":701},[425,84999,85000],{"class":427,"line":33550},[425,85001,80141],{"class":701},[425,85003,85004,85006,85008],{"class":427,"line":33556},[425,85005,80146],{"class":701},[425,85007,80284],{"class":435},[425,85009,32221],{"class":701},[425,85011,85012,85014,85016],{"class":427,"line":33570},[425,85013,80156],{"class":701},[425,85015,80293],{"class":435},[425,85017,32221],{"class":701},[425,85019,85020,85022,85025],{"class":427,"line":33576},[425,85021,80166],{"class":701},[425,85023,85024],{"class":691},"488",[425,85026,32221],{"class":701},[425,85028,85029,85031,85033],{"class":427,"line":33591},[425,85030,80176],{"class":701},[425,85032,80311],{"class":435},[425,85034,32221],{"class":701},[425,85036,85037,85039,85041],{"class":427,"line":33597},[425,85038,84917],{"class":701},[425,85040,1367],{"class":691},[425,85042,32221],{"class":701},[425,85044,85045,85047,85050,85053,85056],{"class":427,"line":33606},[425,85046,84926],{"class":701},[425,85048,85049],{"class":435},"'青色'",[425,85051,85052],{"class":701},", sum: ",[425,85054,85055],{"class":435},"'一大四小'",[425,85057,56359],{"class":701},[425,85059,85060],{"class":427,"line":33612},[425,85061,78647],{"class":701},[425,85063,85064],{"class":427,"line":33621},[425,85065,80141],{"class":701},[425,85067,85068,85070,85072],{"class":427,"line":33627},[425,85069,80146],{"class":701},[425,85071,80328],{"class":435},[425,85073,32221],{"class":701},[425,85075,85076,85078,85080],{"class":427,"line":33633},[425,85077,80156],{"class":701},[425,85079,80337],{"class":435},[425,85081,32221],{"class":701},[425,85083,85084,85086,85089],{"class":427,"line":33642},[425,85085,80166],{"class":701},[425,85087,85088],{"class":691},"139",[425,85090,32221],{"class":701},[425,85092,85093,85095,85097],{"class":427,"line":33648},[425,85094,80176],{"class":701},[425,85096,80355],{"class":435},[425,85098,32221],{"class":701},[425,85100,85101,85103,85105],{"class":427,"line":33659},[425,85102,84917],{"class":701},[425,85104,1367],{"class":691},[425,85106,32221],{"class":701},[425,85108,85109,85111,85114,85116,85119],{"class":427,"line":33665},[425,85110,84985],{"class":701},[425,85112,85113],{"class":435},"'小号'",[425,85115,56219],{"class":701},[425,85117,85118],{"class":435},"'紫色'",[425,85120,56225],{"class":701},[425,85122,85123,85126],{"class":427,"line":33684},[425,85124,85125],{"class":701},"        gift: ",[425,85127,85128],{"class":435},"'50g茶叶,清洗球'\n",[425,85130,85131],{"class":427,"line":33690},[425,85132,53153],{"class":701},[425,85134,85135],{"class":427,"line":33701},[425,85136,53864],{"class":701},[425,85138,85139],{"class":427,"line":33707},[425,85140,85141],{"class":1216},"    \u002F\u002F  1.根据数据渲染页面\n",[425,85143,85144,85146,85148,85150,85152,85154,85156,85158,85160,85162,85164,85166],{"class":427,"line":33727},[425,85145,53162],{"class":701},[425,85147,55154],{"class":431},[425,85149,1159],{"class":701},[425,85151,80656],{"class":435},[425,85153,75004],{"class":701},[425,85155,1204],{"class":1155},[425,85157,80803],{"class":701},[425,85159,74799],{"class":431},[425,85161,1159],{"class":701},[425,85163,80550],{"class":6216},[425,85165,80553],{"class":1155},[425,85167,16569],{"class":701},[425,85169,85170],{"class":427,"line":33743},[425,85171,85172],{"class":1216},"      \u002F\u002F 对象解构\n",[425,85174,85175,85177,85179,85181,85183,85185,85187,85190,85192,85194,85196,85199,85201,85204,85206,85208],{"class":427,"line":33749},[425,85176,58983],{"class":1155},[425,85178,80562],{"class":701},[425,85180,80575],{"class":691},[425,85182,13434],{"class":701},[425,85184,80565],{"class":691},[425,85186,13434],{"class":701},[425,85188,85189],{"class":691},"count",[425,85191,13434],{"class":701},[425,85193,80570],{"class":691},[425,85195,13434],{"class":701},[425,85197,85198],{"class":691},"spec",[425,85200,13434],{"class":701},[425,85202,85203],{"class":691},"gift",[425,85205,80578],{"class":701},[425,85207,1204],{"class":1155},[425,85209,80583],{"class":701},[425,85211,85212],{"class":427,"line":33763},[425,85213,85214],{"class":1216},"      \u002F\u002F 规格文字模块处理\n",[425,85216,85217,85219,85222,85224,85226,85228,85230,85232,85234,85236],{"class":427,"line":33769},[425,85218,58983],{"class":1155},[425,85220,85221],{"class":691}," text",[425,85223,14563],{"class":1155},[425,85225,82693],{"class":701},[425,85227,82696],{"class":431},[425,85229,82699],{"class":701},[425,85231,74978],{"class":431},[425,85233,1159],{"class":701},[425,85235,82706],{"class":435},[425,85237,1165],{"class":701},[425,85239,85240],{"class":427,"line":33775},[425,85241,85242],{"class":1216},"      \u002F\u002F 处理赠品模块\n",[425,85244,85245,85247,85249,85251,85254,85256,85258,85260,85262,85265,85267,85269,85271,85273,85275,85278,85280,85283,85285,85287,85289,85291,85293,85295],{"class":427,"line":33786},[425,85246,58983],{"class":1155},[425,85248,74674],{"class":691},[425,85250,14563],{"class":1155},[425,85252,85253],{"class":701}," gift ",[425,85255,2133],{"class":1155},[425,85257,83867],{"class":701},[425,85259,83870],{"class":431},[425,85261,1159],{"class":701},[425,85263,85264],{"class":435},"','",[425,85266,31581],{"class":701},[425,85268,74799],{"class":431},[425,85270,1159],{"class":701},[425,85272,80550],{"class":6216},[425,85274,80553],{"class":1155},[425,85276,85277],{"class":435}," `\u003Cspan class=\"tag\">【赠品】${",[425,85279,80550],{"class":701},[425,85281,85282],{"class":435},"}\u003C\u002Fspan>`",[425,85284,31581],{"class":701},[425,85286,74978],{"class":431},[425,85288,1159],{"class":701},[425,85290,74983],{"class":435},[425,85292,938],{"class":701},[425,85294,948],{"class":1155},[425,85296,70859],{"class":435},[425,85298,85299],{"class":427,"line":33792},[425,85300,85301],{"class":1216},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[425,85303,85304,85306,85309,85311,85314,85316,85318,85320,85323,85325,85327,85329,85332,85334,85336],{"class":427,"line":33798},[425,85305,58983],{"class":1155},[425,85307,85308],{"class":691}," subtotal",[425,85310,14563],{"class":1155},[425,85312,85313],{"class":701}," ((price ",[425,85315,1603],{"class":1155},[425,85317,6754],{"class":691},[425,85319,7518],{"class":1155},[425,85321,85322],{"class":701}," count) ",[425,85324,1732],{"class":1155},[425,85326,6754],{"class":691},[425,85328,31581],{"class":701},[425,85330,85331],{"class":431},"toFixed",[425,85333,1159],{"class":701},[425,85335,1235],{"class":691},[425,85337,1165],{"class":701},[425,85339,85340],{"class":427,"line":33808},[425,85341,3400],{"emptyLinePlaceholder":1084},[425,85343,85344,85346],{"class":427,"line":33814},[425,85345,74737],{"class":1155},[425,85347,70923],{"class":435},[425,85349,85350],{"class":427,"line":33825},[425,85351,85352],{"class":435},"        \u003Cdiv class=\"item\">\n",[425,85354,85355,85358,85360],{"class":427,"line":33831},[425,85356,85357],{"class":435},"          \u003Cimg src=\"${",[425,85359,80575],{"class":701},[425,85361,80607],{"class":435},[425,85363,85364,85367,85369,85372,85374],{"class":427,"line":33841},[425,85365,85366],{"class":435},"          \u003Cp class=\"name\">${",[425,85368,80565],{"class":701},[425,85370,85371],{"class":435},"}${",[425,85373,2316],{"class":701},[425,85375,80617],{"class":435},[425,85377,85378,85381,85383],{"class":427,"line":33846},[425,85379,85380],{"class":435},"          \u003Cp class=\"spec\">${",[425,85382,6187],{"class":701},[425,85384,80617],{"class":435},[425,85386,85387,85390,85392,85394,85396,85398,85400,85402],{"class":427,"line":33852},[425,85388,85389],{"class":435},"          \u003Cp class=\"price\">${",[425,85391,80570],{"class":701},[425,85393,1706],{"class":435},[425,85395,85331],{"class":431},[425,85397,1159],{"class":435},[425,85399,1235],{"class":691},[425,85401,895],{"class":435},[425,85403,80617],{"class":435},[425,85405,85406,85409,85411],{"class":427,"line":33901},[425,85407,85408],{"class":435},"          \u003Cp class=\"count\">x${",[425,85410,85189],{"class":701},[425,85412,80617],{"class":435},[425,85414,85415,85418,85421],{"class":427,"line":33948},[425,85416,85417],{"class":435},"          \u003Cp class=\"sub-total\">${",[425,85419,85420],{"class":701},"subtotal",[425,85422,80617],{"class":435},[425,85424,85425],{"class":427,"line":33953},[425,85426,85427],{"class":435},"        \u003C\u002Fdiv> \n",[425,85429,85430],{"class":427,"line":33959},[425,85431,85432],{"class":435},"             `\n",[425,85434,85435,85438,85440,85442,85444],{"class":427,"line":33978},[425,85436,85437],{"class":701},"    }).",[425,85439,74978],{"class":431},[425,85441,1159],{"class":701},[425,85443,74983],{"class":435},[425,85445,1165],{"class":701},[425,85447,85448],{"class":427,"line":33984},[425,85449,85450],{"class":1216},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[425,85452,85453,85455,85457,85459,85461,85464,85466,85469,85471,85473,85475,85478,85481,85483,85486,85488,85490,85492,85495,85497,85499,85501,85503],{"class":427,"line":34004},[425,85454,12220],{"class":1155},[425,85456,63540],{"class":691},[425,85458,14563],{"class":1155},[425,85460,80803],{"class":701},[425,85462,85463],{"class":431},"reduce",[425,85465,3376],{"class":701},[425,85467,85468],{"class":6216},"prev",[425,85470,13434],{"class":701},[425,85472,80550],{"class":6216},[425,85474,938],{"class":701},[425,85476,85477],{"class":1155},"=>",[425,85479,85480],{"class":701}," prev ",[425,85482,1629],{"class":1155},[425,85484,85485],{"class":701}," (item.price ",[425,85487,1603],{"class":1155},[425,85489,6754],{"class":691},[425,85491,7518],{"class":1155},[425,85493,85494],{"class":701}," item.count) ",[425,85496,1732],{"class":1155},[425,85498,6754],{"class":691},[425,85500,13434],{"class":701},[425,85502,1341],{"class":691},[425,85504,1165],{"class":701},[425,85506,85507,85509,85511,85513,85516,85518,85520,85523,85525,85527,85529],{"class":427,"line":34010},[425,85508,53162],{"class":701},[425,85510,55154],{"class":431},[425,85512,1159],{"class":701},[425,85514,85515],{"class":435},"'.amount'",[425,85517,75004],{"class":701},[425,85519,1204],{"class":1155},[425,85521,85522],{"class":701}," total.",[425,85524,85331],{"class":431},[425,85526,1159],{"class":701},[425,85528,1235],{"class":691},[425,85530,1165],{"class":701},[425,85532,85533,85535,85537],{"class":427,"line":34016},[425,85534,53172],{"class":701},[425,85536,52568],{"class":52055},[425,85538,52062],{"class":701},[425,85540,85541,85543,85545],{"class":427,"line":34026},[425,85542,52540],{"class":701},[425,85544,52555],{"class":52055},[425,85546,52062],{"class":701},[425,85548,85549],{"class":427,"line":34031},[425,85550,3400],{"emptyLinePlaceholder":1084},[425,85552,85553,85555,85557],{"class":427,"line":34037},[425,85554,52540],{"class":701},[425,85556,51390],{"class":52055},[425,85558,52062],{"class":701},[1099,85560,85562],{"id":85561},"_411-编程思想","4.11 编程思想",[14,85564,85566],{"id":85565},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,85568,85569,85572],{},[400,85570,85571],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,85574,85575],{},"调用就可以了",[19,85577,85578],{},[393,85579],{"alt":395,"src":85580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[14,85582,85584],{"id":85583},"_4112-面向对象","4.11.2 面向对象",[19,85586,85587],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,85589,85590],{},[393,85591],{"alt":395,"src":85592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,85594,85595],{},"面向对象的特性：",[447,85597,85598,85601,85604],{},[450,85599,85600],{},"封装性",[450,85602,85603],{},"继承性",[450,85605,85606],{},"多态性",[14,85608,85610],{"id":85609},"_4113-两者比较","4.11.3 两者比较",[19,85612,85613],{},[393,85614],{"alt":395,"src":85615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[1099,85617,85619],{"id":85618},"_412-构造函数回顾","4.12 构造函数回顾",[19,85621,85622],{},[393,85623],{"alt":395,"src":85624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,85626,85627],{},[393,85628],{"alt":395,"src":85629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,85631,85632],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,85634,85635],{},[393,85636],{"alt":395,"src":85637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[1099,85639,85641],{"id":85640},"_413-原型","4.13 原型",[14,85643,85645],{"id":85644},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,85647,85648],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,85650,85651],{},[393,85652],{"alt":395,"src":85653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,85655,85656],{},[393,85657],{"alt":395,"src":85658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,85660,85661],{},"原型是构造函数的属性，它也是一个对象",[19,85663,85664],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,85666,85667],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[416,85669,85671],{"className":53822,"code":85670,"language":53824,"meta":395,"style":395},"\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",[422,85672,85673,85681,85686,85694,85699,85704,85709,85714,85719,85723,85727,85731,85736,85741,85745,85750,85755,85760,85765,85770,85774,85782],{"__ignoreMap":395},[425,85674,85675,85677,85679],{"class":427,"line":428},[425,85676,2057],{"class":701},[425,85678,52555],{"class":52055},[425,85680,52062],{"class":701},[425,85682,85683],{"class":427,"line":698},[425,85684,85685],{"class":1216},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[425,85687,85688,85690,85692],{"class":427,"line":710},[425,85689,52899],{"class":701},[425,85691,52568],{"class":52055},[425,85693,52062],{"class":701},[425,85695,85696],{"class":427,"line":721},[425,85697,85698],{"class":701},"    function Star(uname, age) {\n",[425,85700,85701],{"class":427,"line":735},[425,85702,85703],{"class":701},"      this.uname = uname,\n",[425,85705,85706],{"class":427,"line":743},[425,85707,85708],{"class":701},"        this.age = age\n",[425,85710,85711],{"class":427,"line":751},[425,85712,85713],{"class":701},"      \u002F\u002F this.sing = function () {\n",[425,85715,85716],{"class":427,"line":759},[425,85717,85718],{"class":701},"      \u002F\u002F   console.log('唱歌')\n",[425,85720,85721],{"class":427,"line":770},[425,85722,3400],{"emptyLinePlaceholder":1084},[425,85724,85725],{"class":427,"line":780},[425,85726,60792],{"class":701},[425,85728,85729],{"class":427,"line":790},[425,85730,3187],{"class":701},[425,85732,85733],{"class":427,"line":805},[425,85734,85735],{"class":701},"    Star.prototype.sing = function () {\n",[425,85737,85738],{"class":427,"line":818},[425,85739,85740],{"class":701},"      console.log('唱歌')\n",[425,85742,85743],{"class":427,"line":831},[425,85744,3187],{"class":701},[425,85746,85747],{"class":427,"line":841},[425,85748,85749],{"class":701},"    \u002F\u002F console.dir(Star.prototype)\n",[425,85751,85752],{"class":427,"line":852},[425,85753,85754],{"class":701},"    const pink = new Star('pink', 18)\n",[425,85756,85757],{"class":427,"line":862},[425,85758,85759],{"class":701},"    const red = new Star('red', 20)\n",[425,85761,85762],{"class":427,"line":878},[425,85763,85764],{"class":701},"    pink.sing()\n",[425,85766,85767],{"class":427,"line":914},[425,85768,85769],{"class":701},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[425,85771,85772],{"class":427,"line":943},[425,85773,3400],{"emptyLinePlaceholder":1084},[425,85775,85776,85778,85780],{"class":427,"line":956},[425,85777,53172],{"class":701},[425,85779,52568],{"class":52055},[425,85781,52062],{"class":701},[425,85783,85784,85786,85788],{"class":427,"line":964},[425,85785,52540],{"class":701},[425,85787,52555],{"class":52055},[425,85789,52062],{"class":701},[19,85791,85792],{},[393,85793],{"alt":395,"src":85794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[416,85796,85798],{"className":53822,"code":85797,"language":53824,"meta":395,"style":395},"\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",[422,85799,85800,85808,85816,85821,85826,85831,85836,85840,85845,85850,85855,85859,85864,85868,85872,85877,85881,85889],{"__ignoreMap":395},[425,85801,85802,85804,85806],{"class":427,"line":428},[425,85803,2057],{"class":701},[425,85805,52555],{"class":52055},[425,85807,52062],{"class":701},[425,85809,85810,85812,85814],{"class":427,"line":698},[425,85811,52899],{"class":701},[425,85813,52568],{"class":52055},[425,85815,52062],{"class":701},[425,85817,85818],{"class":427,"line":710},[425,85819,85820],{"class":701},"    let that\n",[425,85822,85823],{"class":427,"line":721},[425,85824,85825],{"class":701},"    function Star(uname) {\n",[425,85827,85828],{"class":427,"line":735},[425,85829,85830],{"class":701},"      this.uname = uname\n",[425,85832,85833],{"class":427,"line":743},[425,85834,85835],{"class":701},"      that = this\n",[425,85837,85838],{"class":427,"line":751},[425,85839,3187],{"class":701},[425,85841,85842],{"class":427,"line":759},[425,85843,85844],{"class":701},"    \u002F\u002F 实例对象是 ldh\n",[425,85846,85847],{"class":427,"line":770},[425,85848,85849],{"class":701},"    const ldh = new Star('刘德华')\n",[425,85851,85852],{"class":427,"line":780},[425,85853,85854],{"class":701},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[425,85856,85857],{"class":427,"line":790},[425,85858,3400],{"emptyLinePlaceholder":1084},[425,85860,85861],{"class":427,"line":805},[425,85862,85863],{"class":701},"    Star.sing = function () {\n",[425,85865,85866],{"class":427,"line":818},[425,85867,85740],{"class":701},[425,85869,85870],{"class":427,"line":831},[425,85871,3187],{"class":701},[425,85873,85874],{"class":427,"line":841},[425,85875,85876],{"class":701},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[425,85878,85879],{"class":427,"line":852},[425,85880,3400],{"emptyLinePlaceholder":1084},[425,85882,85883,85885,85887],{"class":427,"line":862},[425,85884,53172],{"class":701},[425,85886,52568],{"class":52055},[425,85888,52062],{"class":701},[425,85890,85891,85893,85895],{"class":427,"line":878},[425,85892,52540],{"class":701},[425,85894,52555],{"class":52055},[425,85896,52062],{"class":701},[19,85898,85899],{},"构造函数的this指向的是实例对象；",[19,85901,85902],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[14,85904,85906],{"id":85905},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,85908,85909],{},[393,85910],{"alt":395,"src":85911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[416,85913,85915],{"className":53822,"code":85914,"language":53824,"meta":395,"style":395},"\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",[422,85916,85917,85925,85933,85938,85943,85948,85953,85958,85963,85968,85973,85978,85983,85987,85992,85997,86002,86007,86011,86016,86021,86026,86031,86035,86040,86045,86050,86055,86059,86064,86068,86076],{"__ignoreMap":395},[425,85918,85919,85921,85923],{"class":427,"line":428},[425,85920,2057],{"class":701},[425,85922,52555],{"class":52055},[425,85924,52062],{"class":701},[425,85926,85927,85929,85931],{"class":427,"line":698},[425,85928,52899],{"class":701},[425,85930,52568],{"class":52055},[425,85932,52062],{"class":701},[425,85934,85935],{"class":427,"line":710},[425,85936,85937],{"class":701},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[425,85939,85940],{"class":427,"line":721},[425,85941,85942],{"class":701},"    const arr = [1, 2, 3]\n",[425,85944,85945],{"class":427,"line":735},[425,85946,85947],{"class":701},"    \u002F\u002F 自己定义数组的扩展方法\n",[425,85949,85950],{"class":427,"line":743},[425,85951,85952],{"class":701},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[425,85954,85955],{"class":427,"line":751},[425,85956,85957],{"class":701},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[425,85959,85960],{"class":427,"line":759},[425,85961,85962],{"class":701},"    \u002F\u002F ①.最大值\n",[425,85964,85965],{"class":427,"line":770},[425,85966,85967],{"class":701},"    Array.prototype.max = function () {\n",[425,85969,85970],{"class":427,"line":780},[425,85971,85972],{"class":701},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[425,85974,85975],{"class":427,"line":790},[425,85976,85977],{"class":701},"      return Math.max(...this)\n",[425,85979,85980],{"class":427,"line":805},[425,85981,85982],{"class":701},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[425,85984,85985],{"class":427,"line":818},[425,85986,3187],{"class":701},[425,85988,85989],{"class":427,"line":831},[425,85990,85991],{"class":701},"    console.log(arr.max())\n",[425,85993,85994],{"class":427,"line":841},[425,85995,85996],{"class":701},"    \u002F\u002F ②最小值\n",[425,85998,85999],{"class":427,"line":852},[425,86000,86001],{"class":701},"    Array.prototype.min = function () {\n",[425,86003,86004],{"class":427,"line":862},[425,86005,86006],{"class":701},"      return Math.min(...this)\n",[425,86008,86009],{"class":427,"line":878},[425,86010,3187],{"class":701},[425,86012,86013],{"class":427,"line":914},[425,86014,86015],{"class":701},"    console.log(arr.min())\n",[425,86017,86018],{"class":427,"line":943},[425,86019,86020],{"class":701},"    \u002F\u002F③求和\n",[425,86022,86023],{"class":427,"line":956},[425,86024,86025],{"class":701},"    Array.prototype.sum = function () {\n",[425,86027,86028],{"class":427,"line":964},[425,86029,86030],{"class":701},"      return this.reduce((prev, current) => prev + current, 0)\n",[425,86032,86033],{"class":427,"line":2733},[425,86034,3187],{"class":701},[425,86036,86037],{"class":427,"line":2750},[425,86038,86039],{"class":701},"    console.log(arr.sum())\n",[425,86041,86042],{"class":427,"line":2755},[425,86043,86044],{"class":701},"    \u002F\u002F ③排序\n",[425,86046,86047],{"class":427,"line":2760},[425,86048,86049],{"class":701},"    Array.prototype.rever = function () {\n",[425,86051,86052],{"class":427,"line":2765},[425,86053,86054],{"class":701},"      return this.reverse()\n",[425,86056,86057],{"class":427,"line":2779},[425,86058,3187],{"class":701},[425,86060,86061],{"class":427,"line":2784},[425,86062,86063],{"class":701},"    console.log(arr.rever())\n",[425,86065,86066],{"class":427,"line":3577},[425,86067,3400],{"emptyLinePlaceholder":1084},[425,86069,86070,86072,86074],{"class":427,"line":3591},[425,86071,53172],{"class":701},[425,86073,52568],{"class":52055},[425,86075,52062],{"class":701},[425,86077,86078,86080,86082],{"class":427,"line":3599},[425,86079,52540],{"class":701},[425,86081,52555],{"class":52055},[425,86083,52062],{"class":701},[19,86085,86086],{},[393,86087],{"alt":395,"src":86088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[14,86090,86092],{"id":86091},"_4133-constructor-属性","4.13.3 constructor 属性",[19,86094,86095],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,86097,86098],{},[393,86099],{"alt":395,"src":86100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[416,86102,86104],{"className":53822,"code":86103,"language":53824,"meta":395,"style":395},"\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",[422,86105,86106,86114,86122,86127,86132,86136,86141,86146,86151,86159],{"__ignoreMap":395},[425,86107,86108,86110,86112],{"class":427,"line":428},[425,86109,2057],{"class":701},[425,86111,52555],{"class":52055},[425,86113,52062],{"class":701},[425,86115,86116,86118,86120],{"class":427,"line":698},[425,86117,52899],{"class":701},[425,86119,52568],{"class":52055},[425,86121,52062],{"class":701},[425,86123,86124],{"class":427,"line":710},[425,86125,86126],{"class":701},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[425,86128,86129],{"class":427,"line":721},[425,86130,86131],{"class":701},"    function Star() {\n",[425,86133,86134],{"class":427,"line":735},[425,86135,3187],{"class":701},[425,86137,86138],{"class":427,"line":743},[425,86139,86140],{"class":701},"    const ldh = new Star()\n",[425,86142,86143],{"class":427,"line":751},[425,86144,86145],{"class":701},"    console.log(Star.prototype)\n",[425,86147,86148],{"class":427,"line":759},[425,86149,86150],{"class":701},"    console.log(Star.prototype.constructor === Star)\n",[425,86152,86153,86155,86157],{"class":427,"line":770},[425,86154,53172],{"class":701},[425,86156,52568],{"class":52055},[425,86158,52062],{"class":701},[425,86160,86161,86163,86165],{"class":427,"line":780},[425,86162,52540],{"class":701},[425,86164,52555],{"class":52055},[425,86166,52062],{"class":701},[19,86168,86169],{},[393,86170],{"alt":395,"src":86171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,86173,86174],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[416,86176,86178],{"className":53822,"code":86177,"language":53824,"meta":395,"style":395},"  \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",[422,86179,86180,86188,86192,86196,86200,86205,86210,86215,86219,86224,86229,86234,86239,86244,86249,86253,86257,86262,86267,86272,86276,86281,86286,86290,86294,86298],{"__ignoreMap":395},[425,86181,86182,86184,86186],{"class":427,"line":428},[425,86183,52899],{"class":701},[425,86185,52568],{"class":52055},[425,86187,52062],{"class":701},[425,86189,86190],{"class":427,"line":698},[425,86191,86126],{"class":701},[425,86193,86194],{"class":427,"line":710},[425,86195,86131],{"class":701},[425,86197,86198],{"class":427,"line":721},[425,86199,3187],{"class":701},[425,86201,86202],{"class":427,"line":735},[425,86203,86204],{"class":701},"    \u002F\u002F const ldh = new Star()\n",[425,86206,86207],{"class":427,"line":743},[425,86208,86209],{"class":701},"    \u002F\u002F console.log(Star.prototype)\n",[425,86211,86212],{"class":427,"line":751},[425,86213,86214],{"class":701},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[425,86216,86217],{"class":427,"line":759},[425,86218,3400],{"emptyLinePlaceholder":1084},[425,86220,86221],{"class":427,"line":770},[425,86222,86223],{"class":701},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[425,86225,86226],{"class":427,"line":780},[425,86227,86228],{"class":701},"    \u002F\u002F Star.prototype.sing = function () {\n",[425,86230,86231],{"class":427,"line":790},[425,86232,86233],{"class":701},"    \u002F\u002F   console.log('唱歌')\n",[425,86235,86236],{"class":427,"line":805},[425,86237,86238],{"class":701},"    \u002F\u002F }\n",[425,86240,86241],{"class":427,"line":818},[425,86242,86243],{"class":701},"    \u002F\u002F Star.prototype.dance = function () {\n",[425,86245,86246],{"class":427,"line":831},[425,86247,86248],{"class":701},"    \u002F\u002F   console.log('跳舞')\n",[425,86250,86251],{"class":427,"line":841},[425,86252,86238],{"class":701},[425,86254,86255],{"class":427,"line":852},[425,86256,86145],{"class":701},[425,86258,86259],{"class":427,"line":862},[425,86260,86261],{"class":701},"    Star.prototype = {\n",[425,86263,86264],{"class":427,"line":878},[425,86265,86266],{"class":701},"      sing: function () {\n",[425,86268,86269],{"class":427,"line":914},[425,86270,86271],{"class":701},"        console.log('唱歌')\n",[425,86273,86274],{"class":427,"line":943},[425,86275,78647],{"class":701},[425,86277,86278],{"class":427,"line":956},[425,86279,86280],{"class":701},"      dance: function () {\n",[425,86282,86283],{"class":427,"line":964},[425,86284,86285],{"class":701},"        console.log('跳舞')\n",[425,86287,86288],{"class":427,"line":2733},[425,86289,53153],{"class":701},[425,86291,86292],{"class":427,"line":2750},[425,86293,3187],{"class":701},[425,86295,86296],{"class":427,"line":2755},[425,86297,86145],{"class":701},[425,86299,86300,86302,86304],{"class":427,"line":2760},[425,86301,53172],{"class":701},[425,86303,52568],{"class":52055},[425,86305,52062],{"class":701},[19,86307,86308],{},"进行输出结果后会发现：",[19,86310,86311],{},[393,86312],{"alt":395,"src":86313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,86315,86316],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,86318,86319],{},"所以，要重新指回创造这个原型对象的构造函数",[416,86321,86323],{"className":71968,"code":86322,"language":71970,"meta":395,"style":395},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[422,86324,86325,86339,86344,86349,86360,86373,86378,86389,86403,86407],{"__ignoreMap":395},[425,86326,86327,86330,86332,86335,86337],{"class":427,"line":428},[425,86328,86329],{"class":691},"Star",[425,86331,1706],{"class":701},[425,86333,86334],{"class":691},"prototype",[425,86336,14563],{"class":1155},[425,86338,16569],{"class":701},[425,86340,86341],{"class":427,"line":698},[425,86342,86343],{"class":1216},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[425,86345,86346],{"class":427,"line":710},[425,86347,86348],{"class":701},"  constructor: Star,\n",[425,86350,86351,86354,86356,86358],{"class":427,"line":721},[425,86352,86353],{"class":431},"  sing",[425,86355,52192],{"class":701},[425,86357,55204],{"class":1155},[425,86359,55207],{"class":701},[425,86361,86362,86364,86366,86368,86371],{"class":427,"line":735},[425,86363,74508],{"class":701},[425,86365,59002],{"class":431},[425,86367,1159],{"class":701},[425,86369,86370],{"class":435},"'唱歌'",[425,86372,1165],{"class":701},[425,86374,86375],{"class":427,"line":743},[425,86376,86377],{"class":701},"   },\n",[425,86379,86380,86383,86385,86387],{"class":427,"line":751},[425,86381,86382],{"class":431},"   dance",[425,86384,52192],{"class":701},[425,86386,55204],{"class":1155},[425,86388,55207],{"class":701},[425,86390,86391,86394,86396,86398,86401],{"class":427,"line":759},[425,86392,86393],{"class":701},"     console.",[425,86395,59002],{"class":431},[425,86397,1159],{"class":701},[425,86399,86400],{"class":435},"'跳舞'",[425,86402,1165],{"class":701},[425,86404,86405],{"class":427,"line":770},[425,86406,5309],{"class":701},[425,86408,86409],{"class":427,"line":780},[425,86410,2578],{"class":701},[19,86412,86413],{},[393,86414],{"alt":395,"src":86415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,86417,86418],{},"总结1：",[19,86420,86421],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,86423,86424],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,86426,86427],{},"constructor指的是他的来源",[19,86429,86430],{},[393,86431],{"alt":395,"src":86432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,86434,86435],{},[393,86436],{"alt":395,"src":86437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,86439,86440],{},"总结2：",[19,86442,86443],{},[393,86444],{"alt":395,"src":86445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,86447,86448],{},[393,86449],{"alt":395,"src":86450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,86452,86453],{},[393,86454],{"alt":395,"src":86455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[14,86457,86459],{"id":86458},"_4134-对象原型","4.13.4 对象原型",[19,86461,86462],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,86464,86465],{},"对象原型就是__proto__这个属性",[19,86467,86468],{},[393,86469],{"alt":395,"src":86470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,86472,86473],{},[393,86474],{"alt":395,"src":86475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,86477,86478],{},[393,86479],{"alt":395,"src":86480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,86482,86483],{},[393,86484],{"alt":395,"src":86485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[416,86487,86489],{"className":53822,"code":86488,"language":53824,"meta":395,"style":395},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[422,86490,86491,86499,86507,86511,86515,86519,86524,86532],{"__ignoreMap":395},[425,86492,86493,86495,86497],{"class":427,"line":428},[425,86494,2057],{"class":701},[425,86496,52555],{"class":52055},[425,86498,52062],{"class":701},[425,86500,86501,86503,86505],{"class":427,"line":698},[425,86502,52899],{"class":701},[425,86504,52568],{"class":52055},[425,86506,52062],{"class":701},[425,86508,86509],{"class":427,"line":710},[425,86510,86131],{"class":701},[425,86512,86513],{"class":427,"line":721},[425,86514,3187],{"class":701},[425,86516,86517],{"class":427,"line":735},[425,86518,86140],{"class":701},[425,86520,86521],{"class":427,"line":743},[425,86522,86523],{"class":701},"    console.log(ldh)\n",[425,86525,86526,86528,86530],{"class":427,"line":751},[425,86527,53172],{"class":701},[425,86529,52568],{"class":52055},[425,86531,52062],{"class":701},[425,86533,86534,86536,86538],{"class":427,"line":759},[425,86535,52540],{"class":701},[425,86537,52555],{"class":52055},[425,86539,52062],{"class":701},[19,86541,86542],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,86544,86545],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,86547,86548],{},[393,86549],{"alt":395,"src":86550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,86552,86553],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,86555,86556],{},"对象原型指向原型对象",[19,86558,86559],{},[393,86560],{"alt":395,"src":86561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,86563,86564],{},[393,86565],{"alt":395,"src":86566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,86568,86569],{},[393,86570],{"alt":395,"src":86571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[14,86573,86575],{"id":86574},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,86577,86578],{},[393,86579],{"alt":395,"src":86580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[972,86582,86583,86586,86589,86592],{},[450,86584,86585],{},"构造函数通过new的形式实例化得到实例对象",[450,86587,86588],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[450,86590,86591],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[450,86593,86594],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,86596,86597],{},[393,86598],{"alt":395,"src":86599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,86601,86602],{},"题目梳理：",[19,86604,86605],{},[393,86606],{"alt":395,"src":86607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[14,86609,86611],{"id":86610},"_4136-原型继承","4.13.6 原型继承",[19,86613,86614],{},[393,86615],{"alt":395,"src":86616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,86618,86619],{},[393,86620],{"alt":395,"src":86621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,86623,86624],{},[393,86625],{"alt":395,"src":86626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,86628,86629],{},[393,86630],{"alt":395,"src":86631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,86633,86634],{},[393,86635],{"alt":395,"src":86636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,86638,86639],{},[393,86640],{"alt":395,"src":86641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,86643,86644],{},[393,86645],{"alt":395,"src":86646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,86648,86649],{},[393,86650],{"alt":395,"src":86651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,86653,86654],{},"回顾：构造函数每次new得到对象都是不同的",[14,86656,86658],{"id":86657},"_4137-原型链","4.13.7 原型链",[19,86660,86661],{},[393,86662],{"alt":395,"src":86663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,86665,86666],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,86668,86669],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,86671,86672],{},"大哥是Object",[19,86674,86675],{},[393,86676],{"alt":395,"src":86677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,86679,86680],{},[393,86681],{"alt":395,"src":86682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,86684,86685],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,86687,86688],{},"万物皆对象",[14,86690,86692],{"id":86691},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,86694,86695],{},"模态框",[19,86697,86698],{},"以后遇见这个效果直接使用这个就行",[19,86700,86701],{},[393,86702],{"alt":395,"src":86703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,86705,86706],{},[393,86707],{"alt":395,"src":86708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,86710,86711],{},[393,86712],{"alt":395,"src":86713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,86715,86716],{},[393,86717],{"alt":395,"src":86718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,86720,86721],{},"补充知识点：",[972,86723,86724],{},[450,86725,86726],{},"append()",[19,86728,86729],{},[393,86730],{"alt":395,"src":86731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[416,86733,86735],{"className":51388,"code":86734,"language":51390,"meta":395,"style":395},"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",[422,86736,86737,86742,86747,86752,86756,86760,86764,86769,86774,86779,86783],{"__ignoreMap":395},[425,86738,86739],{"class":427,"line":428},[425,86740,86741],{"class":701},"append(param1)\n",[425,86743,86744],{"class":427,"line":698},[425,86745,86746],{"class":701},"append(param1, param2)\n",[425,86748,86749],{"class":427,"line":710},[425,86750,86751],{"class":701},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[425,86753,86754],{"class":427,"line":721},[425,86755,3400],{"emptyLinePlaceholder":1084},[425,86757,86758],{"class":427,"line":735},[425,86759,3400],{"emptyLinePlaceholder":1084},[425,86761,86762],{"class":427,"line":743},[425,86763,3400],{"emptyLinePlaceholder":1084},[425,86765,86766],{"class":427,"line":751},[425,86767,86768],{"class":701},"let div = document.createElement(\"div\");\n",[425,86770,86771],{"class":427,"line":759},[425,86772,86773],{"class":701},"let p = document.createElement(\"p\");\n",[425,86775,86776],{"class":427,"line":770},[425,86777,86778],{"class":701},"div.append(p);\n",[425,86780,86781],{"class":427,"line":780},[425,86782,3400],{"emptyLinePlaceholder":1084},[425,86784,86785,86788,86790],{"class":427,"line":790},[425,86786,86787],{"class":701},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[425,86789,19],{"class":52055},[425,86791,86792],{"class":701},"> ]\n",[972,86794,86795],{"start":698},[450,86796,86797],{},"remove()",[19,86799,86800],{},"自己删自己",[19,86802,86803],{},[393,86804],{"alt":395,"src":86805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[416,86807,86809],{"className":51388,"code":86808,"language":51390,"meta":395,"style":395},"\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",[422,86810,86811,86821,86835,86839,86847,86861,86881,86893,86901,86908,86920,86933,86968,86980,86991,87003,87015,87027,87054,87064,87068,87072,87081,87093,87107,87117,87129,87133,87137,87147,87158,87168,87178,87191,87204,87214,87218,87222,87231,87241,87253,87257,87261,87270,87280,87290,87302,87306,87310,87320,87336,87347,87357,87367,87379,87391,87403,87407,87411,87424,87435,87439,87447,87455,87459,87467,87487,87507,87515,87520,87546,87551,87556,87575,87580,87592,87597,87608,87618,87628,87633,87638,87642,87647,87652,87657,87677,87682,87702,87707,87721,87726,87731,87736,87752,87756,87761,87790,87795,87800,87805,87816,87820,87824,87828,87833,87858,87863,87888,87893,87902,87906,87911,87936,87940,87965,87969,87978,87982,87987,88005,88015,88019,88027,88035,88039],{"__ignoreMap":395},[425,86812,86813,86815,86817,86819],{"class":427,"line":428},[425,86814,52052],{"class":701},[425,86816,52056],{"class":52055},[425,86818,52059],{"class":431},[425,86820,52062],{"class":701},[425,86822,86823,86825,86827,86829,86831,86833],{"class":427,"line":698},[425,86824,2057],{"class":701},[425,86826,51390],{"class":52055},[425,86828,52071],{"class":431},[425,86830,1204],{"class":701},[425,86832,52076],{"class":435},[425,86834,52062],{"class":701},[425,86836,86837],{"class":427,"line":710},[425,86838,3400],{"emptyLinePlaceholder":1084},[425,86840,86841,86843,86845],{"class":427,"line":721},[425,86842,2057],{"class":701},[425,86844,52089],{"class":52055},[425,86846,52062],{"class":701},[425,86848,86849,86851,86853,86855,86857,86859],{"class":427,"line":735},[425,86850,52899],{"class":701},[425,86852,52099],{"class":52055},[425,86854,52102],{"class":431},[425,86856,1204],{"class":701},[425,86858,52107],{"class":435},[425,86860,52062],{"class":701},[425,86862,86863,86865,86867,86869,86871,86873,86875,86877,86879],{"class":427,"line":743},[425,86864,52899],{"class":701},[425,86866,52099],{"class":52055},[425,86868,15917],{"class":431},[425,86870,1204],{"class":701},[425,86872,52146],{"class":435},[425,86874,52126],{"class":431},[425,86876,1204],{"class":701},[425,86878,52153],{"class":435},[425,86880,52062],{"class":701},[425,86882,86883,86885,86887,86889,86891],{"class":427,"line":751},[425,86884,52899],{"class":701},[425,86886,52162],{"class":52055},[425,86888,52165],{"class":701},[425,86890,52162],{"class":52055},[425,86892,52062],{"class":701},[425,86894,86895,86897,86899],{"class":427,"line":759},[425,86896,52899],{"class":701},[425,86898,1074],{"class":52055},[425,86900,52062],{"class":701},[425,86902,86903,86906],{"class":427,"line":770},[425,86904,86905],{"class":431},"    .modal",[425,86907,16569],{"class":701},[425,86909,86910,86912,86914,86916,86918],{"class":427,"line":780},[425,86911,55526],{"class":691},[425,86913,52192],{"class":701},[425,86915,4973],{"class":691},[425,86917,52247],{"class":1155},[425,86919,2307],{"class":701},[425,86921,86922,86925,86927,86929,86931],{"class":427,"line":790},[425,86923,86924],{"class":691},"      min-height",[425,86926,52192],{"class":701},[425,86928,1460],{"class":691},[425,86930,52247],{"class":1155},[425,86932,2307],{"class":701},[425,86934,86935,86937,86939,86941,86943,86945,86947,86949,86951,86953,86955,86957,86959,86961,86963,86966],{"class":427,"line":805},[425,86936,79505],{"class":691},[425,86938,52192],{"class":701},[425,86940,1341],{"class":691},[425,86942,5093],{"class":691},[425,86944,3038],{"class":691},[425,86946,52247],{"class":1155},[425,86948,79522],{"class":691},[425,86950,1159],{"class":701},[425,86952,1341],{"class":691},[425,86954,13434],{"class":701},[425,86956,1341],{"class":691},[425,86958,13434],{"class":701},[425,86960,1341],{"class":691},[425,86962,13434],{"class":701},[425,86964,86965],{"class":691},"0.1",[425,86967,3719],{"class":701},[425,86969,86970,86972,86974,86976,86978],{"class":427,"line":818},[425,86971,55889],{"class":691},[425,86973,52192],{"class":701},[425,86975,1442],{"class":691},[425,86977,52247],{"class":1155},[425,86979,2307],{"class":701},[425,86981,86982,86984,86986,86989],{"class":427,"line":831},[425,86983,55514],{"class":691},[425,86985,52192],{"class":701},[425,86987,86988],{"class":691},"fixed",[425,86990,2307],{"class":701},[425,86992,86993,86996,86998,87001],{"class":427,"line":841},[425,86994,86995],{"class":691},"      z-index",[425,86997,52192],{"class":701},[425,86999,87000],{"class":691},"999",[425,87002,2307],{"class":701},[425,87004,87005,87007,87009,87011,87013],{"class":427,"line":852},[425,87006,55593],{"class":691},[425,87008,52192],{"class":701},[425,87010,1804],{"class":691},[425,87012,1477],{"class":1155},[425,87014,2307],{"class":701},[425,87016,87017,87019,87021,87023,87025],{"class":427,"line":862},[425,87018,55702],{"class":691},[425,87020,52192],{"class":701},[425,87022,1804],{"class":691},[425,87024,1477],{"class":1155},[425,87026,2307],{"class":701},[425,87028,87029,87031,87033,87035,87037,87040,87042,87044,87046,87048,87050,87052],{"class":427,"line":878},[425,87030,79546],{"class":691},[425,87032,52192],{"class":701},[425,87034,79551],{"class":691},[425,87036,1159],{"class":701},[425,87038,87039],{"class":691},"-50",[425,87041,1477],{"class":1155},[425,87043,13434],{"class":701},[425,87045,87039],{"class":691},[425,87047,1477],{"class":1155},[425,87049,13434],{"class":701},[425,87051,1341],{"class":691},[425,87053,3719],{"class":701},[425,87055,87056,87058,87060,87062],{"class":427,"line":914},[425,87057,55639],{"class":691},[425,87059,52192],{"class":701},[425,87061,61597],{"class":691},[425,87063,2307],{"class":701},[425,87065,87066],{"class":427,"line":943},[425,87067,3187],{"class":701},[425,87069,87070],{"class":427,"line":956},[425,87071,3400],{"emptyLinePlaceholder":1084},[425,87073,87074,87076,87079],{"class":427,"line":964},[425,87075,86905],{"class":431},[425,87077,87078],{"class":431}," .header",[425,87080,16569],{"class":701},[425,87082,87083,87085,87087,87089,87091],{"class":427,"line":2733},[425,87084,58114],{"class":691},[425,87086,52192],{"class":701},[425,87088,1550],{"class":691},[425,87090,52247],{"class":1155},[425,87092,2307],{"class":701},[425,87094,87095,87097,87099,87101,87103,87105],{"class":427,"line":2750},[425,87096,55450],{"class":691},[425,87098,52192],{"class":701},[425,87100,1341],{"class":691},[425,87102,3038],{"class":691},[425,87104,52247],{"class":1155},[425,87106,2307],{"class":701},[425,87108,87109,87111,87113,87115],{"class":427,"line":2755},[425,87110,55514],{"class":691},[425,87112,52192],{"class":701},[425,87114,55519],{"class":691},[425,87116,2307],{"class":701},[425,87118,87119,87121,87123,87125,87127],{"class":427,"line":2760},[425,87120,55677],{"class":691},[425,87122,52192],{"class":701},[425,87124,1848],{"class":691},[425,87126,52247],{"class":1155},[425,87128,2307],{"class":701},[425,87130,87131],{"class":427,"line":2765},[425,87132,3187],{"class":701},[425,87134,87135],{"class":427,"line":2779},[425,87136,3400],{"emptyLinePlaceholder":1084},[425,87138,87139,87141,87143,87145],{"class":427,"line":2784},[425,87140,86905],{"class":431},[425,87142,87078],{"class":431},[425,87144,4032],{"class":52055},[425,87146,16569],{"class":701},[425,87148,87149,87152,87154,87156],{"class":427,"line":3577},[425,87150,87151],{"class":691},"      font-style",[425,87153,52192],{"class":701},[425,87155,64596],{"class":691},[425,87157,2307],{"class":701},[425,87159,87160,87162,87164,87166],{"class":427,"line":3591},[425,87161,58171],{"class":691},[425,87163,52192],{"class":701},[425,87165,62825],{"class":691},[425,87167,2307],{"class":701},[425,87169,87170,87172,87174,87176],{"class":427,"line":3599},[425,87171,55514],{"class":691},[425,87173,52192],{"class":701},[425,87175,55586],{"class":691},[425,87177,2307],{"class":701},[425,87179,87180,87183,87185,87187,87189],{"class":427,"line":3604},[425,87181,87182],{"class":691},"      right",[425,87184,52192],{"class":701},[425,87186,1723],{"class":691},[425,87188,52247],{"class":1155},[425,87190,2307],{"class":701},[425,87192,87193,87195,87197,87200,87202],{"class":427,"line":3610},[425,87194,55702],{"class":691},[425,87196,52192],{"class":701},[425,87198,87199],{"class":691},"-2",[425,87201,52247],{"class":1155},[425,87203,2307],{"class":701},[425,87205,87206,87208,87210,87212],{"class":427,"line":3616},[425,87207,62780],{"class":691},[425,87209,52192],{"class":701},[425,87211,62785],{"class":691},[425,87213,2307],{"class":701},[425,87215,87216],{"class":427,"line":3621},[425,87217,3187],{"class":701},[425,87219,87220],{"class":427,"line":8948},[425,87221,3400],{"emptyLinePlaceholder":1084},[425,87223,87224,87226,87229],{"class":427,"line":8972},[425,87225,86905],{"class":431},[425,87227,87228],{"class":431}," .body",[425,87230,16569],{"class":701},[425,87232,87233,87235,87237,87239],{"class":427,"line":8977},[425,87234,58041],{"class":691},[425,87236,52192],{"class":701},[425,87238,52347],{"class":691},[425,87240,2307],{"class":701},[425,87242,87243,87245,87247,87249,87251],{"class":427,"line":8983},[425,87244,55450],{"class":691},[425,87246,52192],{"class":701},[425,87248,1594],{"class":691},[425,87250,52247],{"class":1155},[425,87252,2307],{"class":701},[425,87254,87255],{"class":427,"line":9010},[425,87256,3187],{"class":701},[425,87258,87259],{"class":427,"line":9015},[425,87260,3400],{"emptyLinePlaceholder":1084},[425,87262,87263,87265,87268],{"class":427,"line":9021},[425,87264,86905],{"class":431},[425,87266,87267],{"class":431}," .footer",[425,87269,16569],{"class":701},[425,87271,87272,87274,87276,87278],{"class":427,"line":9033},[425,87273,55764],{"class":691},[425,87275,52192],{"class":701},[425,87277,52232],{"class":691},[425,87279,2307],{"class":701},[425,87281,87282,87284,87286,87288],{"class":427,"line":9045},[425,87283,55775],{"class":691},[425,87285,52192],{"class":701},[425,87287,52335],{"class":691},[425,87289,2307],{"class":701},[425,87291,87292,87294,87296,87298,87300],{"class":427,"line":9057},[425,87293,55450],{"class":691},[425,87295,52192],{"class":701},[425,87297,1594],{"class":691},[425,87299,52247],{"class":1155},[425,87301,2307],{"class":701},[425,87303,87304],{"class":427,"line":10715},[425,87305,3187],{"class":701},[425,87307,87308],{"class":427,"line":10740},[425,87309,3400],{"emptyLinePlaceholder":1084},[425,87311,87312,87314,87316,87318],{"class":427,"line":10763},[425,87313,86905],{"class":431},[425,87315,87267],{"class":431},[425,87317,2412],{"class":52055},[425,87319,16569],{"class":701},[425,87321,87322,87324,87326,87328,87330,87332,87334],{"class":427,"line":10787},[425,87323,55450],{"class":691},[425,87325,52192],{"class":701},[425,87327,1229],{"class":691},[425,87329,52247],{"class":1155},[425,87331,3083],{"class":691},[425,87333,52247],{"class":1155},[425,87335,2307],{"class":701},[425,87337,87338,87340,87342,87345],{"class":427,"line":10792},[425,87339,62476],{"class":691},[425,87341,52192],{"class":701},[425,87343,87344],{"class":691},"#ccc",[425,87346,2307],{"class":701},[425,87348,87349,87351,87353,87355],{"class":427,"line":10797},[425,87350,64725],{"class":691},[425,87352,52192],{"class":701},[425,87354,55492],{"class":691},[425,87356,2307],{"class":701},[425,87358,87359,87361,87363,87365],{"class":427,"line":10802},[425,87360,58171],{"class":691},[425,87362,52192],{"class":701},[425,87364,61597],{"class":691},[425,87366,2307],{"class":701},[425,87368,87369,87371,87373,87375,87377],{"class":427,"line":10811},[425,87370,55889],{"class":691},[425,87372,52192],{"class":701},[425,87374,1235],{"class":691},[425,87376,52247],{"class":1155},[425,87378,2307],{"class":701},[425,87380,87381,87383,87385,87387,87389],{"class":427,"line":10816},[425,87382,62505],{"class":691},[425,87384,52192],{"class":701},[425,87386,1594],{"class":691},[425,87388,52247],{"class":1155},[425,87390,2307],{"class":701},[425,87392,87393,87395,87397,87399,87401],{"class":427,"line":10822},[425,87394,55677],{"class":691},[425,87396,52192],{"class":701},[425,87398,1697],{"class":691},[425,87400,52247],{"class":1155},[425,87402,2307],{"class":701},[425,87404,87405],{"class":427,"line":10843},[425,87406,3187],{"class":701},[425,87408,87409],{"class":427,"line":10849},[425,87410,3400],{"emptyLinePlaceholder":1084},[425,87412,87413,87415,87417,87419,87422],{"class":427,"line":10863},[425,87414,86905],{"class":431},[425,87416,87267],{"class":431},[425,87418,2412],{"class":52055},[425,87420,87421],{"class":431},".submit",[425,87423,16569],{"class":701},[425,87425,87426,87428,87430,87433],{"class":427,"line":10869},[425,87427,55639],{"class":691},[425,87429,52192],{"class":701},[425,87431,87432],{"class":691},"#369",[425,87434,2307],{"class":701},[425,87436,87437],{"class":427,"line":10896},[425,87438,3187],{"class":701},[425,87440,87441,87443,87445],{"class":427,"line":10905},[425,87442,53172],{"class":701},[425,87444,1074],{"class":52055},[425,87446,52062],{"class":701},[425,87448,87449,87451,87453],{"class":427,"line":10911},[425,87450,52540],{"class":701},[425,87452,52089],{"class":52055},[425,87454,52062],{"class":701},[425,87456,87457],{"class":427,"line":10919},[425,87458,3400],{"emptyLinePlaceholder":1084},[425,87460,87461,87463,87465],{"class":427,"line":10924},[425,87462,2057],{"class":701},[425,87464,52555],{"class":52055},[425,87466,52062],{"class":701},[425,87468,87469,87471,87473,87475,87477,87480,87483,87485],{"class":427,"line":17601},[425,87470,52899],{"class":701},[425,87472,54642],{"class":52055},[425,87474,15956],{"class":431},[425,87476,1204],{"class":701},[425,87478,87479],{"class":435},"\"delete\"",[425,87481,87482],{"class":701},">删除\u003C\u002F",[425,87484,54642],{"class":52055},[425,87486,52062],{"class":701},[425,87488,87489,87491,87493,87495,87497,87500,87503,87505],{"class":427,"line":17607},[425,87490,52899],{"class":701},[425,87492,54642],{"class":52055},[425,87494,15956],{"class":431},[425,87496,1204],{"class":701},[425,87498,87499],{"class":435},"\"login\"",[425,87501,87502],{"class":701},">登录\u003C\u002F",[425,87504,54642],{"class":52055},[425,87506,52062],{"class":701},[425,87508,87509,87511,87513],{"class":427,"line":17630},[425,87510,52899],{"class":701},[425,87512,52568],{"class":52055},[425,87514,52062],{"class":701},[425,87516,87517],{"class":427,"line":17636},[425,87518,87519],{"class":1216},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[425,87521,87522,87524,87527,87529,87531,87533,87535,87537,87540,87542,87544],{"class":427,"line":17659},[425,87523,70839],{"class":1155},[425,87525,87526],{"class":431}," Modal",[425,87528,1159],{"class":701},[425,87530,52162],{"class":6216},[425,87532,14563],{"class":1155},[425,87534,70685],{"class":435},[425,87536,13434],{"class":701},[425,87538,87539],{"class":6216},"message",[425,87541,14563],{"class":1155},[425,87543,70685],{"class":435},[425,87545,13441],{"class":701},[425,87547,87548],{"class":427,"line":17673},[425,87549,87550],{"class":1216},"      \u002F\u002F 创建Model 模态框盒子\n",[425,87552,87553],{"class":427,"line":17693},[425,87554,87555],{"class":1216},"      \u002F\u002F 1.1 创建div标签\n",[425,87557,87558,87560,87563,87565,87567,87569,87571,87573],{"class":427,"line":17699},[425,87559,70806],{"class":691},[425,87561,87562],{"class":701},".modalBox ",[425,87564,1204],{"class":1155},[425,87566,55151],{"class":701},[425,87568,70906],{"class":431},[425,87570,1159],{"class":701},[425,87572,82686],{"class":435},[425,87574,1165],{"class":701},[425,87576,87577],{"class":427,"line":17710},[425,87578,87579],{"class":1216},"      \u002F\u002F 1.2 给div 添加类名为model\n",[425,87581,87582,87584,87587,87589],{"class":427,"line":17733},[425,87583,70806],{"class":691},[425,87585,87586],{"class":701},".modalBox.className ",[425,87588,1204],{"class":1155},[425,87590,87591],{"class":435}," 'modal'\n",[425,87593,87594],{"class":427,"line":17755},[425,87595,87596],{"class":1216},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[425,87598,87599,87601,87604,87606],{"class":427,"line":17760},[425,87600,70806],{"class":691},[425,87602,87603],{"class":701},".modalBox.innerHTML ",[425,87605,1204],{"class":1155},[425,87607,70923],{"class":435},[425,87609,87610,87613,87615],{"class":427,"line":17766},[425,87611,87612],{"class":435},"        \u003Cdiv class=\"header\">${",[425,87614,52162],{"class":701},[425,87616,87617],{"class":435},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[425,87619,87620,87623,87625],{"class":427,"line":17780},[425,87621,87622],{"class":435},"        \u003Cdiv class=\"body\">${",[425,87624,87539],{"class":701},[425,87626,87627],{"class":435},"}\u003C\u002Fdiv>\n",[425,87629,87630],{"class":427,"line":17793},[425,87631,87632],{"class":435},"      `\n",[425,87634,87635],{"class":427,"line":17798},[425,87636,87637],{"class":1216},"      \u002F\u002F console.log(this.modalBox)\n",[425,87639,87640],{"class":427,"line":17812},[425,87641,3187],{"class":701},[425,87643,87644],{"class":427,"line":17817},[425,87645,87646],{"class":1216},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[425,87648,87649],{"class":427,"line":17823},[425,87650,87651],{"class":1216},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[425,87653,87654],{"class":427,"line":17828},[425,87655,87656],{"class":1216},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[425,87658,87659,87662,87664,87666,87668,87671,87673,87675],{"class":427,"line":17842},[425,87660,87661],{"class":691},"    Modal",[425,87663,1706],{"class":701},[425,87665,86334],{"class":691},[425,87667,1706],{"class":701},[425,87669,87670],{"class":431},"open",[425,87672,14563],{"class":1155},[425,87674,59673],{"class":1155},[425,87676,55207],{"class":701},[425,87678,87679],{"class":427,"line":17847},[425,87680,87681],{"class":1216},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[425,87683,87684,87686,87689,87691,87693,87695,87697,87700],{"class":427,"line":17852},[425,87685,58983],{"class":1155},[425,87687,87688],{"class":691}," box",[425,87690,14563],{"class":1155},[425,87692,55151],{"class":701},[425,87694,55154],{"class":431},[425,87696,1159],{"class":701},[425,87698,87699],{"class":435},"'.modal'",[425,87701,1165],{"class":701},[425,87703,87704],{"class":427,"line":17866},[425,87705,87706],{"class":1216},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[425,87708,87709,87712,87714,87717,87719],{"class":427,"line":17878},[425,87710,87711],{"class":701},"      box ",[425,87713,2717],{"class":1155},[425,87715,87716],{"class":701}," box.",[425,87718,57761],{"class":431},[425,87720,2976],{"class":701},[425,87722,87723],{"class":427,"line":17883},[425,87724,87725],{"class":1216},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[425,87727,87728],{"class":427,"line":17896},[425,87729,87730],{"class":1216},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[425,87732,87733],{"class":427,"line":17901},[425,87734,87735],{"class":1216},"      \u002F\u002F append可以增加对象\n",[425,87737,87738,87741,87744,87746,87749],{"class":427,"line":17906},[425,87739,87740],{"class":701},"      document.body.",[425,87742,87743],{"class":431},"append",[425,87745,1159],{"class":701},[425,87747,87748],{"class":691},"this",[425,87750,87751],{"class":701},".modalBox)\n",[425,87753,87754],{"class":427,"line":17911},[425,87755,3400],{"emptyLinePlaceholder":1084},[425,87757,87758],{"class":427,"line":17924},[425,87759,87760],{"class":1216},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[425,87762,87763,87765,87768,87770,87772,87775,87777,87779,87781,87783,87786,87788],{"class":427,"line":17929},[425,87764,70806],{"class":691},[425,87766,87767],{"class":701},".modalBox.",[425,87769,55154],{"class":431},[425,87771,1159],{"class":701},[425,87773,87774],{"class":435},"'i'",[425,87776,31581],{"class":701},[425,87778,58568],{"class":431},[425,87780,1159],{"class":701},[425,87782,58573],{"class":435},[425,87784,87785],{"class":701},", () ",[425,87787,85477],{"class":1155},[425,87789,16569],{"class":701},[425,87791,87792],{"class":427,"line":33388},[425,87793,87794],{"class":1216},"        \u002F\u002F 这个地方需要用到箭头函数\n",[425,87796,87797],{"class":427,"line":33394},[425,87798,87799],{"class":1216},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[425,87801,87802],{"class":427,"line":33400},[425,87803,87804],{"class":1216},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[425,87806,87807,87809,87811,87814],{"class":427,"line":33406},[425,87808,65481],{"class":691},[425,87810,1706],{"class":701},[425,87812,87813],{"class":431},"close",[425,87815,2976],{"class":701},[425,87817,87818],{"class":427,"line":33412},[425,87819,65570],{"class":701},[425,87821,87822],{"class":427,"line":33423},[425,87823,3187],{"class":701},[425,87825,87826],{"class":427,"line":33429},[425,87827,3400],{"emptyLinePlaceholder":1084},[425,87829,87830],{"class":427,"line":33449},[425,87831,87832],{"class":1216},"    \u002F\u002F 测试一下 点击 删除按钮\n",[425,87834,87835,87837,87839,87841,87844,87846,87848,87850,87852,87854,87856],{"class":427,"line":33455},[425,87836,53162],{"class":701},[425,87838,55154],{"class":431},[425,87840,1159],{"class":701},[425,87842,87843],{"class":435},"'#delete'",[425,87845,31581],{"class":701},[425,87847,58568],{"class":431},[425,87849,1159],{"class":701},[425,87851,58573],{"class":435},[425,87853,87785],{"class":701},[425,87855,85477],{"class":1155},[425,87857,16569],{"class":701},[425,87859,87860],{"class":427,"line":33466},[425,87861,87862],{"class":1216},"      \u002F\u002F 先调用Model构造函数\n",[425,87864,87865,87867,87870,87872,87874,87876,87878,87881,87883,87886],{"class":427,"line":33472},[425,87866,58983],{"class":1155},[425,87868,87869],{"class":691}," del",[425,87871,14563],{"class":1155},[425,87873,12577],{"class":1155},[425,87875,87526],{"class":431},[425,87877,1159],{"class":701},[425,87879,87880],{"class":435},"'温馨的提示'",[425,87882,13434],{"class":701},[425,87884,87885],{"class":435},"'您没有删除权限操作'",[425,87887,1165],{"class":701},[425,87889,87890],{"class":427,"line":33478},[425,87891,87892],{"class":1216},"      \u002F\u002F 实例对象调用open方法\n",[425,87894,87895,87898,87900],{"class":427,"line":33484},[425,87896,87897],{"class":701},"      del.",[425,87899,87670],{"class":431},[425,87901,2976],{"class":701},[425,87903,87904],{"class":427,"line":33490},[425,87905,34216],{"class":701},[425,87907,87908],{"class":427,"line":33496},[425,87909,87910],{"class":1216},"    \u002F\u002F 测试一下 点击 登录按钮\n",[425,87912,87913,87915,87917,87919,87922,87924,87926,87928,87930,87932,87934],{"class":427,"line":33502},[425,87914,53162],{"class":701},[425,87916,55154],{"class":431},[425,87918,1159],{"class":701},[425,87920,87921],{"class":435},"'#login'",[425,87923,31581],{"class":701},[425,87925,58568],{"class":431},[425,87927,1159],{"class":701},[425,87929,58573],{"class":435},[425,87931,87785],{"class":701},[425,87933,85477],{"class":1155},[425,87935,16569],{"class":701},[425,87937,87938],{"class":427,"line":33508},[425,87939,87862],{"class":1216},[425,87941,87942,87944,87947,87949,87951,87953,87955,87958,87960,87963],{"class":427,"line":33528},[425,87943,58983],{"class":1155},[425,87945,87946],{"class":691}," log",[425,87948,14563],{"class":1155},[425,87950,12577],{"class":1155},[425,87952,87526],{"class":431},[425,87954,1159],{"class":701},[425,87956,87957],{"class":435},"'友情提示'",[425,87959,13434],{"class":701},[425,87961,87962],{"class":435},"'您还没有登录呢'",[425,87964,1165],{"class":701},[425,87966,87967],{"class":427,"line":33534},[425,87968,87892],{"class":1216},[425,87970,87971,87974,87976],{"class":427,"line":33550},[425,87972,87973],{"class":701},"      log.",[425,87975,87670],{"class":431},[425,87977,2976],{"class":701},[425,87979,87980],{"class":427,"line":33556},[425,87981,34216],{"class":701},[425,87983,87984],{"class":427,"line":33570},[425,87985,87986],{"class":1216},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[425,87988,87989,87991,87993,87995,87997,87999,88001,88003],{"class":427,"line":33576},[425,87990,87661],{"class":691},[425,87992,1706],{"class":701},[425,87994,86334],{"class":691},[425,87996,1706],{"class":701},[425,87998,87813],{"class":431},[425,88000,14563],{"class":1155},[425,88002,59673],{"class":1155},[425,88004,55207],{"class":701},[425,88006,88007,88009,88011,88013],{"class":427,"line":33591},[425,88008,70806],{"class":691},[425,88010,87767],{"class":701},[425,88012,57761],{"class":431},[425,88014,2976],{"class":701},[425,88016,88017],{"class":427,"line":33597},[425,88018,3187],{"class":701},[425,88020,88021,88023,88025],{"class":427,"line":33606},[425,88022,53172],{"class":701},[425,88024,52568],{"class":52055},[425,88026,52062],{"class":701},[425,88028,88029,88031,88033],{"class":427,"line":33612},[425,88030,52540],{"class":701},[425,88032,52555],{"class":52055},[425,88034,52062],{"class":701},[425,88036,88037],{"class":427,"line":33621},[425,88038,3400],{"emptyLinePlaceholder":1084},[425,88040,88041,88043,88045],{"class":427,"line":33627},[425,88042,52540],{"class":701},[425,88044,51390],{"class":52055},[425,88046,52062],{"class":701},[19,88048,88049],{},[393,88050],{"alt":395,"src":88051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[1099,88053,88055],{"id":88054},"_414-深浅拷贝","4.14 深浅拷贝",[14,88057,88059],{"id":88058},"_4141-浅拷贝","4.14.1 浅拷贝",[19,88061,88062],{},[393,88063],{"alt":395,"src":88064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,88066,88067],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,88069,88070],{},[393,88071],{"alt":395,"src":88072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,88074,88075],{},[393,88076],{"alt":395,"src":88077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,88079,88080],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,88082,88083],{},[393,88084],{"alt":395,"src":88085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,88087,12331],{},[19,88089,88090],{},[393,88091],{"alt":395,"src":88092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[14,88094,88096],{"id":88095},"_4142-深拷贝","4.14.2 深拷贝",[19,88098,88099],{},"深拷贝：拷贝的是对象，不是地址",[19,88101,88102],{},"常用的三种方法：",[972,88104,88105,88108,88111],{},[450,88106,88107],{},"通过递归实现深拷贝",[450,88109,88110],{},"lodash\u002FcloneDeep",[450,88112,88113],{},"通过JSON.stringify()实现",[22995,88115,88117],{"id":88116},"_41421-递归函数","4.14.2.1 递归函数",[19,88119,88120],{},[393,88121],{"alt":395,"src":88122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[972,88124,88125],{},[450,88126,88127],{},"死递归占溢出：",[416,88129,88131],{"className":53822,"code":88130,"language":53824,"meta":395,"style":395},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[422,88132,88133,88141,88149,88153,88158,88162,88167,88175],{"__ignoreMap":395},[425,88134,88135,88137,88139],{"class":427,"line":428},[425,88136,2057],{"class":701},[425,88138,52555],{"class":52055},[425,88140,52062],{"class":701},[425,88142,88143,88145,88147],{"class":427,"line":698},[425,88144,52899],{"class":701},[425,88146,52568],{"class":52055},[425,88148,52062],{"class":701},[425,88150,88151],{"class":427,"line":710},[425,88152,77898],{"class":701},[425,88154,88155],{"class":427,"line":721},[425,88156,88157],{"class":701},"      fn()\n",[425,88159,88160],{"class":427,"line":735},[425,88161,3187],{"class":701},[425,88163,88164],{"class":427,"line":743},[425,88165,88166],{"class":701},"    fn()\n",[425,88168,88169,88171,88173],{"class":427,"line":751},[425,88170,53172],{"class":701},[425,88172,52568],{"class":52055},[425,88174,52062],{"class":701},[425,88176,88177,88179,88181],{"class":427,"line":759},[425,88178,52540],{"class":701},[425,88180,52555],{"class":52055},[425,88182,52062],{"class":701},[972,88184,88185],{"start":698},[450,88186,88187],{},"递归函数要加判断条件：",[19,88189,88190],{},[393,88191],{"alt":395,"src":88192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[972,88194,88195],{"start":710},[450,88196,88197],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[416,88199,88201],{"className":51388,"code":88200,"language":51390,"meta":395,"style":395},"\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",[422,88202,88203,88213,88227,88231,88239,88253,88273,88285,88293,88297,88305,88317,88325,88333,88358,88370,88374,88381,88389,88397,88401],{"__ignoreMap":395},[425,88204,88205,88207,88209,88211],{"class":427,"line":428},[425,88206,52052],{"class":701},[425,88208,52056],{"class":52055},[425,88210,52059],{"class":431},[425,88212,52062],{"class":701},[425,88214,88215,88217,88219,88221,88223,88225],{"class":427,"line":698},[425,88216,2057],{"class":701},[425,88218,51390],{"class":52055},[425,88220,52071],{"class":431},[425,88222,1204],{"class":701},[425,88224,52076],{"class":435},[425,88226,52062],{"class":701},[425,88228,88229],{"class":427,"line":710},[425,88230,3400],{"emptyLinePlaceholder":1084},[425,88232,88233,88235,88237],{"class":427,"line":721},[425,88234,2057],{"class":701},[425,88236,52089],{"class":52055},[425,88238,52062],{"class":701},[425,88240,88241,88243,88245,88247,88249,88251],{"class":427,"line":735},[425,88242,52899],{"class":701},[425,88244,52099],{"class":52055},[425,88246,52102],{"class":431},[425,88248,1204],{"class":701},[425,88250,52107],{"class":435},[425,88252,52062],{"class":701},[425,88254,88255,88257,88259,88261,88263,88265,88267,88269,88271],{"class":427,"line":743},[425,88256,52899],{"class":701},[425,88258,52099],{"class":52055},[425,88260,15917],{"class":431},[425,88262,1204],{"class":701},[425,88264,52146],{"class":435},[425,88266,52126],{"class":431},[425,88268,1204],{"class":701},[425,88270,52153],{"class":435},[425,88272,52062],{"class":701},[425,88274,88275,88277,88279,88281,88283],{"class":427,"line":751},[425,88276,52899],{"class":701},[425,88278,52162],{"class":52055},[425,88280,52165],{"class":701},[425,88282,52162],{"class":52055},[425,88284,52062],{"class":701},[425,88286,88287,88289,88291],{"class":427,"line":759},[425,88288,52540],{"class":701},[425,88290,52089],{"class":52055},[425,88292,52062],{"class":701},[425,88294,88295],{"class":427,"line":770},[425,88296,3400],{"emptyLinePlaceholder":1084},[425,88298,88299,88301,88303],{"class":427,"line":780},[425,88300,2057],{"class":701},[425,88302,52555],{"class":52055},[425,88304,52062],{"class":701},[425,88306,88307,88309,88311,88313,88315],{"class":427,"line":790},[425,88308,52899],{"class":701},[425,88310,52366],{"class":52055},[425,88312,56069],{"class":701},[425,88314,52366],{"class":52055},[425,88316,52062],{"class":701},[425,88318,88319,88321,88323],{"class":427,"line":805},[425,88320,52899],{"class":701},[425,88322,52568],{"class":52055},[425,88324,52062],{"class":701},[425,88326,88327,88329,88331],{"class":427,"line":818},[425,88328,70839],{"class":1155},[425,88330,74528],{"class":431},[425,88332,11852],{"class":701},[425,88334,88335,88337,88339,88341,88343,88345,88347,88349,88351,88353,88356],{"class":427,"line":831},[425,88336,56526],{"class":701},[425,88338,55154],{"class":431},[425,88340,1159],{"class":701},[425,88342,82686],{"class":435},[425,88344,75004],{"class":701},[425,88346,1204],{"class":1155},[425,88348,12577],{"class":1155},[425,88350,74544],{"class":431},[425,88352,18258],{"class":701},[425,88354,88355],{"class":431},"toLocaleString",[425,88357,2976],{"class":701},[425,88359,88360,88363,88366,88368],{"class":427,"line":841},[425,88361,88362],{"class":431},"      setTimeout",[425,88364,88365],{"class":701},"(getTime, ",[425,88367,7410],{"class":691},[425,88369,1165],{"class":701},[425,88371,88372],{"class":427,"line":852},[425,88373,3187],{"class":701},[425,88375,88376,88379],{"class":427,"line":862},[425,88377,88378],{"class":431},"    getTime",[425,88380,2976],{"class":701},[425,88382,88383,88385,88387],{"class":427,"line":878},[425,88384,53172],{"class":701},[425,88386,52568],{"class":52055},[425,88388,52062],{"class":701},[425,88390,88391,88393,88395],{"class":427,"line":914},[425,88392,52540],{"class":701},[425,88394,52555],{"class":52055},[425,88396,52062],{"class":701},[425,88398,88399],{"class":427,"line":943},[425,88400,3400],{"emptyLinePlaceholder":1084},[425,88402,88403,88405,88407],{"class":427,"line":956},[425,88404,52540],{"class":701},[425,88406,51390],{"class":52055},[425,88408,52062],{"class":701},[19,88410,88411],{},[393,88412],{"alt":395,"src":88413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[972,88415,88416],{"start":721},[450,88417,88107],{},[19,88419,88420],{},[393,88421],{"alt":395,"src":88422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,88424,88425],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,88427,39944],{},[19,88429,88430],{},"这个是简易版的递归函数深拷贝",[19,88432,88433],{},"一定要注意先数组再对象，因为万物皆可对象",[416,88435,88437],{"className":51388,"code":88436,"language":51390,"meta":395,"style":395},"\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",[422,88438,88439,88449,88463,88467,88475,88489,88509,88521,88529,88533,88541,88549,88559,88568,88576,88592,88596,88604,88608,88612,88624,88629,88648,88664,88669,88674,88679,88694,88699,88704,88713,88721,88738,88746,88752,88760,88765,88770,88779,88783,88787,88791,88802,88811,88821,88835,88845,88853,88861,88869,88873],{"__ignoreMap":395},[425,88440,88441,88443,88445,88447],{"class":427,"line":428},[425,88442,52052],{"class":701},[425,88444,52056],{"class":52055},[425,88446,52059],{"class":431},[425,88448,52062],{"class":701},[425,88450,88451,88453,88455,88457,88459,88461],{"class":427,"line":698},[425,88452,2057],{"class":701},[425,88454,51390],{"class":52055},[425,88456,52071],{"class":431},[425,88458,1204],{"class":701},[425,88460,52076],{"class":435},[425,88462,52062],{"class":701},[425,88464,88465],{"class":427,"line":710},[425,88466,3400],{"emptyLinePlaceholder":1084},[425,88468,88469,88471,88473],{"class":427,"line":721},[425,88470,2057],{"class":701},[425,88472,52089],{"class":52055},[425,88474,52062],{"class":701},[425,88476,88477,88479,88481,88483,88485,88487],{"class":427,"line":735},[425,88478,52899],{"class":701},[425,88480,52099],{"class":52055},[425,88482,52102],{"class":431},[425,88484,1204],{"class":701},[425,88486,52107],{"class":435},[425,88488,52062],{"class":701},[425,88490,88491,88493,88495,88497,88499,88501,88503,88505,88507],{"class":427,"line":743},[425,88492,52899],{"class":701},[425,88494,52099],{"class":52055},[425,88496,15917],{"class":431},[425,88498,1204],{"class":701},[425,88500,52146],{"class":435},[425,88502,52126],{"class":431},[425,88504,1204],{"class":701},[425,88506,52153],{"class":435},[425,88508,52062],{"class":701},[425,88510,88511,88513,88515,88517,88519],{"class":427,"line":751},[425,88512,52899],{"class":701},[425,88514,52162],{"class":52055},[425,88516,52165],{"class":701},[425,88518,52162],{"class":52055},[425,88520,52062],{"class":701},[425,88522,88523,88525,88527],{"class":427,"line":759},[425,88524,52540],{"class":701},[425,88526,52089],{"class":52055},[425,88528,52062],{"class":701},[425,88530,88531],{"class":427,"line":770},[425,88532,3400],{"emptyLinePlaceholder":1084},[425,88534,88535,88537,88539],{"class":427,"line":780},[425,88536,2057],{"class":701},[425,88538,52555],{"class":52055},[425,88540,52062],{"class":701},[425,88542,88543,88545,88547],{"class":427,"line":790},[425,88544,52899],{"class":701},[425,88546,52568],{"class":52055},[425,88548,52062],{"class":701},[425,88550,88551,88553,88555,88557],{"class":427,"line":805},[425,88552,12220],{"class":1155},[425,88554,70726],{"class":691},[425,88556,14563],{"class":1155},[425,88558,16569],{"class":701},[425,88560,88561,88563,88566],{"class":427,"line":818},[425,88562,72371],{"class":701},[425,88564,88565],{"class":435},"'pink'",[425,88567,32221],{"class":701},[425,88569,88570,88572,88574],{"class":427,"line":831},[425,88571,72381],{"class":701},[425,88573,1798],{"class":691},[425,88575,32221],{"class":701},[425,88577,88578,88581,88584,88586,88589],{"class":427,"line":841},[425,88579,88580],{"class":701},"      hobby: [",[425,88582,88583],{"class":435},"'乒乓球'",[425,88585,13434],{"class":701},[425,88587,88588],{"class":435},"'足球'",[425,88590,88591],{"class":701},"],\n",[425,88593,88594],{"class":427,"line":852},[425,88595,78627],{"class":701},[425,88597,88598,88601],{"class":427,"line":862},[425,88599,88600],{"class":701},"        baby: ",[425,88602,88603],{"class":435},"'小pink'\n",[425,88605,88606],{"class":427,"line":878},[425,88607,53153],{"class":701},[425,88609,88610],{"class":427,"line":914},[425,88611,3187],{"class":701},[425,88613,88614,88616,88619,88621],{"class":427,"line":943},[425,88615,12220],{"class":1155},[425,88617,88618],{"class":691}," o",[425,88620,14563],{"class":1155},[425,88622,88623],{"class":701}," {}\n",[425,88625,88626],{"class":427,"line":956},[425,88627,88628],{"class":1216},"    \u002F\u002F 拷贝函数\n",[425,88630,88631,88633,88636,88638,88641,88643,88646],{"class":427,"line":964},[425,88632,70839],{"class":1155},[425,88634,88635],{"class":431}," deepCopy",[425,88637,1159],{"class":701},[425,88639,88640],{"class":6216},"newObj",[425,88642,13434],{"class":701},[425,88644,88645],{"class":6216},"oldObj",[425,88647,13441],{"class":701},[425,88649,88650,88652,88654,88656,88659,88661],{"class":427,"line":2733},[425,88651,53039],{"class":1155},[425,88653,2664],{"class":701},[425,88655,52602],{"class":1155},[425,88657,88658],{"class":701}," k ",[425,88660,27034],{"class":1155},[425,88662,88663],{"class":701}," oldObj) {\n",[425,88665,88666],{"class":427,"line":2750},[425,88667,88668],{"class":1216},"        \u002F\u002F 处理数组的问题\n",[425,88670,88671],{"class":427,"line":2755},[425,88672,88673],{"class":1216},"        \u002F\u002F 判断是否属于数组\n",[425,88675,88676],{"class":427,"line":2760},[425,88677,88678],{"class":1216},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[425,88680,88681,88683,88686,88689,88692],{"class":427,"line":2765},[425,88682,3497],{"class":1155},[425,88684,88685],{"class":701}," (oldObj[k] ",[425,88687,88688],{"class":1155},"instanceof",[425,88690,88691],{"class":431}," Array",[425,88693,13441],{"class":701},[425,88695,88696],{"class":427,"line":2779},[425,88697,88698],{"class":1216},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[425,88700,88701],{"class":427,"line":2784},[425,88702,88703],{"class":1216},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[425,88705,88706,88709,88711],{"class":427,"line":3577},[425,88707,88708],{"class":701},"          newObj[k] ",[425,88710,1204],{"class":1155},[425,88712,52593],{"class":701},[425,88714,88715,88718],{"class":427,"line":3591},[425,88716,88717],{"class":431},"          deepCopy",[425,88719,88720],{"class":701},"(newObj[k], oldObj[k])\n",[425,88722,88723,88725,88727,88729,88731,88733,88736],{"class":427,"line":3599},[425,88724,80835],{"class":701},[425,88726,2703],{"class":1155},[425,88728,2706],{"class":1155},[425,88730,88685],{"class":701},[425,88732,88688],{"class":1155},[425,88734,88735],{"class":431}," Object",[425,88737,13441],{"class":701},[425,88739,88740,88742,88744],{"class":427,"line":3604},[425,88741,88708],{"class":701},[425,88743,1204],{"class":1155},[425,88745,88623],{"class":701},[425,88747,88748,88750],{"class":427,"line":3610},[425,88749,88717],{"class":431},[425,88751,88720],{"class":701},[425,88753,88754,88756,88758],{"class":427,"line":3616},[425,88755,80835],{"class":701},[425,88757,2703],{"class":1155},[425,88759,16569],{"class":701},[425,88761,88762],{"class":427,"line":3621},[425,88763,88764],{"class":1216},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[425,88766,88767],{"class":427,"line":8948},[425,88768,88769],{"class":1216},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[425,88771,88772,88774,88776],{"class":427,"line":8972},[425,88773,88708],{"class":701},[425,88775,1204],{"class":1155},[425,88777,88778],{"class":701}," oldObj[k]\n",[425,88780,88781],{"class":427,"line":8977},[425,88782,3529],{"class":701},[425,88784,88785],{"class":427,"line":8983},[425,88786,53153],{"class":701},[425,88788,88789],{"class":427,"line":9010},[425,88790,3187],{"class":701},[425,88792,88793,88796,88799],{"class":427,"line":9015},[425,88794,88795],{"class":431},"    deepCopy",[425,88797,88798],{"class":701},"(o, obj) ",[425,88800,88801],{"class":1216},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[425,88803,88804,88806,88808],{"class":427,"line":9021},[425,88805,74508],{"class":701},[425,88807,59002],{"class":431},[425,88809,88810],{"class":701},"(o)\n",[425,88812,88813,88816,88818],{"class":427,"line":9033},[425,88814,88815],{"class":701},"    o.age ",[425,88817,1204],{"class":1155},[425,88819,88820],{"class":691}," 20\n",[425,88822,88823,88826,88828,88830,88832],{"class":427,"line":9045},[425,88824,88825],{"class":701},"    o.hobby[",[425,88827,1341],{"class":691},[425,88829,5443],{"class":701},[425,88831,1204],{"class":1155},[425,88833,88834],{"class":435}," '篮球'\n",[425,88836,88837,88840,88842],{"class":427,"line":9057},[425,88838,88839],{"class":701},"    o.family ",[425,88841,1204],{"class":1155},[425,88843,88844],{"class":435}," '老pink'\n",[425,88846,88847,88849,88851],{"class":427,"line":10715},[425,88848,74508],{"class":701},[425,88850,59002],{"class":431},[425,88852,70791],{"class":701},[425,88854,88855,88857,88859],{"class":427,"line":10740},[425,88856,53172],{"class":701},[425,88858,52568],{"class":52055},[425,88860,52062],{"class":701},[425,88862,88863,88865,88867],{"class":427,"line":10763},[425,88864,52540],{"class":701},[425,88866,52555],{"class":52055},[425,88868,52062],{"class":701},[425,88870,88871],{"class":427,"line":10787},[425,88872,3400],{"emptyLinePlaceholder":1084},[425,88874,88875,88877,88879],{"class":427,"line":10792},[425,88876,52540],{"class":701},[425,88878,51390],{"class":52055},[425,88880,52062],{"class":701},[19,88882,88883],{},[393,88884],{"alt":395,"src":88885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22995,88887,88889,88890],{"id":88888},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[400,88891,88892],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,88894,88895],{},[22,88896,88897],{"href":88897,"rel":88898},"https:\u002F\u002Fwww.lodashjs.com\u002F",[26],[19,88900,88901],{},"lodash里边的方法都要加上一个下划线_",[19,88903,88904],{},"_.cloneDeep()",[416,88906,88908],{"className":51388,"code":88907,"language":51390,"meta":395,"style":395},"\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",[422,88909,88910,88920,88934,88938,88946,88960,88980,88992,89000,89004,89012,89017,89036,89044,89054,89062,89070,89082,89086,89092,89096,89100,89116,89124,89133,89141,89149,89157,89161],{"__ignoreMap":395},[425,88911,88912,88914,88916,88918],{"class":427,"line":428},[425,88913,52052],{"class":701},[425,88915,52056],{"class":52055},[425,88917,52059],{"class":431},[425,88919,52062],{"class":701},[425,88921,88922,88924,88926,88928,88930,88932],{"class":427,"line":698},[425,88923,2057],{"class":701},[425,88925,51390],{"class":52055},[425,88927,52071],{"class":431},[425,88929,1204],{"class":701},[425,88931,52076],{"class":435},[425,88933,52062],{"class":701},[425,88935,88936],{"class":427,"line":710},[425,88937,3400],{"emptyLinePlaceholder":1084},[425,88939,88940,88942,88944],{"class":427,"line":721},[425,88941,2057],{"class":701},[425,88943,52089],{"class":52055},[425,88945,52062],{"class":701},[425,88947,88948,88950,88952,88954,88956,88958],{"class":427,"line":735},[425,88949,52899],{"class":701},[425,88951,52099],{"class":52055},[425,88953,52102],{"class":431},[425,88955,1204],{"class":701},[425,88957,52107],{"class":435},[425,88959,52062],{"class":701},[425,88961,88962,88964,88966,88968,88970,88972,88974,88976,88978],{"class":427,"line":743},[425,88963,52899],{"class":701},[425,88965,52099],{"class":52055},[425,88967,15917],{"class":431},[425,88969,1204],{"class":701},[425,88971,52146],{"class":435},[425,88973,52126],{"class":431},[425,88975,1204],{"class":701},[425,88977,52153],{"class":435},[425,88979,52062],{"class":701},[425,88981,88982,88984,88986,88988,88990],{"class":427,"line":751},[425,88983,52899],{"class":701},[425,88985,52162],{"class":52055},[425,88987,52165],{"class":701},[425,88989,52162],{"class":52055},[425,88991,52062],{"class":701},[425,88993,88994,88996,88998],{"class":427,"line":759},[425,88995,52540],{"class":701},[425,88997,52089],{"class":52055},[425,88999,52062],{"class":701},[425,89001,89002],{"class":427,"line":770},[425,89003,3400],{"emptyLinePlaceholder":1084},[425,89005,89006,89008,89010],{"class":427,"line":780},[425,89007,2057],{"class":701},[425,89009,52555],{"class":52055},[425,89011,52062],{"class":701},[425,89013,89014],{"class":427,"line":790},[425,89015,89016],{"class":1216},"  \u003C!-- 先引用这个库 -->\n",[425,89018,89019,89021,89023,89025,89027,89030,89032,89034],{"class":427,"line":805},[425,89020,52899],{"class":701},[425,89022,52568],{"class":52055},[425,89024,55994],{"class":431},[425,89026,1204],{"class":701},[425,89028,89029],{"class":435},"\"lodash.min.js\"",[425,89031,56069],{"class":701},[425,89033,52568],{"class":52055},[425,89035,52062],{"class":701},[425,89037,89038,89040,89042],{"class":427,"line":818},[425,89039,52899],{"class":701},[425,89041,52568],{"class":52055},[425,89043,52062],{"class":701},[425,89045,89046,89048,89050,89052],{"class":427,"line":831},[425,89047,12220],{"class":1155},[425,89049,70726],{"class":691},[425,89051,14563],{"class":1155},[425,89053,16569],{"class":701},[425,89055,89056,89058,89060],{"class":427,"line":841},[425,89057,72371],{"class":701},[425,89059,88565],{"class":435},[425,89061,32221],{"class":701},[425,89063,89064,89066,89068],{"class":427,"line":852},[425,89065,72381],{"class":701},[425,89067,1798],{"class":691},[425,89069,32221],{"class":701},[425,89071,89072,89074,89076,89078,89080],{"class":427,"line":862},[425,89073,88580],{"class":701},[425,89075,88583],{"class":435},[425,89077,13434],{"class":701},[425,89079,88588],{"class":435},[425,89081,88591],{"class":701},[425,89083,89084],{"class":427,"line":878},[425,89085,78627],{"class":701},[425,89087,89088,89090],{"class":427,"line":914},[425,89089,88600],{"class":701},[425,89091,88603],{"class":435},[425,89093,89094],{"class":427,"line":943},[425,89095,53153],{"class":701},[425,89097,89098],{"class":427,"line":956},[425,89099,3187],{"class":701},[425,89101,89102,89104,89106,89108,89111,89114],{"class":427,"line":964},[425,89103,12220],{"class":1155},[425,89105,88618],{"class":691},[425,89107,14563],{"class":1155},[425,89109,89110],{"class":701}," _.",[425,89112,89113],{"class":431},"cloneDeep",[425,89115,70791],{"class":701},[425,89117,89118,89120,89122],{"class":427,"line":2733},[425,89119,74508],{"class":701},[425,89121,59002],{"class":431},[425,89123,88810],{"class":701},[425,89125,89126,89129,89131],{"class":427,"line":2750},[425,89127,89128],{"class":701},"    o.family.baby ",[425,89130,1204],{"class":1155},[425,89132,88844],{"class":435},[425,89134,89135,89137,89139],{"class":427,"line":2755},[425,89136,74508],{"class":701},[425,89138,59002],{"class":431},[425,89140,70791],{"class":701},[425,89142,89143,89145,89147],{"class":427,"line":2760},[425,89144,53172],{"class":701},[425,89146,52568],{"class":52055},[425,89148,52062],{"class":701},[425,89150,89151,89153,89155],{"class":427,"line":2765},[425,89152,52540],{"class":701},[425,89154,52555],{"class":52055},[425,89156,52062],{"class":701},[425,89158,89159],{"class":427,"line":2779},[425,89160,3400],{"emptyLinePlaceholder":1084},[425,89162,89163,89165,89167],{"class":427,"line":2784},[425,89164,52540],{"class":701},[425,89166,51390],{"class":52055},[425,89168,52062],{"class":701},[19,89170,89171],{},[393,89172],{"alt":395,"src":89173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22995,89175,89177],{"id":89176},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[416,89179,89181],{"className":51388,"code":89180,"language":51390,"meta":395,"style":395},"\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",[422,89182,89183,89193,89207,89211,89219,89233,89253,89265,89273,89277,89285,89293,89303,89311,89319,89331,89335,89341,89345,89349,89354,89359,89364,89390,89398,89407,89415,89423,89431,89435],{"__ignoreMap":395},[425,89184,89185,89187,89189,89191],{"class":427,"line":428},[425,89186,52052],{"class":701},[425,89188,52056],{"class":52055},[425,89190,52059],{"class":431},[425,89192,52062],{"class":701},[425,89194,89195,89197,89199,89201,89203,89205],{"class":427,"line":698},[425,89196,2057],{"class":701},[425,89198,51390],{"class":52055},[425,89200,52071],{"class":431},[425,89202,1204],{"class":701},[425,89204,52076],{"class":435},[425,89206,52062],{"class":701},[425,89208,89209],{"class":427,"line":710},[425,89210,3400],{"emptyLinePlaceholder":1084},[425,89212,89213,89215,89217],{"class":427,"line":721},[425,89214,2057],{"class":701},[425,89216,52089],{"class":52055},[425,89218,52062],{"class":701},[425,89220,89221,89223,89225,89227,89229,89231],{"class":427,"line":735},[425,89222,52899],{"class":701},[425,89224,52099],{"class":52055},[425,89226,52102],{"class":431},[425,89228,1204],{"class":701},[425,89230,52107],{"class":435},[425,89232,52062],{"class":701},[425,89234,89235,89237,89239,89241,89243,89245,89247,89249,89251],{"class":427,"line":743},[425,89236,52899],{"class":701},[425,89238,52099],{"class":52055},[425,89240,15917],{"class":431},[425,89242,1204],{"class":701},[425,89244,52146],{"class":435},[425,89246,52126],{"class":431},[425,89248,1204],{"class":701},[425,89250,52153],{"class":435},[425,89252,52062],{"class":701},[425,89254,89255,89257,89259,89261,89263],{"class":427,"line":751},[425,89256,52899],{"class":701},[425,89258,52162],{"class":52055},[425,89260,52165],{"class":701},[425,89262,52162],{"class":52055},[425,89264,52062],{"class":701},[425,89266,89267,89269,89271],{"class":427,"line":759},[425,89268,52540],{"class":701},[425,89270,52089],{"class":52055},[425,89272,52062],{"class":701},[425,89274,89275],{"class":427,"line":770},[425,89276,3400],{"emptyLinePlaceholder":1084},[425,89278,89279,89281,89283],{"class":427,"line":780},[425,89280,2057],{"class":701},[425,89282,52555],{"class":52055},[425,89284,52062],{"class":701},[425,89286,89287,89289,89291],{"class":427,"line":790},[425,89288,52899],{"class":701},[425,89290,52568],{"class":52055},[425,89292,52062],{"class":701},[425,89294,89295,89297,89299,89301],{"class":427,"line":805},[425,89296,12220],{"class":1155},[425,89298,70726],{"class":691},[425,89300,14563],{"class":1155},[425,89302,16569],{"class":701},[425,89304,89305,89307,89309],{"class":427,"line":818},[425,89306,72371],{"class":701},[425,89308,88565],{"class":435},[425,89310,32221],{"class":701},[425,89312,89313,89315,89317],{"class":427,"line":831},[425,89314,72381],{"class":701},[425,89316,1798],{"class":691},[425,89318,32221],{"class":701},[425,89320,89321,89323,89325,89327,89329],{"class":427,"line":841},[425,89322,88580],{"class":701},[425,89324,88583],{"class":435},[425,89326,13434],{"class":701},[425,89328,88588],{"class":435},[425,89330,88591],{"class":701},[425,89332,89333],{"class":427,"line":852},[425,89334,78627],{"class":701},[425,89336,89337,89339],{"class":427,"line":862},[425,89338,88600],{"class":701},[425,89340,88603],{"class":435},[425,89342,89343],{"class":427,"line":878},[425,89344,53153],{"class":701},[425,89346,89347],{"class":427,"line":914},[425,89348,3187],{"class":701},[425,89350,89351],{"class":427,"line":943},[425,89352,89353],{"class":1216},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[425,89355,89356],{"class":427,"line":956},[425,89357,89358],{"class":1216},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[425,89360,89361],{"class":427,"line":964},[425,89362,89363],{"class":1216},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[425,89365,89366,89368,89370,89372,89375,89377,89380,89382,89384,89386,89388],{"class":427,"line":2733},[425,89367,12220],{"class":1155},[425,89369,88618],{"class":691},[425,89371,14563],{"class":1155},[425,89373,89374],{"class":691}," JSON",[425,89376,1706],{"class":701},[425,89378,89379],{"class":431},"parse",[425,89381,1159],{"class":701},[425,89383,72419],{"class":691},[425,89385,1706],{"class":701},[425,89387,72424],{"class":431},[425,89389,72427],{"class":701},[425,89391,89392,89394,89396],{"class":427,"line":2750},[425,89393,74508],{"class":701},[425,89395,59002],{"class":431},[425,89397,88810],{"class":701},[425,89399,89400,89402,89404],{"class":427,"line":2755},[425,89401,89128],{"class":701},[425,89403,1204],{"class":1155},[425,89405,89406],{"class":435}," '123'\n",[425,89408,89409,89411,89413],{"class":427,"line":2760},[425,89410,74508],{"class":701},[425,89412,59002],{"class":431},[425,89414,70791],{"class":701},[425,89416,89417,89419,89421],{"class":427,"line":2765},[425,89418,53172],{"class":701},[425,89420,52568],{"class":52055},[425,89422,52062],{"class":701},[425,89424,89425,89427,89429],{"class":427,"line":2779},[425,89426,52540],{"class":701},[425,89428,52555],{"class":52055},[425,89430,52062],{"class":701},[425,89432,89433],{"class":427,"line":2784},[425,89434,3400],{"emptyLinePlaceholder":1084},[425,89436,89437,89439,89441],{"class":427,"line":3577},[425,89438,52540],{"class":701},[425,89440,51390],{"class":52055},[425,89442,52062],{"class":701},[19,89444,89445],{},[393,89446],{"alt":395,"src":89447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[1099,89449,89451],{"id":89450},"_415-异常处理","4.15 异常处理",[972,89453,89454],{},[450,89455,89456],{},"throw抛异常",[19,89458,89459],{},[393,89460],{"alt":395,"src":89461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[972,89463,89464],{"start":698},[450,89465,89466],{},"try\u002Fcatch 捕获错误信息",[19,89468,89469],{},[393,89470],{"alt":395,"src":89471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[416,89473,89475],{"className":51388,"code":89474,"language":51390,"meta":395,"style":395},"\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",[422,89476,89477,89487,89501,89505,89513,89527,89547,89559,89567,89571,89579,89591,89599,89608,89615,89620,89639,89648,89659,89664,89674,89679,89684,89689,89706,89710,89715,89722,89734,89738,89750,89754,89758,89763,89768,89775,89783,89791,89795],{"__ignoreMap":395},[425,89478,89479,89481,89483,89485],{"class":427,"line":428},[425,89480,52052],{"class":701},[425,89482,52056],{"class":52055},[425,89484,52059],{"class":431},[425,89486,52062],{"class":701},[425,89488,89489,89491,89493,89495,89497,89499],{"class":427,"line":698},[425,89490,2057],{"class":701},[425,89492,51390],{"class":52055},[425,89494,52071],{"class":431},[425,89496,1204],{"class":701},[425,89498,52076],{"class":435},[425,89500,52062],{"class":701},[425,89502,89503],{"class":427,"line":710},[425,89504,3400],{"emptyLinePlaceholder":1084},[425,89506,89507,89509,89511],{"class":427,"line":721},[425,89508,2057],{"class":701},[425,89510,52089],{"class":52055},[425,89512,52062],{"class":701},[425,89514,89515,89517,89519,89521,89523,89525],{"class":427,"line":735},[425,89516,52899],{"class":701},[425,89518,52099],{"class":52055},[425,89520,52102],{"class":431},[425,89522,1204],{"class":701},[425,89524,52107],{"class":435},[425,89526,52062],{"class":701},[425,89528,89529,89531,89533,89535,89537,89539,89541,89543,89545],{"class":427,"line":743},[425,89530,52899],{"class":701},[425,89532,52099],{"class":52055},[425,89534,15917],{"class":431},[425,89536,1204],{"class":701},[425,89538,52146],{"class":435},[425,89540,52126],{"class":431},[425,89542,1204],{"class":701},[425,89544,52153],{"class":435},[425,89546,52062],{"class":701},[425,89548,89549,89551,89553,89555,89557],{"class":427,"line":751},[425,89550,52899],{"class":701},[425,89552,52162],{"class":52055},[425,89554,52165],{"class":701},[425,89556,52162],{"class":52055},[425,89558,52062],{"class":701},[425,89560,89561,89563,89565],{"class":427,"line":759},[425,89562,52540],{"class":701},[425,89564,52089],{"class":52055},[425,89566,52062],{"class":701},[425,89568,89569],{"class":427,"line":770},[425,89570,3400],{"emptyLinePlaceholder":1084},[425,89572,89573,89575,89577],{"class":427,"line":780},[425,89574,2057],{"class":701},[425,89576,52555],{"class":52055},[425,89578,52062],{"class":701},[425,89580,89581,89583,89585,89587,89589],{"class":427,"line":790},[425,89582,52899],{"class":701},[425,89584,19],{"class":52055},[425,89586,54249],{"class":701},[425,89588,19],{"class":52055},[425,89590,52062],{"class":701},[425,89592,89593,89595,89597],{"class":427,"line":805},[425,89594,52899],{"class":701},[425,89596,52568],{"class":52055},[425,89598,52062],{"class":701},[425,89600,89601,89603,89606],{"class":427,"line":818},[425,89602,70839],{"class":1155},[425,89604,89605],{"class":431}," fn",[425,89607,11852],{"class":701},[425,89609,89610,89613],{"class":427,"line":831},[425,89611,89612],{"class":1155},"      try",[425,89614,16569],{"class":701},[425,89616,89617],{"class":427,"line":841},[425,89618,89619],{"class":1216},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[425,89621,89622,89624,89626,89628,89630,89632,89634,89637],{"class":427,"line":852},[425,89623,62025],{"class":1155},[425,89625,7825],{"class":691},[425,89627,14563],{"class":1155},[425,89629,55151],{"class":701},[425,89631,55154],{"class":431},[425,89633,1159],{"class":701},[425,89635,89636],{"class":435},"'.p'",[425,89638,1165],{"class":701},[425,89640,89641,89644,89646],{"class":427,"line":862},[425,89642,89643],{"class":701},"        p.style.color ",[425,89645,1204],{"class":1155},[425,89647,67806],{"class":435},[425,89649,89650,89653,89656],{"class":427,"line":878},[425,89651,89652],{"class":701},"      } ",[425,89654,89655],{"class":1155},"catch",[425,89657,89658],{"class":701}," (err) {\n",[425,89660,89661],{"class":427,"line":914},[425,89662,89663],{"class":1216},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[425,89665,89666,89669,89671],{"class":427,"line":943},[425,89667,89668],{"class":701},"        console.",[425,89670,59002],{"class":431},[425,89672,89673],{"class":701},"(err.message)\n",[425,89675,89676],{"class":427,"line":956},[425,89677,89678],{"class":1216},"        \u002F\u002F 想要中断程序，需要加return\n",[425,89680,89681],{"class":427,"line":964},[425,89682,89683],{"class":1216},"        \u002F\u002F return\n",[425,89685,89686],{"class":427,"line":2733},[425,89687,89688],{"class":1216},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[425,89690,89691,89694,89696,89699,89701,89704],{"class":427,"line":2750},[425,89692,89693],{"class":1155},"        throw",[425,89695,12577],{"class":1155},[425,89697,89698],{"class":431}," Error",[425,89700,1159],{"class":701},[425,89702,89703],{"class":435},"'你看看，选择器错误了吧'",[425,89705,1165],{"class":701},[425,89707,89708],{"class":427,"line":2755},[425,89709,53153],{"class":701},[425,89711,89712],{"class":427,"line":2760},[425,89713,89714],{"class":1216},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[425,89716,89717,89720],{"class":427,"line":2765},[425,89718,89719],{"class":1155},"      finally",[425,89721,16569],{"class":701},[425,89723,89724,89727,89729,89732],{"class":427,"line":2779},[425,89725,89726],{"class":431},"        alert",[425,89728,1159],{"class":701},[425,89730,89731],{"class":435},"'弹出对话框'",[425,89733,1165],{"class":701},[425,89735,89736],{"class":427,"line":2784},[425,89737,53153],{"class":701},[425,89739,89740,89742,89744,89746,89748],{"class":427,"line":3577},[425,89741,58999],{"class":701},[425,89743,59002],{"class":431},[425,89745,1159],{"class":701},[425,89747,1620],{"class":691},[425,89749,1165],{"class":701},[425,89751,89752],{"class":427,"line":3591},[425,89753,3400],{"emptyLinePlaceholder":1084},[425,89755,89756],{"class":427,"line":3599},[425,89757,3187],{"class":701},[425,89759,89760],{"class":427,"line":3604},[425,89761,89762],{"class":1216},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[425,89764,89765],{"class":427,"line":3610},[425,89766,89767],{"class":1216},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[425,89769,89770,89773],{"class":427,"line":3616},[425,89771,89772],{"class":431},"    fn",[425,89774,2976],{"class":701},[425,89776,89777,89779,89781],{"class":427,"line":3621},[425,89778,53172],{"class":701},[425,89780,52568],{"class":52055},[425,89782,52062],{"class":701},[425,89784,89785,89787,89789],{"class":427,"line":8948},[425,89786,52540],{"class":701},[425,89788,52555],{"class":52055},[425,89790,52062],{"class":701},[425,89792,89793],{"class":427,"line":8972},[425,89794,3400],{"emptyLinePlaceholder":1084},[425,89796,89797,89799,89801],{"class":427,"line":8977},[425,89798,52540],{"class":701},[425,89800,51390],{"class":52055},[425,89802,52062],{"class":701},[19,89804,89805],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[972,89807,89808],{"start":710},[450,89809,89810],{},"debugger",[19,89812,89813],{},[393,89814],{"alt":395,"src":89815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,89817,89818],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[1099,89820,89822],{"id":89821},"_416-处理this","4.16 处理this",[14,89824,89826],{"id":89825},"_4161-this的指向","4.16.1 this的指向",[972,89828,89829],{},[450,89830,89831],{},"普通函数的this",[19,89833,89834],{},[393,89835],{"alt":395,"src":89836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[972,89838,89839],{"start":698},[450,89840,89841],{},"箭头函数的this",[19,89843,89844],{},[393,89845],{"alt":395,"src":89846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,89848,89849],{},[393,89850],{"alt":395,"src":89851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,89853,89854],{},[393,89855],{"alt":395,"src":89856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[14,89858,89860],{"id":89859},"_4162-this的改变","4.16.2 this的改变",[19,89862,89863],{},"call() apply() bind()",[972,89865,89866],{},[450,89867,89868],{},"call()",[19,89870,89871],{},[393,89872],{"alt":395,"src":89873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,89875,89876],{},"两个作用：①调用函数；②改变this指向",[416,89878,89880],{"className":53822,"code":89879,"language":53824,"meta":395,"style":395},"\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",[422,89881,89882,89890,89898,89902,89907,89911,89916,89921,89926,89930,89935,89943],{"__ignoreMap":395},[425,89883,89884,89886,89888],{"class":427,"line":428},[425,89885,2057],{"class":701},[425,89887,52555],{"class":52055},[425,89889,52062],{"class":701},[425,89891,89892,89894,89896],{"class":427,"line":698},[425,89893,52899],{"class":701},[425,89895,52568],{"class":52055},[425,89897,52062],{"class":701},[425,89899,89900],{"class":427,"line":710},[425,89901,72278],{"class":701},[425,89903,89904],{"class":427,"line":721},[425,89905,89906],{"class":701},"      uname: 'pink'\n",[425,89908,89909],{"class":427,"line":735},[425,89910,3187],{"class":701},[425,89912,89913],{"class":427,"line":743},[425,89914,89915],{"class":701},"    function fn(x, y) {\n",[425,89917,89918],{"class":427,"line":751},[425,89919,89920],{"class":701},"      console.log(this)  \u002F\u002Fwindow\n",[425,89922,89923],{"class":427,"line":759},[425,89924,89925],{"class":701},"      console.log(x + y)\n",[425,89927,89928],{"class":427,"line":770},[425,89929,3187],{"class":701},[425,89931,89932],{"class":427,"line":780},[425,89933,89934],{"class":701},"    fn.call(obj, 1, 2)\n",[425,89936,89937,89939,89941],{"class":427,"line":790},[425,89938,53172],{"class":701},[425,89940,52568],{"class":52055},[425,89942,52062],{"class":701},[425,89944,89945,89947,89949],{"class":427,"line":805},[425,89946,52540],{"class":701},[425,89948,52555],{"class":52055},[425,89950,52062],{"class":701},[19,89952,89953],{},[393,89954],{"alt":395,"src":89955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[972,89957,89958],{"start":698},[450,89959,89960],{},"apply()",[19,89962,89963],{},[393,89964],{"alt":395,"src":89965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,89967,89876],{},[19,89969,89970],{},"call传递的是普通参数，而apply必须传递的是数组",[416,89972,89974],{"className":51388,"code":89973,"language":51390,"meta":395,"style":395},"\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",[422,89975,89976,89986,90000,90004,90012,90026,90046,90058,90066,90070,90078,90086,90096,90103,90107,90112,90128,90140,90154,90158,90163,90182,90187,90191,90196,90201,90209,90214,90236,90241,90257,90273,90285,90289,90294,90313,90321,90329,90333],{"__ignoreMap":395},[425,89977,89978,89980,89982,89984],{"class":427,"line":428},[425,89979,52052],{"class":701},[425,89981,52056],{"class":52055},[425,89983,52059],{"class":431},[425,89985,52062],{"class":701},[425,89987,89988,89990,89992,89994,89996,89998],{"class":427,"line":698},[425,89989,2057],{"class":701},[425,89991,51390],{"class":52055},[425,89993,52071],{"class":431},[425,89995,1204],{"class":701},[425,89997,52076],{"class":435},[425,89999,52062],{"class":701},[425,90001,90002],{"class":427,"line":710},[425,90003,3400],{"emptyLinePlaceholder":1084},[425,90005,90006,90008,90010],{"class":427,"line":721},[425,90007,2057],{"class":701},[425,90009,52089],{"class":52055},[425,90011,52062],{"class":701},[425,90013,90014,90016,90018,90020,90022,90024],{"class":427,"line":735},[425,90015,52899],{"class":701},[425,90017,52099],{"class":52055},[425,90019,52102],{"class":431},[425,90021,1204],{"class":701},[425,90023,52107],{"class":435},[425,90025,52062],{"class":701},[425,90027,90028,90030,90032,90034,90036,90038,90040,90042,90044],{"class":427,"line":743},[425,90029,52899],{"class":701},[425,90031,52099],{"class":52055},[425,90033,15917],{"class":431},[425,90035,1204],{"class":701},[425,90037,52146],{"class":435},[425,90039,52126],{"class":431},[425,90041,1204],{"class":701},[425,90043,52153],{"class":435},[425,90045,52062],{"class":701},[425,90047,90048,90050,90052,90054,90056],{"class":427,"line":751},[425,90049,52899],{"class":701},[425,90051,52162],{"class":52055},[425,90053,52165],{"class":701},[425,90055,52162],{"class":52055},[425,90057,52062],{"class":701},[425,90059,90060,90062,90064],{"class":427,"line":759},[425,90061,52540],{"class":701},[425,90063,52089],{"class":52055},[425,90065,52062],{"class":701},[425,90067,90068],{"class":427,"line":770},[425,90069,3400],{"emptyLinePlaceholder":1084},[425,90071,90072,90074,90076],{"class":427,"line":780},[425,90073,2057],{"class":701},[425,90075,52555],{"class":52055},[425,90077,52062],{"class":701},[425,90079,90080,90082,90084],{"class":427,"line":790},[425,90081,52899],{"class":701},[425,90083,52568],{"class":52055},[425,90085,52062],{"class":701},[425,90087,90088,90090,90092,90094],{"class":427,"line":805},[425,90089,12220],{"class":1155},[425,90091,70726],{"class":691},[425,90093,14563],{"class":1155},[425,90095,16569],{"class":701},[425,90097,90098,90100],{"class":427,"line":818},[425,90099,72381],{"class":701},[425,90101,90102],{"class":691},"18\n",[425,90104,90105],{"class":427,"line":831},[425,90106,3187],{"class":701},[425,90108,90109],{"class":427,"line":841},[425,90110,90111],{"class":1216},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[425,90113,90114,90116,90118,90120,90122,90124,90126],{"class":427,"line":852},[425,90115,70839],{"class":1155},[425,90117,89605],{"class":431},[425,90119,1159],{"class":701},[425,90121,1968],{"class":6216},[425,90123,13434],{"class":701},[425,90125,1993],{"class":6216},[425,90127,13441],{"class":701},[425,90129,90130,90132,90134,90136,90138],{"class":427,"line":862},[425,90131,58999],{"class":701},[425,90133,59002],{"class":431},[425,90135,1159],{"class":701},[425,90137,87748],{"class":691},[425,90139,1165],{"class":701},[425,90141,90142,90144,90146,90149,90151],{"class":427,"line":878},[425,90143,58999],{"class":701},[425,90145,59002],{"class":431},[425,90147,90148],{"class":701},"(x ",[425,90150,1629],{"class":1155},[425,90152,90153],{"class":701}," y)\n",[425,90155,90156],{"class":427,"line":914},[425,90157,3187],{"class":701},[425,90159,90160],{"class":427,"line":943},[425,90161,90162],{"class":1216},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[425,90164,90165,90168,90171,90174,90176,90178,90180],{"class":427,"line":956},[425,90166,90167],{"class":701},"    fn.",[425,90169,90170],{"class":431},"apply",[425,90172,90173],{"class":701},"(obj, [",[425,90175,1367],{"class":691},[425,90177,13434],{"class":701},[425,90179,1235],{"class":691},[425,90181,5657],{"class":701},[425,90183,90184],{"class":427,"line":964},[425,90185,90186],{"class":1216},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[425,90188,90189],{"class":427,"line":2733},[425,90190,3400],{"emptyLinePlaceholder":1084},[425,90192,90193],{"class":427,"line":2750},[425,90194,90195],{"class":1216},"    \u002F\u002F 使用场景：求数组最大值\n",[425,90197,90198],{"class":427,"line":2755},[425,90199,90200],{"class":1216},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[425,90202,90203,90206],{"class":427,"line":2760},[425,90204,90205],{"class":1216},"    \u002F\u002F console.log(max)",[425,90207,90208],{"class":1216},"   \u002F\u002F3\n",[425,90210,90211],{"class":427,"line":2765},[425,90212,90213],{"class":1216},"    \u002F\u002F 指向空或者Math都是可以的\n",[425,90215,90216,90218,90220,90222,90224,90226,90228,90230,90232,90234],{"class":427,"line":2779},[425,90217,12220],{"class":1155},[425,90219,58450],{"class":691},[425,90221,14563],{"class":1155},[425,90223,52981],{"class":701},[425,90225,1460],{"class":691},[425,90227,13434],{"class":701},[425,90229,1652],{"class":691},[425,90231,13434],{"class":701},[425,90233,1683],{"class":691},[425,90235,34001],{"class":701},[425,90237,90238],{"class":427,"line":2784},[425,90239,90240],{"class":1216},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[425,90242,90243,90245,90247,90249,90252,90254],{"class":427,"line":3577},[425,90244,12220],{"class":1155},[425,90246,6951],{"class":691},[425,90248,14563],{"class":1155},[425,90250,90251],{"class":701}," Math.max.",[425,90253,90170],{"class":431},[425,90255,90256],{"class":701},"(Math, arr)\n",[425,90258,90259,90261,90264,90266,90269,90271],{"class":427,"line":3591},[425,90260,12220],{"class":1155},[425,90262,90263],{"class":691}," min",[425,90265,14563],{"class":1155},[425,90267,90268],{"class":701}," Math.min.",[425,90270,90170],{"class":431},[425,90272,90256],{"class":701},[425,90274,90275,90277,90279,90282],{"class":427,"line":3599},[425,90276,74508],{"class":701},[425,90278,59002],{"class":431},[425,90280,90281],{"class":701},"(max, min)     ",[425,90283,90284],{"class":1216},"\u002F\u002F100,4\n",[425,90286,90287],{"class":427,"line":3604},[425,90288,3400],{"emptyLinePlaceholder":1084},[425,90290,90291],{"class":427,"line":3610},[425,90292,90293],{"class":1216},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[425,90295,90296,90298,90300,90303,90305,90307,90310],{"class":427,"line":3616},[425,90297,74508],{"class":701},[425,90299,59002],{"class":431},[425,90301,90302],{"class":701},"(Max.",[425,90304,7015],{"class":431},[425,90306,1159],{"class":701},[425,90308,90309],{"class":1155},"...",[425,90311,90312],{"class":701},"arr))\n",[425,90314,90315,90317,90319],{"class":427,"line":3621},[425,90316,53172],{"class":701},[425,90318,52568],{"class":52055},[425,90320,52062],{"class":701},[425,90322,90323,90325,90327],{"class":427,"line":8948},[425,90324,52540],{"class":701},[425,90326,52555],{"class":52055},[425,90328,52062],{"class":701},[425,90330,90331],{"class":427,"line":8972},[425,90332,3400],{"emptyLinePlaceholder":1084},[425,90334,90335,90337,90339],{"class":427,"line":8977},[425,90336,52540],{"class":701},[425,90338,51390],{"class":52055},[425,90340,52062],{"class":701},[19,90342,90343],{},[393,90344],{"alt":395,"src":90345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[972,90347,90348],{"start":710},[450,90349,90350],{},"bind()",[19,90352,90353],{},[393,90354],{"alt":395,"src":90355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,90357,90358],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,90360,90361],{},"bind的语法跟call很相似",[416,90363,90365],{"className":53822,"code":90364,"language":53824,"meta":395,"style":395},"\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",[422,90366,90367,90375,90383,90387,90392,90396,90400,90405,90409,90414,90419,90424,90429,90434,90439,90444,90448,90456],{"__ignoreMap":395},[425,90368,90369,90371,90373],{"class":427,"line":428},[425,90370,2057],{"class":701},[425,90372,52555],{"class":52055},[425,90374,52062],{"class":701},[425,90376,90377,90379,90381],{"class":427,"line":698},[425,90378,52899],{"class":701},[425,90380,52568],{"class":52055},[425,90382,52062],{"class":701},[425,90384,90385],{"class":427,"line":710},[425,90386,72278],{"class":701},[425,90388,90389],{"class":427,"line":721},[425,90390,90391],{"class":701},"      age: 18\n",[425,90393,90394],{"class":427,"line":735},[425,90395,3187],{"class":701},[425,90397,90398],{"class":427,"line":743},[425,90399,77898],{"class":701},[425,90401,90402],{"class":427,"line":751},[425,90403,90404],{"class":701},"      console.log(this)\n",[425,90406,90407],{"class":427,"line":759},[425,90408,3187],{"class":701},[425,90410,90411],{"class":427,"line":770},[425,90412,90413],{"class":701},"    \u002F\u002F 1.bind 不会调用函数\n",[425,90415,90416],{"class":427,"line":780},[425,90417,90418],{"class":701},"    \u002F\u002F 2.bind能改变this的指向\n",[425,90420,90421],{"class":427,"line":790},[425,90422,90423],{"class":701},"    fn.bind()\n",[425,90425,90426],{"class":427,"line":805},[425,90427,90428],{"class":701},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[425,90430,90431],{"class":427,"line":818},[425,90432,90433],{"class":701},"    const fun = fn.bind(obj)\n",[425,90435,90436],{"class":427,"line":831},[425,90437,90438],{"class":701},"    \u002F\u002F console.log(fun)\n",[425,90440,90441],{"class":427,"line":841},[425,90442,90443],{"class":701},"    \u002F\u002F 调用,查看this的指向\n",[425,90445,90446],{"class":427,"line":852},[425,90447,53406],{"class":701},[425,90449,90450,90452,90454],{"class":427,"line":862},[425,90451,53172],{"class":701},[425,90453,52568],{"class":52055},[425,90455,52062],{"class":701},[425,90457,90458,90460,90462],{"class":427,"line":878},[425,90459,52540],{"class":701},[425,90461,52555],{"class":52055},[425,90463,52062],{"class":701},[19,90465,90466],{},[393,90467],{"alt":395,"src":90468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[972,90470,90471],{"start":721},[450,90472,90473],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[416,90475,90477],{"className":53822,"code":90476,"language":53824,"meta":395,"style":395},"\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",[422,90478,90479,90487,90500,90508,90513,90517,90522,90527,90532,90537,90542,90547,90552,90557,90561,90569],{"__ignoreMap":395},[425,90480,90481,90483,90485],{"class":427,"line":428},[425,90482,2057],{"class":701},[425,90484,52555],{"class":52055},[425,90486,52062],{"class":701},[425,90488,90489,90491,90493,90496,90498],{"class":427,"line":698},[425,90490,52899],{"class":701},[425,90492,54642],{"class":52055},[425,90494,90495],{"class":701},">禁用\u003C\u002F",[425,90497,54642],{"class":52055},[425,90499,52062],{"class":701},[425,90501,90502,90504,90506],{"class":427,"line":710},[425,90503,52899],{"class":701},[425,90505,52568],{"class":52055},[425,90507,52062],{"class":701},[425,90509,90510],{"class":427,"line":721},[425,90511,90512],{"class":701},"    const btn = document.querySelector('button')\n",[425,90514,90515],{"class":427,"line":735},[425,90516,59771],{"class":701},[425,90518,90519],{"class":427,"line":743},[425,90520,90521],{"class":701},"      this.disabled = true\n",[425,90523,90524],{"class":427,"line":751},[425,90525,90526],{"class":701},"      \u002F\u002F 定时器是window进行调用的\n",[425,90528,90529],{"class":427,"line":759},[425,90530,90531],{"class":701},"      setTimeout(function () {\n",[425,90533,90534],{"class":427,"line":770},[425,90535,90536],{"class":701},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[425,90538,90539],{"class":427,"line":780},[425,90540,90541],{"class":701},"        this.disabled = false\n",[425,90543,90544],{"class":427,"line":790},[425,90545,90546],{"class":701},"      }.bind(this), 2000)\n",[425,90548,90549],{"class":427,"line":805},[425,90550,90551],{"class":701},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[425,90553,90554],{"class":427,"line":818},[425,90555,90556],{"class":701},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[425,90558,90559],{"class":427,"line":831},[425,90560,34216],{"class":701},[425,90562,90563,90565,90567],{"class":427,"line":841},[425,90564,53172],{"class":701},[425,90566,52568],{"class":52055},[425,90568,52062],{"class":701},[425,90570,90571,90573,90575],{"class":427,"line":852},[425,90572,52540],{"class":701},[425,90574,52555],{"class":52055},[425,90576,52062],{"class":701},[972,90578,90579],{"start":735},[450,90580,22950],{},[19,90582,90583],{},[393,90584],{"alt":395,"src":90585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[1099,90587,90589],{"id":90588},"_417-性能优化","4.17 性能优化",[14,90591,90593],{"id":90592},"_4171-防抖","4.17.1 防抖",[19,90595,90596],{},[393,90597],{"alt":395,"src":90598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,90600,90601],{},[400,90602,90603],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,90605,90606],{},"防抖实现方式：",[447,90608,90609],{},[450,90610,90611],{},"lodash 提供了防抖处理",[19,90613,90614],{},"_.debounce(func,[wait=0],[options={}])",[19,90616,90617],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[416,90619,90621],{"className":51388,"code":90620,"language":51390,"meta":395,"style":395},"\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",[422,90622,90623,90633,90647,90651,90659,90673,90693,90705,90713,90719,90729,90741,90753,90764,90776,90786,90796,90809,90813,90821,90829,90833,90841,90859,90877,90885,90904,90914,90923,90934,90939,90943,90948,90953,90958,90983,90991,90999,91003],{"__ignoreMap":395},[425,90624,90625,90627,90629,90631],{"class":427,"line":428},[425,90626,52052],{"class":701},[425,90628,52056],{"class":52055},[425,90630,52059],{"class":431},[425,90632,52062],{"class":701},[425,90634,90635,90637,90639,90641,90643,90645],{"class":427,"line":698},[425,90636,2057],{"class":701},[425,90638,51390],{"class":52055},[425,90640,52071],{"class":431},[425,90642,1204],{"class":701},[425,90644,52076],{"class":435},[425,90646,52062],{"class":701},[425,90648,90649],{"class":427,"line":710},[425,90650,3400],{"emptyLinePlaceholder":1084},[425,90652,90653,90655,90657],{"class":427,"line":721},[425,90654,2057],{"class":701},[425,90656,52089],{"class":52055},[425,90658,52062],{"class":701},[425,90660,90661,90663,90665,90667,90669,90671],{"class":427,"line":735},[425,90662,52899],{"class":701},[425,90664,52099],{"class":52055},[425,90666,52102],{"class":431},[425,90668,1204],{"class":701},[425,90670,52107],{"class":435},[425,90672,52062],{"class":701},[425,90674,90675,90677,90679,90681,90683,90685,90687,90689,90691],{"class":427,"line":743},[425,90676,52899],{"class":701},[425,90678,52099],{"class":52055},[425,90680,15917],{"class":431},[425,90682,1204],{"class":701},[425,90684,52146],{"class":435},[425,90686,52126],{"class":431},[425,90688,1204],{"class":701},[425,90690,52153],{"class":435},[425,90692,52062],{"class":701},[425,90694,90695,90697,90699,90701,90703],{"class":427,"line":751},[425,90696,52899],{"class":701},[425,90698,52162],{"class":52055},[425,90700,52165],{"class":701},[425,90702,52162],{"class":52055},[425,90704,52062],{"class":701},[425,90706,90707,90709,90711],{"class":427,"line":759},[425,90708,52899],{"class":701},[425,90710,1074],{"class":52055},[425,90712,52062],{"class":701},[425,90714,90715,90717],{"class":427,"line":770},[425,90716,55507],{"class":431},[425,90718,16569],{"class":701},[425,90720,90721,90723,90725,90727],{"class":427,"line":780},[425,90722,73351],{"class":691},[425,90724,52192],{"class":701},[425,90726,61260],{"class":691},[425,90728,2307],{"class":701},[425,90730,90731,90733,90735,90737,90739],{"class":427,"line":790},[425,90732,55526],{"class":691},[425,90734,52192],{"class":701},[425,90736,2724],{"class":691},[425,90738,52247],{"class":1155},[425,90740,2307],{"class":701},[425,90742,90743,90745,90747,90749,90751],{"class":427,"line":805},[425,90744,55540],{"class":691},[425,90746,52192],{"class":701},[425,90748,2724],{"class":691},[425,90750,52247],{"class":1155},[425,90752,2307],{"class":701},[425,90754,90755,90757,90759,90762],{"class":427,"line":818},[425,90756,55639],{"class":691},[425,90758,52192],{"class":701},[425,90760,90761],{"class":691},"gray",[425,90763,2307],{"class":701},[425,90765,90766,90768,90770,90772,90774],{"class":427,"line":831},[425,90767,55677],{"class":691},[425,90769,52192],{"class":701},[425,90771,1973],{"class":691},[425,90773,52247],{"class":1155},[425,90775,2307],{"class":701},[425,90777,90778,90780,90782,90784],{"class":427,"line":841},[425,90779,58171],{"class":691},[425,90781,52192],{"class":701},[425,90783,61597],{"class":691},[425,90785,2307],{"class":701},[425,90787,90788,90790,90792,90794],{"class":427,"line":852},[425,90789,58041],{"class":691},[425,90791,52192],{"class":701},[425,90793,52347],{"class":691},[425,90795,2307],{"class":701},[425,90797,90798,90801,90803,90805,90807],{"class":427,"line":862},[425,90799,90800],{"class":691},"      padding-top",[425,90802,52192],{"class":701},[425,90804,1468],{"class":691},[425,90806,52247],{"class":1155},[425,90808,2307],{"class":701},[425,90810,90811],{"class":427,"line":878},[425,90812,3187],{"class":701},[425,90814,90815,90817,90819],{"class":427,"line":914},[425,90816,53172],{"class":701},[425,90818,1074],{"class":52055},[425,90820,52062],{"class":701},[425,90822,90823,90825,90827],{"class":427,"line":943},[425,90824,52540],{"class":701},[425,90826,52089],{"class":52055},[425,90828,52062],{"class":701},[425,90830,90831],{"class":427,"line":956},[425,90832,3400],{"emptyLinePlaceholder":1084},[425,90834,90835,90837,90839],{"class":427,"line":964},[425,90836,2057],{"class":701},[425,90838,52555],{"class":52055},[425,90840,52062],{"class":701},[425,90842,90843,90845,90847,90849,90851,90853,90855,90857],{"class":427,"line":2733},[425,90844,52899],{"class":701},[425,90846,52366],{"class":52055},[425,90848,54241],{"class":431},[425,90850,1204],{"class":701},[425,90852,54246],{"class":435},[425,90854,56069],{"class":701},[425,90856,52366],{"class":52055},[425,90858,52062],{"class":701},[425,90860,90861,90863,90865,90867,90869,90871,90873,90875],{"class":427,"line":2750},[425,90862,52899],{"class":701},[425,90864,52568],{"class":52055},[425,90866,55994],{"class":431},[425,90868,1204],{"class":701},[425,90870,89029],{"class":435},[425,90872,56069],{"class":701},[425,90874,52568],{"class":52055},[425,90876,52062],{"class":701},[425,90878,90879,90881,90883],{"class":427,"line":2755},[425,90880,52899],{"class":701},[425,90882,52568],{"class":52055},[425,90884,52062],{"class":701},[425,90886,90887,90889,90891,90893,90895,90897,90899,90902],{"class":427,"line":2760},[425,90888,12220],{"class":1155},[425,90890,87688],{"class":691},[425,90892,14563],{"class":1155},[425,90894,55151],{"class":701},[425,90896,55154],{"class":431},[425,90898,1159],{"class":701},[425,90900,90901],{"class":435},"'.box'",[425,90903,1165],{"class":701},[425,90905,90906,90908,90910,90912],{"class":427,"line":2765},[425,90907,52974],{"class":1155},[425,90909,10437],{"class":701},[425,90911,1204],{"class":1155},[425,90913,48088],{"class":691},[425,90915,90916,90918,90921],{"class":427,"line":2779},[425,90917,70839],{"class":1155},[425,90919,90920],{"class":431}," mouseMove",[425,90922,11852],{"class":701},[425,90924,90925,90928,90930,90932],{"class":427,"line":2784},[425,90926,90927],{"class":701},"      box.innerHTML ",[425,90929,1204],{"class":1155},[425,90931,4032],{"class":701},[425,90933,3702],{"class":1155},[425,90935,90936],{"class":427,"line":3577},[425,90937,90938],{"class":1216},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[425,90940,90941],{"class":427,"line":3591},[425,90942,3187],{"class":701},[425,90944,90945],{"class":427,"line":3599},[425,90946,90947],{"class":1216},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[425,90949,90950],{"class":427,"line":3604},[425,90951,90952],{"class":1216},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[425,90954,90955],{"class":427,"line":3610},[425,90956,90957],{"class":1216},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[425,90959,90960,90963,90965,90967,90970,90973,90976,90979,90981],{"class":427,"line":3616},[425,90961,90962],{"class":701},"    box.",[425,90964,58568],{"class":431},[425,90966,1159],{"class":701},[425,90968,90969],{"class":435},"'mousemove'",[425,90971,90972],{"class":701},", _.",[425,90974,90975],{"class":431},"debounce",[425,90977,90978],{"class":701},"(mouseMove, ",[425,90980,65829],{"class":691},[425,90982,31252],{"class":701},[425,90984,90985,90987,90989],{"class":427,"line":3621},[425,90986,53172],{"class":701},[425,90988,52568],{"class":52055},[425,90990,52062],{"class":701},[425,90992,90993,90995,90997],{"class":427,"line":8948},[425,90994,52540],{"class":701},[425,90996,52555],{"class":52055},[425,90998,52062],{"class":701},[425,91000,91001],{"class":427,"line":8972},[425,91002,3400],{"emptyLinePlaceholder":1084},[425,91004,91005,91007,91009],{"class":427,"line":8977},[425,91006,52540],{"class":701},[425,91008,51390],{"class":52055},[425,91010,52062],{"class":701},[447,91012,91013],{},[450,91014,91015],{},"手写一个防抖函数来处理",[19,91017,91018],{},"防抖的核心就是利用定时器来实现的：",[19,91020,91021],{},"①声明一个定时器变量",[19,91023,91024],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,91026,91027],{},"③如果没有定时器则开启定时器，记得存到变量里面",[416,91029,91031],{"className":51388,"code":91030,"language":51390,"meta":395,"style":395},"\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",[422,91032,91033,91043,91057,91061,91069,91083,91103,91115,91123,91129,91139,91151,91163,91173,91185,91195,91205,91217,91221,91229,91237,91241,91249,91267,91285,91293,91311,91321,91329,91339,91343,91347,91351,91356,91361,91366,91371,91376,91381,91399,91406,91411,91419,91424,91437,91453,91463,91468,91472,91476,91496,91500,91505,91510,91515,91520,91528,91536,91540],{"__ignoreMap":395},[425,91034,91035,91037,91039,91041],{"class":427,"line":428},[425,91036,52052],{"class":701},[425,91038,52056],{"class":52055},[425,91040,52059],{"class":431},[425,91042,52062],{"class":701},[425,91044,91045,91047,91049,91051,91053,91055],{"class":427,"line":698},[425,91046,2057],{"class":701},[425,91048,51390],{"class":52055},[425,91050,52071],{"class":431},[425,91052,1204],{"class":701},[425,91054,52076],{"class":435},[425,91056,52062],{"class":701},[425,91058,91059],{"class":427,"line":710},[425,91060,3400],{"emptyLinePlaceholder":1084},[425,91062,91063,91065,91067],{"class":427,"line":721},[425,91064,2057],{"class":701},[425,91066,52089],{"class":52055},[425,91068,52062],{"class":701},[425,91070,91071,91073,91075,91077,91079,91081],{"class":427,"line":735},[425,91072,52899],{"class":701},[425,91074,52099],{"class":52055},[425,91076,52102],{"class":431},[425,91078,1204],{"class":701},[425,91080,52107],{"class":435},[425,91082,52062],{"class":701},[425,91084,91085,91087,91089,91091,91093,91095,91097,91099,91101],{"class":427,"line":743},[425,91086,52899],{"class":701},[425,91088,52099],{"class":52055},[425,91090,15917],{"class":431},[425,91092,1204],{"class":701},[425,91094,52146],{"class":435},[425,91096,52126],{"class":431},[425,91098,1204],{"class":701},[425,91100,52153],{"class":435},[425,91102,52062],{"class":701},[425,91104,91105,91107,91109,91111,91113],{"class":427,"line":751},[425,91106,52899],{"class":701},[425,91108,52162],{"class":52055},[425,91110,52165],{"class":701},[425,91112,52162],{"class":52055},[425,91114,52062],{"class":701},[425,91116,91117,91119,91121],{"class":427,"line":759},[425,91118,52899],{"class":701},[425,91120,1074],{"class":52055},[425,91122,52062],{"class":701},[425,91124,91125,91127],{"class":427,"line":770},[425,91126,55507],{"class":431},[425,91128,16569],{"class":701},[425,91130,91131,91133,91135,91137],{"class":427,"line":780},[425,91132,73351],{"class":691},[425,91134,52192],{"class":701},[425,91136,61260],{"class":691},[425,91138,2307],{"class":701},[425,91140,91141,91143,91145,91147,91149],{"class":427,"line":790},[425,91142,55526],{"class":691},[425,91144,52192],{"class":701},[425,91146,2724],{"class":691},[425,91148,52247],{"class":1155},[425,91150,2307],{"class":701},[425,91152,91153,91155,91157,91159,91161],{"class":427,"line":805},[425,91154,55540],{"class":691},[425,91156,52192],{"class":701},[425,91158,2724],{"class":691},[425,91160,52247],{"class":1155},[425,91162,2307],{"class":701},[425,91164,91165,91167,91169,91171],{"class":427,"line":818},[425,91166,55639],{"class":691},[425,91168,52192],{"class":701},[425,91170,90761],{"class":691},[425,91172,2307],{"class":701},[425,91174,91175,91177,91179,91181,91183],{"class":427,"line":831},[425,91176,55677],{"class":691},[425,91178,52192],{"class":701},[425,91180,1973],{"class":691},[425,91182,52247],{"class":1155},[425,91184,2307],{"class":701},[425,91186,91187,91189,91191,91193],{"class":427,"line":841},[425,91188,58171],{"class":691},[425,91190,52192],{"class":701},[425,91192,61597],{"class":691},[425,91194,2307],{"class":701},[425,91196,91197,91199,91201,91203],{"class":427,"line":852},[425,91198,58041],{"class":691},[425,91200,52192],{"class":701},[425,91202,52347],{"class":691},[425,91204,2307],{"class":701},[425,91206,91207,91209,91211,91213,91215],{"class":427,"line":862},[425,91208,90800],{"class":691},[425,91210,52192],{"class":701},[425,91212,1468],{"class":691},[425,91214,52247],{"class":1155},[425,91216,2307],{"class":701},[425,91218,91219],{"class":427,"line":878},[425,91220,3187],{"class":701},[425,91222,91223,91225,91227],{"class":427,"line":914},[425,91224,53172],{"class":701},[425,91226,1074],{"class":52055},[425,91228,52062],{"class":701},[425,91230,91231,91233,91235],{"class":427,"line":943},[425,91232,52540],{"class":701},[425,91234,52089],{"class":52055},[425,91236,52062],{"class":701},[425,91238,91239],{"class":427,"line":956},[425,91240,3400],{"emptyLinePlaceholder":1084},[425,91242,91243,91245,91247],{"class":427,"line":964},[425,91244,2057],{"class":701},[425,91246,52555],{"class":52055},[425,91248,52062],{"class":701},[425,91250,91251,91253,91255,91257,91259,91261,91263,91265],{"class":427,"line":2733},[425,91252,52899],{"class":701},[425,91254,52366],{"class":52055},[425,91256,54241],{"class":431},[425,91258,1204],{"class":701},[425,91260,54246],{"class":435},[425,91262,56069],{"class":701},[425,91264,52366],{"class":52055},[425,91266,52062],{"class":701},[425,91268,91269,91271,91273,91275,91277,91279,91281,91283],{"class":427,"line":2750},[425,91270,52899],{"class":701},[425,91272,52568],{"class":52055},[425,91274,55994],{"class":431},[425,91276,1204],{"class":701},[425,91278,89029],{"class":435},[425,91280,56069],{"class":701},[425,91282,52568],{"class":52055},[425,91284,52062],{"class":701},[425,91286,91287,91289,91291],{"class":427,"line":2755},[425,91288,52899],{"class":701},[425,91290,52568],{"class":52055},[425,91292,52062],{"class":701},[425,91294,91295,91297,91299,91301,91303,91305,91307,91309],{"class":427,"line":2760},[425,91296,12220],{"class":1155},[425,91298,87688],{"class":691},[425,91300,14563],{"class":1155},[425,91302,55151],{"class":701},[425,91304,55154],{"class":431},[425,91306,1159],{"class":701},[425,91308,90901],{"class":435},[425,91310,1165],{"class":701},[425,91312,91313,91315,91317,91319],{"class":427,"line":2765},[425,91314,52974],{"class":1155},[425,91316,10437],{"class":701},[425,91318,1204],{"class":1155},[425,91320,48088],{"class":691},[425,91322,91323,91325,91327],{"class":427,"line":2779},[425,91324,70839],{"class":1155},[425,91326,90920],{"class":431},[425,91328,11852],{"class":701},[425,91330,91331,91333,91335,91337],{"class":427,"line":2784},[425,91332,90927],{"class":701},[425,91334,1204],{"class":1155},[425,91336,4032],{"class":701},[425,91338,3702],{"class":1155},[425,91340,91341],{"class":427,"line":3577},[425,91342,90938],{"class":1216},[425,91344,91345],{"class":427,"line":3591},[425,91346,3187],{"class":701},[425,91348,91349],{"class":427,"line":3599},[425,91350,90947],{"class":1216},[425,91352,91353],{"class":427,"line":3604},[425,91354,91355],{"class":1216},"    \u002F\u002F 手写防抖函数\n",[425,91357,91358],{"class":427,"line":3610},[425,91359,91360],{"class":1216},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[425,91362,91363],{"class":427,"line":3616},[425,91364,91365],{"class":1216},"    \u002F\u002F 1.声明定时器变量\n",[425,91367,91368],{"class":427,"line":3621},[425,91369,91370],{"class":1216},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[425,91372,91373],{"class":427,"line":8948},[425,91374,91375],{"class":1216},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[425,91377,91378],{"class":427,"line":8972},[425,91379,91380],{"class":1216},"    \u002F\u002F 4.定时器里面写函数调用\n",[425,91382,91383,91385,91388,91390,91393,91395,91397],{"class":427,"line":8977},[425,91384,70839],{"class":1155},[425,91386,91387],{"class":431}," debounce",[425,91389,1159],{"class":701},[425,91391,91392],{"class":6216},"fn",[425,91394,13434],{"class":701},[425,91396,1868],{"class":6216},[425,91398,13441],{"class":701},[425,91400,91401,91403],{"class":427,"line":8983},[425,91402,80527],{"class":1155},[425,91404,91405],{"class":701}," timer\n",[425,91407,91408],{"class":427,"line":9010},[425,91409,91410],{"class":1216},"      \u002F\u002F return 返回一个匿名函数\n",[425,91412,91413,91415,91417],{"class":427,"line":9015},[425,91414,74737],{"class":1155},[425,91416,59673],{"class":1155},[425,91418,55207],{"class":701},[425,91420,91421],{"class":427,"line":9021},[425,91422,91423],{"class":1216},"        \u002F\u002F 这里边写第二三四步\n",[425,91425,91426,91428,91431,91434],{"class":427,"line":9033},[425,91427,3497],{"class":1155},[425,91429,91430],{"class":701}," (timer) ",[425,91432,91433],{"class":431},"clearTimeout",[425,91435,91436],{"class":701},"(timer)\n",[425,91438,91439,91442,91444,91447,91449,91451],{"class":427,"line":9045},[425,91440,91441],{"class":701},"        timer ",[425,91443,1204],{"class":1155},[425,91445,91446],{"class":431}," setTimeout",[425,91448,1159],{"class":701},[425,91450,55204],{"class":1155},[425,91452,55207],{"class":701},[425,91454,91455,91458,91460],{"class":427,"line":9057},[425,91456,91457],{"class":431},"          fn",[425,91459,14049],{"class":701},[425,91461,91462],{"class":1216},"\u002F\u002F加小括号调用fn }, t)\n",[425,91464,91465],{"class":427,"line":10715},[425,91466,91467],{"class":701},"        }, t)\n",[425,91469,91470],{"class":427,"line":10740},[425,91471,53153],{"class":701},[425,91473,91474],{"class":427,"line":10763},[425,91475,3187],{"class":701},[425,91477,91478,91480,91482,91484,91486,91488,91490,91492,91494],{"class":427,"line":10787},[425,91479,90962],{"class":701},[425,91481,58568],{"class":431},[425,91483,1159],{"class":701},[425,91485,90969],{"class":435},[425,91487,13434],{"class":701},[425,91489,90975],{"class":431},[425,91491,90978],{"class":701},[425,91493,65829],{"class":691},[425,91495,31252],{"class":701},[425,91497,91498],{"class":427,"line":10792},[425,91499,3400],{"emptyLinePlaceholder":1084},[425,91501,91502],{"class":427,"line":10797},[425,91503,91504],{"class":1216},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[425,91506,91507],{"class":427,"line":10802},[425,91508,91509],{"class":1216},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[425,91511,91512],{"class":427,"line":10811},[425,91513,91514],{"class":1216},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[425,91516,91517],{"class":427,"line":10816},[425,91518,91519],{"class":1216},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[425,91521,91522,91524,91526],{"class":427,"line":10822},[425,91523,53172],{"class":701},[425,91525,52568],{"class":52055},[425,91527,52062],{"class":701},[425,91529,91530,91532,91534],{"class":427,"line":10843},[425,91531,52540],{"class":701},[425,91533,52555],{"class":52055},[425,91535,52062],{"class":701},[425,91537,91538],{"class":427,"line":10849},[425,91539,3400],{"emptyLinePlaceholder":1084},[425,91541,91542,91544,91546],{"class":427,"line":10863},[425,91543,52540],{"class":701},[425,91545,51390],{"class":52055},[425,91547,52062],{"class":701},[14,91549,91551],{"id":91550},"_4172-节流","4.17.2 节流",[19,91553,91554],{},[393,91555],{"alt":395,"src":91556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,91558,91559],{},[393,91560],{"alt":395,"src":91561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,91563,91564],{},[400,91565,91566],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,91568,91569],{},"实现方式：",[447,91571,91572],{},[450,91573,91574],{},"lodash 提供的节流函数来处理",[19,91576,91577],{},"_.throttle(func,[wait=0],[options=])",[19,91579,91580],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[416,91582,91584],{"className":51388,"code":91583,"language":51390,"meta":395,"style":395},"\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",[422,91585,91586,91596,91610,91614,91622,91636,91656,91668,91676,91682,91692,91704,91716,91726,91738,91748,91758,91770,91774,91782,91790,91794,91802,91820,91838,91846,91864,91874,91882,91892,91896,91900,91904,91909,91914,91935,91943,91951,91955],{"__ignoreMap":395},[425,91587,91588,91590,91592,91594],{"class":427,"line":428},[425,91589,52052],{"class":701},[425,91591,52056],{"class":52055},[425,91593,52059],{"class":431},[425,91595,52062],{"class":701},[425,91597,91598,91600,91602,91604,91606,91608],{"class":427,"line":698},[425,91599,2057],{"class":701},[425,91601,51390],{"class":52055},[425,91603,52071],{"class":431},[425,91605,1204],{"class":701},[425,91607,52076],{"class":435},[425,91609,52062],{"class":701},[425,91611,91612],{"class":427,"line":710},[425,91613,3400],{"emptyLinePlaceholder":1084},[425,91615,91616,91618,91620],{"class":427,"line":721},[425,91617,2057],{"class":701},[425,91619,52089],{"class":52055},[425,91621,52062],{"class":701},[425,91623,91624,91626,91628,91630,91632,91634],{"class":427,"line":735},[425,91625,52899],{"class":701},[425,91627,52099],{"class":52055},[425,91629,52102],{"class":431},[425,91631,1204],{"class":701},[425,91633,52107],{"class":435},[425,91635,52062],{"class":701},[425,91637,91638,91640,91642,91644,91646,91648,91650,91652,91654],{"class":427,"line":743},[425,91639,52899],{"class":701},[425,91641,52099],{"class":52055},[425,91643,15917],{"class":431},[425,91645,1204],{"class":701},[425,91647,52146],{"class":435},[425,91649,52126],{"class":431},[425,91651,1204],{"class":701},[425,91653,52153],{"class":435},[425,91655,52062],{"class":701},[425,91657,91658,91660,91662,91664,91666],{"class":427,"line":751},[425,91659,52899],{"class":701},[425,91661,52162],{"class":52055},[425,91663,52165],{"class":701},[425,91665,52162],{"class":52055},[425,91667,52062],{"class":701},[425,91669,91670,91672,91674],{"class":427,"line":759},[425,91671,52899],{"class":701},[425,91673,1074],{"class":52055},[425,91675,52062],{"class":701},[425,91677,91678,91680],{"class":427,"line":770},[425,91679,55507],{"class":431},[425,91681,16569],{"class":701},[425,91683,91684,91686,91688,91690],{"class":427,"line":780},[425,91685,73351],{"class":691},[425,91687,52192],{"class":701},[425,91689,61260],{"class":691},[425,91691,2307],{"class":701},[425,91693,91694,91696,91698,91700,91702],{"class":427,"line":790},[425,91695,55526],{"class":691},[425,91697,52192],{"class":701},[425,91699,2724],{"class":691},[425,91701,52247],{"class":1155},[425,91703,2307],{"class":701},[425,91705,91706,91708,91710,91712,91714],{"class":427,"line":805},[425,91707,55540],{"class":691},[425,91709,52192],{"class":701},[425,91711,2724],{"class":691},[425,91713,52247],{"class":1155},[425,91715,2307],{"class":701},[425,91717,91718,91720,91722,91724],{"class":427,"line":818},[425,91719,55639],{"class":691},[425,91721,52192],{"class":701},[425,91723,90761],{"class":691},[425,91725,2307],{"class":701},[425,91727,91728,91730,91732,91734,91736],{"class":427,"line":831},[425,91729,55677],{"class":691},[425,91731,52192],{"class":701},[425,91733,1973],{"class":691},[425,91735,52247],{"class":1155},[425,91737,2307],{"class":701},[425,91739,91740,91742,91744,91746],{"class":427,"line":841},[425,91741,58171],{"class":691},[425,91743,52192],{"class":701},[425,91745,61597],{"class":691},[425,91747,2307],{"class":701},[425,91749,91750,91752,91754,91756],{"class":427,"line":852},[425,91751,58041],{"class":691},[425,91753,52192],{"class":701},[425,91755,52347],{"class":691},[425,91757,2307],{"class":701},[425,91759,91760,91762,91764,91766,91768],{"class":427,"line":862},[425,91761,90800],{"class":691},[425,91763,52192],{"class":701},[425,91765,1468],{"class":691},[425,91767,52247],{"class":1155},[425,91769,2307],{"class":701},[425,91771,91772],{"class":427,"line":878},[425,91773,3187],{"class":701},[425,91775,91776,91778,91780],{"class":427,"line":914},[425,91777,53172],{"class":701},[425,91779,1074],{"class":52055},[425,91781,52062],{"class":701},[425,91783,91784,91786,91788],{"class":427,"line":943},[425,91785,52540],{"class":701},[425,91787,52089],{"class":52055},[425,91789,52062],{"class":701},[425,91791,91792],{"class":427,"line":956},[425,91793,3400],{"emptyLinePlaceholder":1084},[425,91795,91796,91798,91800],{"class":427,"line":964},[425,91797,2057],{"class":701},[425,91799,52555],{"class":52055},[425,91801,52062],{"class":701},[425,91803,91804,91806,91808,91810,91812,91814,91816,91818],{"class":427,"line":2733},[425,91805,52899],{"class":701},[425,91807,52366],{"class":52055},[425,91809,54241],{"class":431},[425,91811,1204],{"class":701},[425,91813,54246],{"class":435},[425,91815,56069],{"class":701},[425,91817,52366],{"class":52055},[425,91819,52062],{"class":701},[425,91821,91822,91824,91826,91828,91830,91832,91834,91836],{"class":427,"line":2750},[425,91823,52899],{"class":701},[425,91825,52568],{"class":52055},[425,91827,55994],{"class":431},[425,91829,1204],{"class":701},[425,91831,89029],{"class":435},[425,91833,56069],{"class":701},[425,91835,52568],{"class":52055},[425,91837,52062],{"class":701},[425,91839,91840,91842,91844],{"class":427,"line":2755},[425,91841,52899],{"class":701},[425,91843,52568],{"class":52055},[425,91845,52062],{"class":701},[425,91847,91848,91850,91852,91854,91856,91858,91860,91862],{"class":427,"line":2760},[425,91849,12220],{"class":1155},[425,91851,87688],{"class":691},[425,91853,14563],{"class":1155},[425,91855,55151],{"class":701},[425,91857,55154],{"class":431},[425,91859,1159],{"class":701},[425,91861,90901],{"class":435},[425,91863,1165],{"class":701},[425,91865,91866,91868,91870,91872],{"class":427,"line":2765},[425,91867,52974],{"class":1155},[425,91869,10437],{"class":701},[425,91871,1204],{"class":1155},[425,91873,48088],{"class":691},[425,91875,91876,91878,91880],{"class":427,"line":2779},[425,91877,70839],{"class":1155},[425,91879,90920],{"class":431},[425,91881,11852],{"class":701},[425,91883,91884,91886,91888,91890],{"class":427,"line":2784},[425,91885,90927],{"class":701},[425,91887,1204],{"class":1155},[425,91889,4032],{"class":701},[425,91891,3702],{"class":1155},[425,91893,91894],{"class":427,"line":3577},[425,91895,90938],{"class":1216},[425,91897,91898],{"class":427,"line":3591},[425,91899,3187],{"class":701},[425,91901,91902],{"class":427,"line":3599},[425,91903,90947],{"class":1216},[425,91905,91906],{"class":427,"line":3604},[425,91907,91908],{"class":1216},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[425,91910,91911],{"class":427,"line":3610},[425,91912,91913],{"class":1216},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[425,91915,91916,91918,91920,91922,91924,91926,91929,91931,91933],{"class":427,"line":3616},[425,91917,90962],{"class":701},[425,91919,58568],{"class":431},[425,91921,1159],{"class":701},[425,91923,90969],{"class":435},[425,91925,90972],{"class":701},[425,91927,91928],{"class":431},"throttle",[425,91930,90978],{"class":701},[425,91932,65829],{"class":691},[425,91934,31252],{"class":701},[425,91936,91937,91939,91941],{"class":427,"line":3621},[425,91938,53172],{"class":701},[425,91940,52568],{"class":52055},[425,91942,52062],{"class":701},[425,91944,91945,91947,91949],{"class":427,"line":8948},[425,91946,52540],{"class":701},[425,91948,52555],{"class":52055},[425,91950,52062],{"class":701},[425,91952,91953],{"class":427,"line":8972},[425,91954,3400],{"emptyLinePlaceholder":1084},[425,91956,91957,91959,91961],{"class":427,"line":8977},[425,91958,52540],{"class":701},[425,91960,51390],{"class":52055},[425,91962,52062],{"class":701},[447,91964,91965],{},[450,91966,91967],{},"手写一个节流函数来处理",[19,91969,71707],{},[19,91971,91021],{},[19,91973,91974],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,91976,91977],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[416,91979,91981],{"className":51388,"code":91980,"language":51390,"meta":395,"style":395},"\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",[422,91982,91983,91993,92007,92011,92019,92033,92053,92065,92073,92079,92089,92101,92113,92123,92135,92145,92155,92167,92171,92179,92187,92191,92199,92217,92235,92243,92261,92271,92279,92289,92293,92297,92301,92306,92311,92316,92321,92326,92331,92348,92354,92362,92373,92388,92395,92400,92405,92415,92420,92425,92430,92434,92438,92442,92462,92470,92478,92482],{"__ignoreMap":395},[425,91984,91985,91987,91989,91991],{"class":427,"line":428},[425,91986,52052],{"class":701},[425,91988,52056],{"class":52055},[425,91990,52059],{"class":431},[425,91992,52062],{"class":701},[425,91994,91995,91997,91999,92001,92003,92005],{"class":427,"line":698},[425,91996,2057],{"class":701},[425,91998,51390],{"class":52055},[425,92000,52071],{"class":431},[425,92002,1204],{"class":701},[425,92004,52076],{"class":435},[425,92006,52062],{"class":701},[425,92008,92009],{"class":427,"line":710},[425,92010,3400],{"emptyLinePlaceholder":1084},[425,92012,92013,92015,92017],{"class":427,"line":721},[425,92014,2057],{"class":701},[425,92016,52089],{"class":52055},[425,92018,52062],{"class":701},[425,92020,92021,92023,92025,92027,92029,92031],{"class":427,"line":735},[425,92022,52899],{"class":701},[425,92024,52099],{"class":52055},[425,92026,52102],{"class":431},[425,92028,1204],{"class":701},[425,92030,52107],{"class":435},[425,92032,52062],{"class":701},[425,92034,92035,92037,92039,92041,92043,92045,92047,92049,92051],{"class":427,"line":743},[425,92036,52899],{"class":701},[425,92038,52099],{"class":52055},[425,92040,15917],{"class":431},[425,92042,1204],{"class":701},[425,92044,52146],{"class":435},[425,92046,52126],{"class":431},[425,92048,1204],{"class":701},[425,92050,52153],{"class":435},[425,92052,52062],{"class":701},[425,92054,92055,92057,92059,92061,92063],{"class":427,"line":751},[425,92056,52899],{"class":701},[425,92058,52162],{"class":52055},[425,92060,52165],{"class":701},[425,92062,52162],{"class":52055},[425,92064,52062],{"class":701},[425,92066,92067,92069,92071],{"class":427,"line":759},[425,92068,52899],{"class":701},[425,92070,1074],{"class":52055},[425,92072,52062],{"class":701},[425,92074,92075,92077],{"class":427,"line":770},[425,92076,55507],{"class":431},[425,92078,16569],{"class":701},[425,92080,92081,92083,92085,92087],{"class":427,"line":780},[425,92082,73351],{"class":691},[425,92084,52192],{"class":701},[425,92086,61260],{"class":691},[425,92088,2307],{"class":701},[425,92090,92091,92093,92095,92097,92099],{"class":427,"line":790},[425,92092,55526],{"class":691},[425,92094,52192],{"class":701},[425,92096,2724],{"class":691},[425,92098,52247],{"class":1155},[425,92100,2307],{"class":701},[425,92102,92103,92105,92107,92109,92111],{"class":427,"line":805},[425,92104,55540],{"class":691},[425,92106,52192],{"class":701},[425,92108,2724],{"class":691},[425,92110,52247],{"class":1155},[425,92112,2307],{"class":701},[425,92114,92115,92117,92119,92121],{"class":427,"line":818},[425,92116,55639],{"class":691},[425,92118,52192],{"class":701},[425,92120,90761],{"class":691},[425,92122,2307],{"class":701},[425,92124,92125,92127,92129,92131,92133],{"class":427,"line":831},[425,92126,55677],{"class":691},[425,92128,52192],{"class":701},[425,92130,1973],{"class":691},[425,92132,52247],{"class":1155},[425,92134,2307],{"class":701},[425,92136,92137,92139,92141,92143],{"class":427,"line":841},[425,92138,58171],{"class":691},[425,92140,52192],{"class":701},[425,92142,61597],{"class":691},[425,92144,2307],{"class":701},[425,92146,92147,92149,92151,92153],{"class":427,"line":852},[425,92148,58041],{"class":691},[425,92150,52192],{"class":701},[425,92152,52347],{"class":691},[425,92154,2307],{"class":701},[425,92156,92157,92159,92161,92163,92165],{"class":427,"line":862},[425,92158,90800],{"class":691},[425,92160,52192],{"class":701},[425,92162,1468],{"class":691},[425,92164,52247],{"class":1155},[425,92166,2307],{"class":701},[425,92168,92169],{"class":427,"line":878},[425,92170,3187],{"class":701},[425,92172,92173,92175,92177],{"class":427,"line":914},[425,92174,53172],{"class":701},[425,92176,1074],{"class":52055},[425,92178,52062],{"class":701},[425,92180,92181,92183,92185],{"class":427,"line":943},[425,92182,52540],{"class":701},[425,92184,52089],{"class":52055},[425,92186,52062],{"class":701},[425,92188,92189],{"class":427,"line":956},[425,92190,3400],{"emptyLinePlaceholder":1084},[425,92192,92193,92195,92197],{"class":427,"line":964},[425,92194,2057],{"class":701},[425,92196,52555],{"class":52055},[425,92198,52062],{"class":701},[425,92200,92201,92203,92205,92207,92209,92211,92213,92215],{"class":427,"line":2733},[425,92202,52899],{"class":701},[425,92204,52366],{"class":52055},[425,92206,54241],{"class":431},[425,92208,1204],{"class":701},[425,92210,54246],{"class":435},[425,92212,56069],{"class":701},[425,92214,52366],{"class":52055},[425,92216,52062],{"class":701},[425,92218,92219,92221,92223,92225,92227,92229,92231,92233],{"class":427,"line":2750},[425,92220,52899],{"class":701},[425,92222,52568],{"class":52055},[425,92224,55994],{"class":431},[425,92226,1204],{"class":701},[425,92228,89029],{"class":435},[425,92230,56069],{"class":701},[425,92232,52568],{"class":52055},[425,92234,52062],{"class":701},[425,92236,92237,92239,92241],{"class":427,"line":2755},[425,92238,52899],{"class":701},[425,92240,52568],{"class":52055},[425,92242,52062],{"class":701},[425,92244,92245,92247,92249,92251,92253,92255,92257,92259],{"class":427,"line":2760},[425,92246,12220],{"class":1155},[425,92248,87688],{"class":691},[425,92250,14563],{"class":1155},[425,92252,55151],{"class":701},[425,92254,55154],{"class":431},[425,92256,1159],{"class":701},[425,92258,90901],{"class":435},[425,92260,1165],{"class":701},[425,92262,92263,92265,92267,92269],{"class":427,"line":2765},[425,92264,52974],{"class":1155},[425,92266,10437],{"class":701},[425,92268,1204],{"class":1155},[425,92270,48088],{"class":691},[425,92272,92273,92275,92277],{"class":427,"line":2779},[425,92274,70839],{"class":1155},[425,92276,90920],{"class":431},[425,92278,11852],{"class":701},[425,92280,92281,92283,92285,92287],{"class":427,"line":2784},[425,92282,90927],{"class":701},[425,92284,1204],{"class":1155},[425,92286,4032],{"class":701},[425,92288,3702],{"class":1155},[425,92290,92291],{"class":427,"line":3577},[425,92292,90938],{"class":1216},[425,92294,92295],{"class":427,"line":3591},[425,92296,3187],{"class":701},[425,92298,92299],{"class":427,"line":3599},[425,92300,90947],{"class":1216},[425,92302,92303],{"class":427,"line":3604},[425,92304,92305],{"class":1216},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[425,92307,92308],{"class":427,"line":3610},[425,92309,92310],{"class":1216},"    \u002F\u002F 1.声明一个定时器变量\n",[425,92312,92313],{"class":427,"line":3616},[425,92314,92315],{"class":1216},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[425,92317,92318],{"class":427,"line":3621},[425,92319,92320],{"class":1216},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[425,92322,92323],{"class":427,"line":8948},[425,92324,92325],{"class":1216},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[425,92327,92328],{"class":427,"line":8972},[425,92329,92330],{"class":1216},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[425,92332,92333,92335,92338,92340,92342,92344,92346],{"class":427,"line":8977},[425,92334,70839],{"class":1155},[425,92336,92337],{"class":431}," throttle",[425,92339,1159],{"class":701},[425,92341,91392],{"class":6216},[425,92343,13434],{"class":701},[425,92345,1868],{"class":6216},[425,92347,13441],{"class":701},[425,92349,92350,92352],{"class":427,"line":8983},[425,92351,80527],{"class":1155},[425,92353,91405],{"class":701},[425,92355,92356,92358,92360],{"class":427,"line":9010},[425,92357,74737],{"class":1155},[425,92359,59673],{"class":1155},[425,92361,55207],{"class":701},[425,92363,92364,92366,92368,92370],{"class":427,"line":9015},[425,92365,3497],{"class":1155},[425,92367,2664],{"class":701},[425,92369,1376],{"class":1155},[425,92371,92372],{"class":701},"timer) {\n",[425,92374,92375,92378,92380,92382,92384,92386],{"class":427,"line":9021},[425,92376,92377],{"class":701},"          timer ",[425,92379,1204],{"class":1155},[425,92381,91446],{"class":431},[425,92383,1159],{"class":701},[425,92385,55204],{"class":1155},[425,92387,55207],{"class":701},[425,92389,92390,92393],{"class":427,"line":9033},[425,92391,92392],{"class":431},"            fn",[425,92394,2976],{"class":701},[425,92396,92397],{"class":427,"line":9045},[425,92398,92399],{"class":1216},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[425,92401,92402],{"class":427,"line":9057},[425,92403,92404],{"class":1216},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[425,92406,92407,92410,92412],{"class":427,"line":10715},[425,92408,92409],{"class":701},"            timer ",[425,92411,1204],{"class":1155},[425,92413,92414],{"class":691}," null\n",[425,92416,92417],{"class":427,"line":10740},[425,92418,92419],{"class":1216},"            \u002F\u002F 不能用clearTimeout(timer)\n",[425,92421,92422],{"class":427,"line":10763},[425,92423,92424],{"class":1216},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[425,92426,92427],{"class":427,"line":10787},[425,92428,92429],{"class":701},"          }, t)\n",[425,92431,92432],{"class":427,"line":10792},[425,92433,3529],{"class":701},[425,92435,92436],{"class":427,"line":10797},[425,92437,53153],{"class":701},[425,92439,92440],{"class":427,"line":10802},[425,92441,3187],{"class":701},[425,92443,92444,92446,92448,92450,92452,92454,92456,92458,92460],{"class":427,"line":10811},[425,92445,90962],{"class":701},[425,92447,58568],{"class":431},[425,92449,1159],{"class":701},[425,92451,90969],{"class":435},[425,92453,13434],{"class":701},[425,92455,91928],{"class":431},[425,92457,90978],{"class":701},[425,92459,65829],{"class":691},[425,92461,31252],{"class":701},[425,92463,92464,92466,92468],{"class":427,"line":10816},[425,92465,53172],{"class":701},[425,92467,52568],{"class":52055},[425,92469,52062],{"class":701},[425,92471,92472,92474,92476],{"class":427,"line":10822},[425,92473,52540],{"class":701},[425,92475,52555],{"class":52055},[425,92477,52062],{"class":701},[425,92479,92480],{"class":427,"line":10843},[425,92481,3400],{"emptyLinePlaceholder":1084},[425,92483,92484,92486,92488],{"class":427,"line":10849},[425,92485,52540],{"class":701},[425,92487,51390],{"class":52055},[425,92489,52062],{"class":701},[14,92491,92493],{"id":92492},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[416,92495,92497],{"className":53822,"code":92496,"language":53824,"meta":395,"style":395},"\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",[422,92498,92499,92507,92515,92520,92525,92530,92535,92539,92547],{"__ignoreMap":395},[425,92500,92501,92503,92505],{"class":427,"line":428},[425,92502,2057],{"class":701},[425,92504,52555],{"class":52055},[425,92506,52062],{"class":701},[425,92508,92509,92511,92513],{"class":427,"line":698},[425,92510,52899],{"class":701},[425,92512,52568],{"class":52055},[425,92514,52062],{"class":701},[425,92516,92517],{"class":427,"line":710},[425,92518,92519],{"class":701},"    let timer = null\n",[425,92521,92522],{"class":427,"line":721},[425,92523,92524],{"class":701},"    timer = setTimeout(() => {\n",[425,92526,92527],{"class":427,"line":735},[425,92528,92529],{"class":701},"      clearTimeout(timer)\n",[425,92531,92532],{"class":427,"line":743},[425,92533,92534],{"class":701},"      console.log(timer)\n",[425,92536,92537],{"class":427,"line":751},[425,92538,60980],{"class":701},[425,92540,92541,92543,92545],{"class":427,"line":759},[425,92542,53172],{"class":701},[425,92544,52568],{"class":52055},[425,92546,52062],{"class":701},[425,92548,92549,92551,92553],{"class":427,"line":770},[425,92550,52540],{"class":701},[425,92552,52555],{"class":52055},[425,92554,52062],{"class":701},[19,92556,92557],{},"输出为1",[19,92559,92560],{},"在开启的定时器里边写清除定时器",[19,92562,92563],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[14,92565,92567],{"id":92566},"_4174-节流综合案例","4.17.4 节流综合案例",[19,92569,92570],{},"页面打开，可以记录上一次的视频播放位置",[19,92572,92573],{},[393,92574],{"alt":395,"src":92575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,92577,92578],{},[393,92579],{"alt":395,"src":92580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[416,92582,92584],{"className":51388,"code":92583,"language":51390,"meta":395,"style":395},"\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",[422,92585,92586,92596,92610,92614,92622,92636,92656,92676,92698,92711,92719,92725,92735,92745,92755,92759,92763,92770,92783,92795,92799,92803,92813,92825,92839,92843,92847,92854,92864,92877,92889,92899,92909,92925,92937,92941,92945,92953,92963,92975,92985,92995,93005,93009,93013,93023,93034,93038,93046,93054,93058,93066,93081,93096,93111,93132,93140,93148,93163,93185,93193,93208,93234,93260,93286,93294,93302,93321,93329,93334,93353,93358,93376,93381,93386,93394,93399,93413,93421,93426,93443,93447,93452,93474,93478,93486,93494,93498],{"__ignoreMap":395},[425,92587,92588,92590,92592,92594],{"class":427,"line":428},[425,92589,52052],{"class":701},[425,92591,52056],{"class":52055},[425,92593,52059],{"class":431},[425,92595,52062],{"class":701},[425,92597,92598,92600,92602,92604,92606,92608],{"class":427,"line":698},[425,92599,2057],{"class":701},[425,92601,51390],{"class":52055},[425,92603,52071],{"class":431},[425,92605,1204],{"class":701},[425,92607,52076],{"class":435},[425,92609,52062],{"class":701},[425,92611,92612],{"class":427,"line":710},[425,92613,3400],{"emptyLinePlaceholder":1084},[425,92615,92616,92618,92620],{"class":427,"line":721},[425,92617,2057],{"class":701},[425,92619,52089],{"class":52055},[425,92621,52062],{"class":701},[425,92623,92624,92626,92628,92630,92632,92634],{"class":427,"line":735},[425,92625,52899],{"class":701},[425,92627,52099],{"class":52055},[425,92629,52102],{"class":431},[425,92631,1204],{"class":701},[425,92633,52107],{"class":435},[425,92635,59882],{"class":701},[425,92637,92638,92640,92642,92644,92646,92648,92650,92652,92654],{"class":427,"line":743},[425,92639,52899],{"class":701},[425,92641,52099],{"class":52055},[425,92643,52118],{"class":431},[425,92645,1204],{"class":701},[425,92647,52123],{"class":435},[425,92649,52126],{"class":431},[425,92651,1204],{"class":701},[425,92653,52131],{"class":435},[425,92655,59882],{"class":701},[425,92657,92658,92660,92662,92664,92666,92668,92670,92672,92674],{"class":427,"line":751},[425,92659,52899],{"class":701},[425,92661,52099],{"class":52055},[425,92663,15917],{"class":431},[425,92665,1204],{"class":701},[425,92667,52146],{"class":435},[425,92669,52126],{"class":431},[425,92671,1204],{"class":701},[425,92673,52153],{"class":435},[425,92675,59882],{"class":701},[425,92677,92678,92680,92682,92684,92686,92689,92691,92693,92696],{"class":427,"line":759},[425,92679,52899],{"class":701},[425,92681,52099],{"class":52055},[425,92683,15917],{"class":431},[425,92685,1204],{"class":701},[425,92687,92688],{"class":435},"\"referrer\"",[425,92690,52126],{"class":431},[425,92692,1204],{"class":701},[425,92694,92695],{"class":435},"\"never\"",[425,92697,59882],{"class":701},[425,92699,92700,92702,92704,92707,92709],{"class":427,"line":770},[425,92701,52899],{"class":701},[425,92703,52162],{"class":52055},[425,92705,92706],{"class":701},">综合案例\u003C\u002F",[425,92708,52162],{"class":52055},[425,92710,52062],{"class":701},[425,92712,92713,92715,92717],{"class":427,"line":780},[425,92714,52899],{"class":701},[425,92716,1074],{"class":52055},[425,92718,52062],{"class":701},[425,92720,92721,92723],{"class":427,"line":790},[425,92722,7403],{"class":52055},[425,92724,16569],{"class":701},[425,92726,92727,92729,92731,92733],{"class":427,"line":805},[425,92728,55450],{"class":691},[425,92730,52192],{"class":701},[425,92732,1341],{"class":691},[425,92734,2307],{"class":701},[425,92736,92737,92739,92741,92743],{"class":427,"line":818},[425,92738,55461],{"class":691},[425,92740,52192],{"class":701},[425,92742,1341],{"class":691},[425,92744,2307],{"class":701},[425,92746,92747,92749,92751,92753],{"class":427,"line":831},[425,92748,73351],{"class":691},[425,92750,52192],{"class":701},[425,92752,61260],{"class":691},[425,92754,2307],{"class":701},[425,92756,92757],{"class":427,"line":841},[425,92758,3187],{"class":701},[425,92760,92761],{"class":427,"line":852},[425,92762,3400],{"emptyLinePlaceholder":1084},[425,92764,92765,92768],{"class":427,"line":862},[425,92766,92767],{"class":431},"    .container",[425,92769,16569],{"class":701},[425,92771,92772,92774,92776,92779,92781],{"class":427,"line":878},[425,92773,55526],{"class":691},[425,92775,52192],{"class":701},[425,92777,92778],{"class":691},"1200",[425,92780,52247],{"class":1155},[425,92782,2307],{"class":701},[425,92784,92785,92787,92789,92791,92793],{"class":427,"line":914},[425,92786,55461],{"class":691},[425,92788,52192],{"class":701},[425,92790,1341],{"class":691},[425,92792,52311],{"class":691},[425,92794,2307],{"class":701},[425,92796,92797],{"class":427,"line":943},[425,92798,3187],{"class":701},[425,92800,92801],{"class":427,"line":956},[425,92802,3400],{"emptyLinePlaceholder":1084},[425,92804,92805,92808,92811],{"class":427,"line":964},[425,92806,92807],{"class":431},"    .video",[425,92809,92810],{"class":52055}," video",[425,92812,16569],{"class":701},[425,92814,92815,92817,92819,92821,92823],{"class":427,"line":2733},[425,92816,55526],{"class":691},[425,92818,52192],{"class":701},[425,92820,1460],{"class":691},[425,92822,1477],{"class":1155},[425,92824,2307],{"class":701},[425,92826,92827,92829,92831,92833,92835,92837],{"class":427,"line":2750},[425,92828,55450],{"class":691},[425,92830,52192],{"class":701},[425,92832,1848],{"class":691},[425,92834,52247],{"class":1155},[425,92836,5093],{"class":691},[425,92838,2307],{"class":701},[425,92840,92841],{"class":427,"line":2755},[425,92842,3187],{"class":701},[425,92844,92845],{"class":427,"line":2760},[425,92846,3400],{"emptyLinePlaceholder":1084},[425,92848,92849,92852],{"class":427,"line":2765},[425,92850,92851],{"class":431},"    .elevator",[425,92853,16569],{"class":701},[425,92855,92856,92858,92860,92862],{"class":427,"line":2779},[425,92857,55514],{"class":691},[425,92859,52192],{"class":701},[425,92861,86988],{"class":691},[425,92863,2307],{"class":701},[425,92865,92866,92868,92870,92873,92875],{"class":427,"line":2784},[425,92867,55702],{"class":691},[425,92869,52192],{"class":701},[425,92871,92872],{"class":691},"280",[425,92874,52247],{"class":1155},[425,92876,2307],{"class":701},[425,92878,92879,92881,92883,92885,92887],{"class":427,"line":3577},[425,92880,87182],{"class":691},[425,92882,52192],{"class":701},[425,92884,1848],{"class":691},[425,92886,52247],{"class":1155},[425,92888,2307],{"class":701},[425,92890,92891,92893,92895,92897],{"class":427,"line":3591},[425,92892,86995],{"class":691},[425,92894,52192],{"class":701},[425,92896,87000],{"class":691},[425,92898,2307],{"class":701},[425,92900,92901,92903,92905,92907],{"class":427,"line":3599},[425,92902,62476],{"class":691},[425,92904,52192],{"class":701},[425,92906,61597],{"class":691},[425,92908,2307],{"class":701},[425,92910,92911,92913,92915,92917,92919,92921,92923],{"class":427,"line":3604},[425,92912,62732],{"class":691},[425,92914,52192],{"class":701},[425,92916,1367],{"class":691},[425,92918,52247],{"class":1155},[425,92920,52276],{"class":691},[425,92922,62999],{"class":691},[425,92924,2307],{"class":701},[425,92926,92927,92929,92931,92933,92935],{"class":427,"line":3610},[425,92928,55526],{"class":691},[425,92930,52192],{"class":701},[425,92932,2054],{"class":691},[425,92934,52247],{"class":1155},[425,92936,2307],{"class":701},[425,92938,92939],{"class":427,"line":3616},[425,92940,3187],{"class":701},[425,92942,92943],{"class":427,"line":3621},[425,92944,3400],{"emptyLinePlaceholder":1084},[425,92946,92947,92949,92951],{"class":427,"line":8948},[425,92948,92851],{"class":431},[425,92950,2412],{"class":52055},[425,92952,16569],{"class":701},[425,92954,92955,92957,92959,92961],{"class":427,"line":8972},[425,92956,55764],{"class":691},[425,92958,52192],{"class":701},[425,92960,61624],{"class":691},[425,92962,2307],{"class":701},[425,92964,92965,92967,92969,92971,92973],{"class":427,"line":8977},[425,92966,55450],{"class":691},[425,92968,52192],{"class":701},[425,92970,1594],{"class":691},[425,92972,52247],{"class":1155},[425,92974,2307],{"class":701},[425,92976,92977,92979,92981,92983],{"class":427,"line":8983},[425,92978,64725],{"class":691},[425,92980,52192],{"class":701},[425,92982,55492],{"class":691},[425,92984,2307],{"class":701},[425,92986,92987,92989,92991,92993],{"class":427,"line":9010},[425,92988,58041],{"class":691},[425,92990,52192],{"class":701},[425,92992,52347],{"class":691},[425,92994,2307],{"class":701},[425,92996,92997,92999,93001,93003],{"class":427,"line":9015},[425,92998,58171],{"class":691},[425,93000,52192],{"class":701},[425,93002,62825],{"class":691},[425,93004,2307],{"class":701},[425,93006,93007],{"class":427,"line":9021},[425,93008,3187],{"class":701},[425,93010,93011],{"class":427,"line":9033},[425,93012,3400],{"emptyLinePlaceholder":1084},[425,93014,93015,93017,93019,93021],{"class":427,"line":9045},[425,93016,92851],{"class":431},[425,93018,2412],{"class":52055},[425,93020,64779],{"class":431},[425,93022,16569],{"class":701},[425,93024,93025,93027,93029,93032],{"class":427,"line":9057},[425,93026,58171],{"class":691},[425,93028,52192],{"class":701},[425,93030,93031],{"class":691},"#1286ff",[425,93033,2307],{"class":701},[425,93035,93036],{"class":427,"line":10715},[425,93037,3187],{"class":701},[425,93039,93040,93042,93044],{"class":427,"line":10740},[425,93041,53172],{"class":701},[425,93043,1074],{"class":52055},[425,93045,52062],{"class":701},[425,93047,93048,93050,93052],{"class":427,"line":10763},[425,93049,52540],{"class":701},[425,93051,52089],{"class":52055},[425,93053,52062],{"class":701},[425,93055,93056],{"class":427,"line":10787},[425,93057,3400],{"emptyLinePlaceholder":1084},[425,93059,93060,93062,93064],{"class":427,"line":10792},[425,93061,2057],{"class":701},[425,93063,52555],{"class":52055},[425,93065,52062],{"class":701},[425,93067,93068,93070,93072,93074,93076,93079],{"class":427,"line":10797},[425,93069,52899],{"class":701},[425,93071,52366],{"class":52055},[425,93073,54241],{"class":431},[425,93075,1204],{"class":701},[425,93077,93078],{"class":435},"\"container\"",[425,93080,52062],{"class":701},[425,93082,93083,93085,93087,93089,93091,93094],{"class":427,"line":10802},[425,93084,52096],{"class":701},[425,93086,52366],{"class":52055},[425,93088,54241],{"class":431},[425,93090,1204],{"class":701},[425,93092,93093],{"class":435},"\"header\"",[425,93095,52062],{"class":701},[425,93097,93098,93100,93102,93104,93106,93109],{"class":427,"line":10811},[425,93099,55989],{"class":701},[425,93101,22],{"class":52055},[425,93103,61812],{"class":431},[425,93105,1204],{"class":701},[425,93107,93108],{"class":435},"\"http:\u002F\u002Fpip.itcast.cn\"",[425,93110,52062],{"class":701},[425,93112,93113,93115,93117,93119,93121,93124,93126,93128,93130],{"class":427,"line":10816},[425,93114,56057],{"class":701},[425,93116,393],{"class":52055},[425,93118,55994],{"class":431},[425,93120,1204],{"class":701},[425,93122,93123],{"class":435},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[425,93125,56002],{"class":431},[425,93127,1204],{"class":701},[425,93129,8652],{"class":435},[425,93131,59882],{"class":701},[425,93133,93134,93136,93138],{"class":427,"line":10822},[425,93135,56162],{"class":701},[425,93137,22],{"class":52055},[425,93139,52062],{"class":701},[425,93141,93142,93144,93146],{"class":427,"line":10843},[425,93143,52531],{"class":701},[425,93145,52366],{"class":52055},[425,93147,52062],{"class":701},[425,93149,93150,93152,93154,93156,93158,93161],{"class":427,"line":10849},[425,93151,52096],{"class":701},[425,93153,52366],{"class":52055},[425,93155,54241],{"class":431},[425,93157,1204],{"class":701},[425,93159,93160],{"class":435},"\"video\"",[425,93162,52062],{"class":701},[425,93164,93165,93167,93169,93171,93173,93176,93179,93181,93183],{"class":427,"line":10863},[425,93166,55989],{"class":701},[425,93168,775],{"class":52055},[425,93170,55994],{"class":431},[425,93172,1204],{"class":701},[425,93174,93175],{"class":435},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[425,93177,93178],{"class":431}," controls",[425,93180,56069],{"class":701},[425,93182,775],{"class":52055},[425,93184,52062],{"class":701},[425,93186,93187,93189,93191],{"class":427,"line":10869},[425,93188,52531],{"class":701},[425,93190,52366],{"class":52055},[425,93192,52062],{"class":701},[425,93194,93195,93197,93199,93201,93203,93206],{"class":427,"line":10896},[425,93196,52096],{"class":701},[425,93198,52366],{"class":52055},[425,93200,54241],{"class":431},[425,93202,1204],{"class":701},[425,93204,93205],{"class":435},"\"elevator\"",[425,93207,52062],{"class":701},[425,93209,93210,93212,93214,93216,93218,93220,93223,93225,93227,93230,93232],{"class":427,"line":10905},[425,93211,55989],{"class":701},[425,93213,22],{"class":52055},[425,93215,61812],{"class":431},[425,93217,1204],{"class":701},[425,93219,64991],{"class":435},[425,93221,93222],{"class":431}," data-ref",[425,93224,1204],{"class":701},[425,93226,93160],{"class":435},[425,93228,93229],{"class":701},">视频介绍\u003C\u002F",[425,93231,22],{"class":52055},[425,93233,52062],{"class":701},[425,93235,93236,93238,93240,93242,93244,93246,93248,93250,93253,93256,93258],{"class":427,"line":10911},[425,93237,55989],{"class":701},[425,93239,22],{"class":52055},[425,93241,61812],{"class":431},[425,93243,1204],{"class":701},[425,93245,64991],{"class":435},[425,93247,93222],{"class":431},[425,93249,1204],{"class":701},[425,93251,93252],{"class":435},"\"intro\"",[425,93254,93255],{"class":701},">课程简介\u003C\u002F",[425,93257,22],{"class":52055},[425,93259,52062],{"class":701},[425,93261,93262,93264,93266,93268,93270,93272,93274,93276,93279,93282,93284],{"class":427,"line":10919},[425,93263,55989],{"class":701},[425,93265,22],{"class":52055},[425,93267,61812],{"class":431},[425,93269,1204],{"class":701},[425,93271,64991],{"class":435},[425,93273,93222],{"class":431},[425,93275,1204],{"class":701},[425,93277,93278],{"class":435},"\"outline\"",[425,93280,93281],{"class":701},">评论列表\u003C\u002F",[425,93283,22],{"class":52055},[425,93285,52062],{"class":701},[425,93287,93288,93290,93292],{"class":427,"line":10924},[425,93289,52531],{"class":701},[425,93291,52366],{"class":52055},[425,93293,52062],{"class":701},[425,93295,93296,93298,93300],{"class":427,"line":17601},[425,93297,53172],{"class":701},[425,93299,52366],{"class":52055},[425,93301,52062],{"class":701},[425,93303,93304,93306,93308,93310,93312,93315,93317,93319],{"class":427,"line":17607},[425,93305,52899],{"class":701},[425,93307,52568],{"class":52055},[425,93309,55994],{"class":431},[425,93311,1204],{"class":701},[425,93313,93314],{"class":435},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[425,93316,56069],{"class":701},[425,93318,52568],{"class":52055},[425,93320,52062],{"class":701},[425,93322,93323,93325,93327],{"class":427,"line":17630},[425,93324,52899],{"class":701},[425,93326,52568],{"class":52055},[425,93328,52062],{"class":701},[425,93330,93331],{"class":427,"line":17636},[425,93332,93333],{"class":1216},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[425,93335,93336,93338,93340,93342,93344,93346,93348,93351],{"class":427,"line":17659},[425,93337,12220],{"class":1155},[425,93339,92810],{"class":691},[425,93341,14563],{"class":1155},[425,93343,55151],{"class":701},[425,93345,55154],{"class":431},[425,93347,1159],{"class":701},[425,93349,93350],{"class":435},"'video'",[425,93352,1165],{"class":701},[425,93354,93355],{"class":427,"line":17673},[425,93356,93357],{"class":1216},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[425,93359,93360,93363,93365,93367,93369,93372,93374],{"class":427,"line":17693},[425,93361,93362],{"class":701},"    video.ontimeupdate ",[425,93364,1204],{"class":1155},[425,93366,89110],{"class":701},[425,93368,91928],{"class":431},[425,93370,93371],{"class":701},"(() ",[425,93373,85477],{"class":1155},[425,93375,16569],{"class":701},[425,93377,93378],{"class":427,"line":17699},[425,93379,93380],{"class":1216},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[425,93382,93383],{"class":427,"line":17710},[425,93384,93385],{"class":1216},"      \u002F\u002F 控制台输出当前的时间\n",[425,93387,93388,93391],{"class":427,"line":17733},[425,93389,93390],{"class":1216},"      \u002F\u002F console.log(video.currentTime)",[425,93392,93393],{"class":1216},"  \u002F\u002F获得当前的视频时间\n",[425,93395,93396],{"class":427,"line":17755},[425,93397,93398],{"class":1216},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[425,93400,93401,93403,93405,93407,93410],{"class":427,"line":17760},[425,93402,75438],{"class":701},[425,93404,72409],{"class":431},[425,93406,1159],{"class":701},[425,93408,93409],{"class":435},"'currentTime'",[425,93411,93412],{"class":701},", video.currentTime)\n",[425,93414,93415,93417,93419],{"class":427,"line":17766},[425,93416,55290],{"class":701},[425,93418,7410],{"class":691},[425,93420,1165],{"class":701},[425,93422,93423],{"class":427,"line":17780},[425,93424,93425],{"class":1216},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[425,93427,93428,93431,93434,93436,93439,93441],{"class":427,"line":17793},[425,93429,93430],{"class":701},"    video.",[425,93432,93433],{"class":431},"onloadeddata",[425,93435,14563],{"class":1155},[425,93437,93438],{"class":701}," () ",[425,93440,85477],{"class":1155},[425,93442,16569],{"class":701},[425,93444,93445],{"class":427,"line":17798},[425,93446,60767],{"class":1216},[425,93448,93449],{"class":427,"line":17812},[425,93450,93451],{"class":1216},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[425,93453,93454,93457,93459,93462,93464,93466,93468,93470,93472],{"class":427,"line":17817},[425,93455,93456],{"class":701},"      video.currentTime ",[425,93458,1204],{"class":1155},[425,93460,93461],{"class":701}," localStorage.",[425,93463,72440],{"class":431},[425,93465,1159],{"class":701},[425,93467,93409],{"class":435},[425,93469,938],{"class":701},[425,93471,72112],{"class":1155},[425,93473,48088],{"class":691},[425,93475,93476],{"class":427,"line":17823},[425,93477,3187],{"class":701},[425,93479,93480,93482,93484],{"class":427,"line":17828},[425,93481,53172],{"class":701},[425,93483,52568],{"class":52055},[425,93485,52062],{"class":701},[425,93487,93488,93490,93492],{"class":427,"line":17842},[425,93489,52540],{"class":701},[425,93491,52555],{"class":52055},[425,93493,52062],{"class":701},[425,93495,93496],{"class":427,"line":17847},[425,93497,3400],{"emptyLinePlaceholder":1084},[425,93499,93500,93502,93504],{"class":427,"line":17852},[425,93501,52540],{"class":701},[425,93503,51390],{"class":52055},[425,93505,52062],{"class":701},[1074,93507,93508],{},"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":395,"searchDepth":698,"depth":698,"links":93510},[93511,93516,93520,93521,93522,93527,93532,93533,93534,93535,93542,93547,93548,93558,93562,93563,93567],{"id":77446,"depth":698,"text":77447,"children":93512},[93513,93514,93515],{"id":77450,"depth":710,"text":77451},{"id":77475,"depth":710,"text":77476},{"id":77487,"depth":710,"text":77488},{"id":77499,"depth":698,"text":77500,"children":93517},[93518,93519],{"id":77503,"depth":710,"text":77504},{"id":77518,"depth":710,"text":77519},{"id":77570,"depth":698,"text":77571},{"id":77614,"depth":698,"text":77615},{"id":77631,"depth":698,"text":77632,"children":93523},[93524,93525,93526],{"id":77635,"depth":710,"text":77636},{"id":77648,"depth":710,"text":77649},{"id":77753,"depth":710,"text":77754},{"id":78042,"depth":698,"text":78043,"children":93528},[93529,93530,93531],{"id":78046,"depth":710,"text":78047},{"id":78489,"depth":710,"text":78490},{"id":78900,"depth":710,"text":78901},{"id":78963,"depth":698,"text":78964},{"id":79042,"depth":698,"text":79043},{"id":79135,"depth":698,"text":79136},{"id":80980,"depth":698,"text":80981,"children":93536},[93537,93538,93539,93540,93541],{"id":80984,"depth":710,"text":80985},{"id":80996,"depth":710,"text":80997},{"id":81215,"depth":710,"text":81216},{"id":81233,"depth":710,"text":81234},{"id":81293,"depth":710,"text":81294},{"id":85561,"depth":698,"text":85562,"children":93543},[93544,93545,93546],{"id":85565,"depth":710,"text":85566},{"id":85583,"depth":710,"text":85584},{"id":85609,"depth":710,"text":85610},{"id":85618,"depth":698,"text":85619},{"id":85640,"depth":698,"text":85641,"children":93549},[93550,93551,93552,93553,93554,93555,93556,93557],{"id":85644,"depth":710,"text":85645},{"id":85905,"depth":710,"text":85906},{"id":86091,"depth":710,"text":86092},{"id":86458,"depth":710,"text":86459},{"id":86574,"depth":710,"text":86575},{"id":86610,"depth":710,"text":86611},{"id":86657,"depth":710,"text":86658},{"id":86691,"depth":710,"text":86692},{"id":88054,"depth":698,"text":88055,"children":93559},[93560,93561],{"id":88058,"depth":710,"text":88059},{"id":88095,"depth":710,"text":88096},{"id":89450,"depth":698,"text":89451},{"id":89821,"depth":698,"text":89822,"children":93564},[93565,93566],{"id":89825,"depth":710,"text":89826},{"id":89859,"depth":710,"text":89860},{"id":90588,"depth":698,"text":90589,"children":93568},[93569,93570,93571,93572],{"id":90592,"depth":710,"text":90593},{"id":91550,"depth":710,"text":91551},{"id":92492,"depth":710,"text":92493},{"id":92566,"depth":710,"text":92567},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77435,"description":24374},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93579,"title":93580,"body":93581,"description":93592,"extension":1082,"meta":93593,"navigation":1084,"path":93595,"seo":93596,"stem":93597,"__hash__":93598},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93582,"toc":93590},[93583],[19,93584,93585,93586],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[22,93587,93588],{"href":93588,"rel":93589},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[26],{"title":395,"searchDepth":698,"depth":698,"links":93591},[],"三件套第三套学习",{"category":93594},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93580,"description":93592},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93600,"title":93601,"body":93602,"description":24374,"extension":1082,"meta":93707,"navigation":1084,"path":93708,"seo":93709,"stem":93710,"__hash__":93711},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93603,"toc":93702},[93604,93611,93614,93617,93620,93624,93633,93636,93639,93643,93652,93655,93659,93662,93682,93685,93699],[19,93605,93606],{},[22,93607,93610],{"href":93608,"rel":93609},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[26],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93612,93601],{"id":93613},"_1安装",[19,93615,93616],{},"numpy是科学计算基础库,底层是C语言",[19,93618,93619],{},"三种方式：",[1099,93621,93623],{"id":93622},"_11-通过pip安装","1.1 通过pip安装",[416,93625,93627],{"className":31133,"code":93626,"language":31135,"meta":395,"style":395},"pip install numpy\n",[422,93628,93629],{"__ignoreMap":395},[425,93630,93631],{"class":427,"line":428},[425,93632,93626],{"class":701},[19,93634,93635],{},"首选方式，自动处理依赖项",[19,93637,93638],{},"在提示系统命令符中使用cmd",[1099,93640,93642],{"id":93641},"_12-通过anaconda安装","1.2 通过Anaconda安装",[416,93644,93646],{"className":31133,"code":93645,"language":31135,"meta":395,"style":395},"conda install numpy\n",[422,93647,93648],{"__ignoreMap":395},[425,93649,93650],{"class":427,"line":428},[425,93651,93645],{"class":701},[19,93653,93654],{},"自动解决环境依赖",[1099,93656,93658],{"id":93657},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,93660,93661],{},"对于Debian\u002FUbuntu",[416,93663,93665],{"className":31133,"code":93664,"language":31135,"meta":395,"style":395},"sudo apt-get install python3-numpy\n",[422,93666,93667],{"__ignoreMap":395},[425,93668,93669,93672,93674,93677,93679],{"class":427,"line":428},[425,93670,93671],{"class":701},"sudo apt",[425,93673,1680],{"class":1155},[425,93675,93676],{"class":701},"get install python3",[425,93678,1680],{"class":1155},[425,93680,93681],{"class":701},"numpy\n",[19,93683,93684],{},"对于Fedora:",[416,93686,93688],{"className":31133,"code":93687,"language":31135,"meta":395,"style":395},"sudo dnf install python3-numpy\n",[422,93689,93690],{"__ignoreMap":395},[425,93691,93692,93695,93697],{"class":427,"line":428},[425,93693,93694],{"class":701},"sudo dnf install python3",[425,93696,1680],{"class":1155},[425,93698,93681],{"class":701},[1074,93700,93701],{},"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":395,"searchDepth":698,"depth":698,"links":93703},[93704,93705,93706],{"id":93622,"depth":698,"text":93623},{"id":93641,"depth":698,"text":93642},{"id":93657,"depth":698,"text":93658},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93601,"description":24374},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93713,"title":93714,"body":93715,"description":24374,"extension":1082,"meta":93828,"navigation":1084,"path":93829,"seo":93830,"stem":93831,"__hash__":93832},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93716,"toc":93826},[93717,93720,93723,93726,93729,93732,93735,93738,93741,93744,93820,93823],[10,93718,93714],{"id":93719},"_10算数函数",[19,93721,93722],{},"加减乘除运算跟python基础语法没区别",[19,93724,93725],{},"除了python那种方法外还可以使用函数",[19,93727,93728],{},"加：np.add(a,b)",[19,93730,93731],{},"减：np.subtract(a,b)",[19,93733,93734],{},"乘：np.multiply(a,b)",[19,93736,93737],{},"除：np.divide(a,b) == a\u002Fb",[19,93739,93740],{},"取余：np.mod(a,b) == a%b",[19,93742,93743],{},"必须会的用法：",[416,93745,93747],{"className":31133,"code":93746,"language":31135,"meta":395,"style":395},"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",[422,93748,93749,93771,93792,93802,93815],{"__ignoreMap":395},[425,93750,93751,93753,93755,93758,93760,93763,93765,93767,93769],{"class":427,"line":428},[425,93752,22],{"class":701},[425,93754,1204],{"class":1155},[425,93756,93757],{"class":701},"np.arange(",[425,93759,1569],{"class":691},[425,93761,93762],{"class":701},").reshape(",[425,93764,1229],{"class":691},[425,93766,1527],{"class":701},[425,93768,1229],{"class":691},[425,93770,1165],{"class":701},[425,93772,93773,93775,93777,93780,93782,93784,93786,93788,93790],{"class":427,"line":698},[425,93774,1412],{"class":701},[425,93776,1204],{"class":1155},[425,93778,93779],{"class":701},"np.array([",[425,93781,1594],{"class":691},[425,93783,1527],{"class":701},[425,93785,1594],{"class":691},[425,93787,1527],{"class":701},[425,93789,1594],{"class":691},[425,93791,5657],{"class":701},[425,93793,93794,93797,93799],{"class":427,"line":710},[425,93795,93796],{"class":701},"result",[425,93798,1204],{"class":1155},[425,93800,93801],{"class":701},"np.empty_like(a)\n",[425,93803,93804,93807,93810,93812],{"class":427,"line":721},[425,93805,93806],{"class":701},"np.add(a,b,",[425,93808,93809],{"class":6216},"out",[425,93811,1204],{"class":1155},[425,93813,93814],{"class":701},"result)\n",[425,93816,93817],{"class":427,"line":735},[425,93818,93819],{"class":701},"result\n",[19,93821,93822],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[1074,93824,93825],{},"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":395,"searchDepth":698,"depth":698,"links":93827},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93714,"description":24374},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93834,"title":93835,"body":93836,"description":24374,"extension":1082,"meta":94598,"navigation":1084,"path":94599,"seo":94600,"stem":94601,"__hash__":94602},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93837,"toc":94585},[93838,93841,93844,93847,93851,93890,93894,93938,93998,94002,94005,94044,94047,94092,94096,94132,94136,94205,94209,94273,94277,94280,94283,94286,94289,94325,94329,94369,94373,94445,94448,94452,94515,94519,94582],[10,93839,93835],{"id":93840},"_11统计函数",[19,93842,93843],{},"sum max min mean",[19,93845,93846],{},"这些有axis参数，可以指定方向",[1099,93848,93850],{"id":93849},"_111-sum求和函数","11.1 sum()求和函数",[416,93852,93854],{"className":31133,"code":93853,"language":31135,"meta":395,"style":395},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[422,93855,93856,93861,93882],{"__ignoreMap":395},[425,93857,93858],{"class":427,"line":428},[425,93859,93860],{"class":1216},"#创建一维数组\n",[425,93862,93863,93865,93867,93870,93872,93874,93876,93878,93880],{"class":427,"line":698},[425,93864,22],{"class":701},[425,93866,1204],{"class":1155},[425,93868,93869],{"class":701},"np.random.randint(",[425,93871,1367],{"class":691},[425,93873,1527],{"class":701},[425,93875,1460],{"class":691},[425,93877,1527],{"class":701},[425,93879,1848],{"class":691},[425,93881,1165],{"class":701},[425,93883,93884,93887],{"class":427,"line":710},[425,93885,93886],{"class":701},"np.sum(a)",[425,93888,93889],{"class":1216},"#求和\n",[1099,93891,93893],{"id":93892},"_112-max求最大值函数","11.2 max()求最大值函数",[416,93895,93897],{"className":31133,"code":93896,"language":31135,"meta":395,"style":395},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[422,93898,93899,93903,93923,93928,93933],{"__ignoreMap":395},[425,93900,93901],{"class":427,"line":428},[425,93902,93860],{"class":1216},[425,93904,93905,93907,93909,93911,93913,93915,93917,93919,93921],{"class":427,"line":698},[425,93906,22],{"class":701},[425,93908,1204],{"class":1155},[425,93910,93869],{"class":701},[425,93912,1367],{"class":691},[425,93914,1527],{"class":701},[425,93916,1460],{"class":691},[425,93918,1527],{"class":701},[425,93920,1848],{"class":691},[425,93922,1165],{"class":701},[425,93924,93925],{"class":427,"line":710},[425,93926,93927],{"class":701},"np.max(a)\n",[425,93929,93930],{"class":427,"line":721},[425,93931,93932],{"class":1216},"#最大索引(求最大元素的索引)arg\n",[425,93934,93935],{"class":427,"line":735},[425,93936,93937],{"class":701},"np.argmax(a)\n",[416,93939,93941],{"className":31133,"code":93940,"language":31135,"meta":395,"style":395},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[422,93942,93943,93964,93984,93988],{"__ignoreMap":395},[425,93944,93945,93947,93949,93952,93954,93956,93958,93960,93962],{"class":427,"line":428},[425,93946,11918],{"class":701},[425,93948,1204],{"class":1155},[425,93950,93951],{"class":701}," np.array([",[425,93953,1367],{"class":691},[425,93955,13434],{"class":701},[425,93957,1468],{"class":691},[425,93959,13434],{"class":701},[425,93961,1229],{"class":691},[425,93963,5657],{"class":701},[425,93965,93966,93968,93970,93972,93974,93976,93978,93980,93982],{"class":427,"line":698},[425,93967,11944],{"class":701},[425,93969,1204],{"class":1155},[425,93971,93951],{"class":701},[425,93973,1229],{"class":691},[425,93975,13434],{"class":701},[425,93977,1235],{"class":691},[425,93979,13434],{"class":701},[425,93981,1442],{"class":691},[425,93983,5657],{"class":701},[425,93985,93986],{"class":427,"line":710},[425,93987,3400],{"emptyLinePlaceholder":1084},[425,93989,93990,93992,93995],{"class":427,"line":721},[425,93991,31170],{"class":691},[425,93993,93994],{"class":701},"(np.maximum(a, b))   ",[425,93996,93997],{"class":1216},"# [3 5 4]，每个位置上取较大值\n",[1099,93999,94001],{"id":94000},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,94003,94004],{},"①一维数组：",[416,94006,94008],{"className":31133,"code":94007,"language":31135,"meta":395,"style":395},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[422,94009,94010,94014,94034,94039],{"__ignoreMap":395},[425,94011,94012],{"class":427,"line":428},[425,94013,93860],{"class":1216},[425,94015,94016,94018,94020,94022,94024,94026,94028,94030,94032],{"class":427,"line":698},[425,94017,22],{"class":701},[425,94019,1204],{"class":1155},[425,94021,93869],{"class":701},[425,94023,1367],{"class":691},[425,94025,1527],{"class":701},[425,94027,1460],{"class":691},[425,94029,1527],{"class":701},[425,94031,1848],{"class":691},[425,94033,1165],{"class":701},[425,94035,94036],{"class":427,"line":710},[425,94037,94038],{"class":1216},"#求平均值\n",[425,94040,94041],{"class":427,"line":721},[425,94042,94043],{"class":701},"np.mean(a)\n",[19,94045,94046],{},"②二维数组",[416,94048,94050],{"className":31133,"code":94049,"language":31135,"meta":395,"style":395},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[422,94051,94052,94057,94082,94087],{"__ignoreMap":395},[425,94053,94054],{"class":427,"line":428},[425,94055,94056],{"class":1216},"#二维数组\n",[425,94058,94059,94062,94064,94066,94068,94070,94072,94074,94076,94078,94080],{"class":427,"line":698},[425,94060,94061],{"class":701},"aa",[425,94063,1204],{"class":1155},[425,94065,93757],{"class":701},[425,94067,1367],{"class":691},[425,94069,1527],{"class":701},[425,94071,1671],{"class":691},[425,94073,93762],{"class":701},[425,94075,1229],{"class":691},[425,94077,1527],{"class":701},[425,94079,1442],{"class":691},[425,94081,1165],{"class":701},[425,94083,94084],{"class":427,"line":710},[425,94085,94086],{"class":1216},"#对数组中的所有数求平均\n",[425,94088,94089],{"class":427,"line":721},[425,94090,94091],{"class":701},"np.mean(aa)\n",[1099,94093,94095],{"id":94094},"_114-median求中位数函数","11.4 median()求中位数函数",[416,94097,94099],{"className":31133,"code":94098,"language":31135,"meta":395,"style":395},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[422,94100,94101,94106,94122,94127],{"__ignoreMap":395},[425,94102,94103],{"class":427,"line":428},[425,94104,94105],{"class":1216},"#求中位数\n",[425,94107,94108,94110,94112,94114,94116,94118,94120],{"class":427,"line":698},[425,94109,1412],{"class":701},[425,94111,1204],{"class":1155},[425,94113,93757],{"class":701},[425,94115,1367],{"class":691},[425,94117,1527],{"class":701},[425,94119,1594],{"class":691},[425,94121,1165],{"class":701},[425,94123,94124],{"class":427,"line":710},[425,94125,94126],{"class":701},"np.median(b)\n",[425,94128,94129],{"class":427,"line":721},[425,94130,94131],{"class":1216},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[1099,94133,94135],{"id":94134},"_115-power求幂运算函数","11.5 power()求幂运算函数",[416,94137,94139],{"className":31133,"code":94138,"language":31135,"meta":395,"style":395},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[422,94140,94141,94157,94162,94167,94176,94181,94190],{"__ignoreMap":395},[425,94142,94143,94145,94147,94149,94151,94153,94155],{"class":427,"line":428},[425,94144,1412],{"class":701},[425,94146,1204],{"class":1155},[425,94148,93757],{"class":701},[425,94150,1367],{"class":691},[425,94152,1527],{"class":701},[425,94154,1594],{"class":691},[425,94156,1165],{"class":701},[425,94158,94159],{"class":427,"line":698},[425,94160,94161],{"class":1216},"#幂运算\n",[425,94163,94164],{"class":427,"line":710},[425,94165,94166],{"class":1216},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[425,94168,94169,94172,94174],{"class":427,"line":721},[425,94170,94171],{"class":701},"np.power(b,",[425,94173,1235],{"class":691},[425,94175,1165],{"class":701},[425,94177,94178],{"class":427,"line":735},[425,94179,94180],{"class":1216},"#或者以下代码，将数据存储起来\n",[425,94182,94183,94185,94187],{"class":427,"line":743},[425,94184,1993],{"class":701},[425,94186,1204],{"class":1155},[425,94188,94189],{"class":701},"np.empty_like(b)\n",[425,94191,94192,94194,94196,94198,94200,94202],{"class":427,"line":751},[425,94193,94171],{"class":701},[425,94195,1235],{"class":691},[425,94197,1527],{"class":701},[425,94199,93809],{"class":6216},[425,94201,1204],{"class":1155},[425,94203,94204],{"class":701},"y)\n",[1099,94206,94208],{"id":94207},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[416,94210,94212],{"className":31133,"code":94211,"language":31135,"meta":395,"style":395},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[422,94213,94214,94230,94235,94240,94244,94262],{"__ignoreMap":395},[425,94215,94216,94218,94220,94222,94224,94226,94228],{"class":427,"line":428},[425,94217,1412],{"class":701},[425,94219,1204],{"class":1155},[425,94221,93757],{"class":701},[425,94223,1367],{"class":691},[425,94225,1527],{"class":701},[425,94227,1594],{"class":691},[425,94229,1165],{"class":701},[425,94231,94232],{"class":427,"line":698},[425,94233,94234],{"class":1216},"#开方\n",[425,94236,94237],{"class":427,"line":710},[425,94238,94239],{"class":701},"np.sqrt(b)\n",[425,94241,94242],{"class":427,"line":721},[425,94243,94180],{"class":1216},[425,94245,94246,94248,94250,94253,94256,94258,94260],{"class":427,"line":735},[425,94247,1993],{"class":701},[425,94249,1204],{"class":1155},[425,94251,94252],{"class":701},"np.empty_like(b,",[425,94254,94255],{"class":6216},"dtype",[425,94257,1204],{"class":1155},[425,94259,1198],{"class":691},[425,94261,1165],{"class":701},[425,94263,94264,94267,94269,94271],{"class":427,"line":743},[425,94265,94266],{"class":701},"np.sqrt(b,",[425,94268,93809],{"class":6216},[425,94270,1204],{"class":1155},[425,94272,94204],{"class":701},[1099,94274,94276],{"id":94275},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,94278,94279],{},"对数组中的元素累计求和，可指定轴",[19,94281,94282],{},"#累计求和的意思是：",[19,94284,94285],{},"a = np.array([1, 2, 3, 4])",[19,94287,94288],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[416,94290,94292],{"className":31133,"code":94291,"language":31135,"meta":395,"style":395},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[422,94293,94294,94310,94315,94320],{"__ignoreMap":395},[425,94295,94296,94298,94300,94302,94304,94306,94308],{"class":427,"line":428},[425,94297,1412],{"class":701},[425,94299,1204],{"class":1155},[425,94301,93757],{"class":701},[425,94303,1367],{"class":691},[425,94305,1527],{"class":701},[425,94307,1594],{"class":691},[425,94309,1165],{"class":701},[425,94311,94312],{"class":427,"line":698},[425,94313,94314],{"class":701},"np.cumsum(b)\n",[425,94316,94317],{"class":427,"line":710},[425,94318,94319],{"class":1216},"#结果：\n",[425,94321,94322],{"class":427,"line":721},[425,94323,94324],{"class":1216},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[1099,94326,94328],{"id":94327},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[416,94330,94332],{"className":31133,"code":94331,"language":31135,"meta":395,"style":395},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[422,94333,94334,94350,94355,94360,94364],{"__ignoreMap":395},[425,94335,94336,94338,94340,94342,94344,94346,94348],{"class":427,"line":428},[425,94337,1412],{"class":701},[425,94339,1204],{"class":1155},[425,94341,93757],{"class":701},[425,94343,1367],{"class":691},[425,94345,1527],{"class":701},[425,94347,1594],{"class":691},[425,94349,1165],{"class":701},[425,94351,94352],{"class":427,"line":698},[425,94353,94354],{"class":1216},"#对数组中的元素累计求积，可指定轴\n",[425,94356,94357],{"class":427,"line":710},[425,94358,94359],{"class":701},"np.cumprod(b)\n",[425,94361,94362],{"class":427,"line":721},[425,94363,94319],{"class":1216},[425,94365,94366],{"class":427,"line":735},[425,94367,94368],{"class":1216},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[1099,94370,94372],{"id":94371},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[416,94374,94376],{"className":31133,"code":94375,"language":31135,"meta":395,"style":395},"#删除数组中的重复数据，并对数据进行排序\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",[422,94377,94378,94383,94431,94436,94440],{"__ignoreMap":395},[425,94379,94380],{"class":427,"line":428},[425,94381,94382],{"class":1216},"#删除数组中的重复数据，并对数据进行排序\n",[425,94384,94385,94387,94389,94391,94393,94395,94397,94399,94401,94403,94405,94407,94409,94411,94413,94415,94417,94419,94421,94423,94425,94427,94429],{"class":427,"line":698},[425,94386,22],{"class":701},[425,94388,1204],{"class":1155},[425,94390,93779],{"class":701},[425,94392,1367],{"class":691},[425,94394,1527],{"class":701},[425,94396,1235],{"class":691},[425,94398,1527],{"class":701},[425,94400,1229],{"class":691},[425,94402,1527],{"class":701},[425,94404,1646],{"class":691},[425,94406,1527],{"class":701},[425,94408,1229],{"class":691},[425,94410,1527],{"class":701},[425,94412,1594],{"class":691},[425,94414,1527],{"class":701},[425,94416,1347],{"class":691},[425,94418,1527],{"class":701},[425,94420,1341],{"class":691},[425,94422,1527],{"class":701},[425,94424,1923],{"class":691},[425,94426,1527],{"class":701},[425,94428,1442],{"class":691},[425,94430,5657],{"class":701},[425,94432,94433],{"class":427,"line":710},[425,94434,94435],{"class":701},"np.unique(a)\n",[425,94437,94438],{"class":427,"line":721},[425,94439,94319],{"class":1216},[425,94441,94442],{"class":427,"line":735},[425,94443,94444],{"class":1216},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,94446,94447],{},"升序形式排序",[1099,94449,94451],{"id":94450},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[416,94453,94455],{"className":31133,"code":94454,"language":31135,"meta":395,"style":395},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[422,94456,94457,94505,94510],{"__ignoreMap":395},[425,94458,94459,94461,94463,94465,94467,94469,94471,94473,94475,94477,94479,94481,94483,94485,94487,94489,94491,94493,94495,94497,94499,94501,94503],{"class":427,"line":428},[425,94460,22],{"class":701},[425,94462,1204],{"class":1155},[425,94464,93779],{"class":701},[425,94466,1367],{"class":691},[425,94468,1527],{"class":701},[425,94470,1235],{"class":691},[425,94472,1527],{"class":701},[425,94474,1229],{"class":691},[425,94476,1527],{"class":701},[425,94478,1646],{"class":691},[425,94480,1527],{"class":701},[425,94482,1229],{"class":691},[425,94484,1527],{"class":701},[425,94486,1594],{"class":691},[425,94488,1527],{"class":701},[425,94490,1347],{"class":691},[425,94492,1527],{"class":701},[425,94494,1341],{"class":691},[425,94496,1527],{"class":701},[425,94498,1923],{"class":691},[425,94500,1527],{"class":701},[425,94502,1442],{"class":691},[425,94504,5657],{"class":701},[425,94506,94507],{"class":427,"line":698},[425,94508,94509],{"class":1216},"#返回数组中非零元素的索引\n",[425,94511,94512],{"class":427,"line":710},[425,94513,94514],{"class":701},"np.nonzero(a)\n",[1099,94516,94518],{"id":94517},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[416,94520,94522],{"className":31133,"code":94521,"language":31135,"meta":395,"style":395},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[422,94523,94524,94572,94577],{"__ignoreMap":395},[425,94525,94526,94528,94530,94532,94534,94536,94538,94540,94542,94544,94546,94548,94550,94552,94554,94556,94558,94560,94562,94564,94566,94568,94570],{"class":427,"line":428},[425,94527,22],{"class":701},[425,94529,1204],{"class":1155},[425,94531,93779],{"class":701},[425,94533,1367],{"class":691},[425,94535,1527],{"class":701},[425,94537,1235],{"class":691},[425,94539,1527],{"class":701},[425,94541,1229],{"class":691},[425,94543,1527],{"class":701},[425,94545,1646],{"class":691},[425,94547,1527],{"class":701},[425,94549,1229],{"class":691},[425,94551,1527],{"class":701},[425,94553,1594],{"class":691},[425,94555,1527],{"class":701},[425,94557,1347],{"class":691},[425,94559,1527],{"class":701},[425,94561,1341],{"class":691},[425,94563,1527],{"class":701},[425,94565,1923],{"class":691},[425,94567,1527],{"class":701},[425,94569,1442],{"class":691},[425,94571,5657],{"class":701},[425,94573,94574],{"class":427,"line":698},[425,94575,94576],{"class":1216},"#计算一组数中最大值与最小值的差，可指定轴\n",[425,94578,94579],{"class":427,"line":710},[425,94580,94581],{"class":701},"np.ptp(a)\n",[1074,94583,94584],{},"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":395,"searchDepth":698,"depth":698,"links":94586},[94587,94588,94589,94590,94591,94592,94593,94594,94595,94596,94597],{"id":93849,"depth":698,"text":93850},{"id":93892,"depth":698,"text":93893},{"id":94000,"depth":698,"text":94001},{"id":94094,"depth":698,"text":94095},{"id":94134,"depth":698,"text":94135},{"id":94207,"depth":698,"text":94208},{"id":94275,"depth":698,"text":94276},{"id":94327,"depth":698,"text":94328},{"id":94371,"depth":698,"text":94372},{"id":94450,"depth":698,"text":94451},{"id":94517,"depth":698,"text":94518},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93835,"description":24374},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94604,"title":94605,"body":94606,"description":24374,"extension":1082,"meta":95261,"navigation":1084,"path":95262,"seo":95263,"stem":95264,"__hash__":95265},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94607,"toc":95249},[94608,94611,94615,94618,94834,94838,94841,95050,95054,95120,95125,95129,95132,95135,95173,95177,95180,95185,95189,95192,95195,95200,95204,95207,95211,95214,95217,95222,95226,95229,95232,95237,95241,95246],[10,94609,94605],{"id":94610},"_12其他常用函数",[1099,94612,94614],{"id":94613},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,94616,94617],{},"将数组的数据按照行列复制扩展",[416,94619,94621],{"className":31133,"code":94620,"language":31135,"meta":395,"style":395},"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",[422,94622,94623,94639,94648,94652,94657,94662,94675,94679,94684,94689,94694,94698,94703,94727,94739,94743,94747,94752,94757,94762,94767,94771,94784,94788,94792,94797,94802,94807,94812,94817,94821,94825,94830],{"__ignoreMap":395},[425,94624,94625,94627,94629,94631,94633,94635,94637],{"class":427,"line":428},[425,94626,22],{"class":701},[425,94628,1204],{"class":1155},[425,94630,93757],{"class":701},[425,94632,1367],{"class":691},[425,94634,1527],{"class":701},[425,94636,1468],{"class":691},[425,94638,1165],{"class":701},[425,94640,94641,94644,94646],{"class":427,"line":698},[425,94642,94643],{"class":701},"np.tile(a,",[425,94645,1235],{"class":691},[425,94647,1165],{"class":701},[425,94649,94650],{"class":427,"line":710},[425,94651,94319],{"class":1216},[425,94653,94654],{"class":427,"line":721},[425,94655,94656],{"class":1216},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[425,94658,94659],{"class":427,"line":735},[425,94660,94661],{"class":1216},"#行复制两次，列复制三次\n",[425,94663,94664,94667,94669,94671,94673],{"class":427,"line":743},[425,94665,94666],{"class":701},"np.tile(a,(",[425,94668,1235],{"class":691},[425,94670,1527],{"class":701},[425,94672,1229],{"class":691},[425,94674,31252],{"class":701},[425,94676,94677],{"class":427,"line":751},[425,94678,94319],{"class":1216},[425,94680,94681],{"class":427,"line":759},[425,94682,94683],{"class":435},"'''\n",[425,94685,94686],{"class":427,"line":770},[425,94687,94688],{"class":435},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[425,94690,94691],{"class":427,"line":780},[425,94692,94693],{"class":435},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[425,94695,94696],{"class":427,"line":790},[425,94697,94683],{"class":435},[425,94699,94700],{"class":427,"line":805},[425,94701,94702],{"class":1216},"#创建二维数组\n",[425,94704,94705,94707,94709,94711,94713,94715,94717,94719,94721,94723,94725],{"class":427,"line":818},[425,94706,94061],{"class":701},[425,94708,1204],{"class":1155},[425,94710,93757],{"class":701},[425,94712,1367],{"class":691},[425,94714,1527],{"class":701},[425,94716,1671],{"class":691},[425,94718,93762],{"class":701},[425,94720,1442],{"class":691},[425,94722,1527],{"class":701},[425,94724,1229],{"class":691},[425,94726,1165],{"class":701},[425,94728,94729,94732,94734,94736],{"class":427,"line":831},[425,94730,94731],{"class":701},"np.tile(aa,",[425,94733,1235],{"class":691},[425,94735,895],{"class":701},[425,94737,94738],{"class":1216},"#一个数的时候就是行\n",[425,94740,94741],{"class":427,"line":841},[425,94742,94319],{"class":1216},[425,94744,94745],{"class":427,"line":852},[425,94746,94683],{"class":435},[425,94748,94749],{"class":427,"line":862},[425,94750,94751],{"class":435},"array([[ 1,  2,  3,  1,  2,  3],\n",[425,94753,94754],{"class":427,"line":878},[425,94755,94756],{"class":435},"       [ 4,  5,  6,  4,  5,  6],\n",[425,94758,94759],{"class":427,"line":914},[425,94760,94761],{"class":435},"       [ 7,  8,  9,  7,  8,  9],\n",[425,94763,94764],{"class":427,"line":943},[425,94765,94766],{"class":435},"       [10, 11, 12, 10, 11, 12]])\n",[425,94768,94769],{"class":427,"line":956},[425,94770,94683],{"class":435},[425,94772,94773,94776,94778,94780,94782],{"class":427,"line":964},[425,94774,94775],{"class":701},"np.tile(aa,(",[425,94777,1235],{"class":691},[425,94779,1527],{"class":701},[425,94781,1229],{"class":691},[425,94783,31252],{"class":701},[425,94785,94786],{"class":427,"line":2733},[425,94787,94319],{"class":1216},[425,94789,94790],{"class":427,"line":2750},[425,94791,94683],{"class":435},[425,94793,94794],{"class":427,"line":2755},[425,94795,94796],{"class":435},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[425,94798,94799],{"class":427,"line":2760},[425,94800,94801],{"class":435},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[425,94803,94804],{"class":427,"line":2765},[425,94805,94806],{"class":435},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[425,94808,94809],{"class":427,"line":2779},[425,94810,94811],{"class":435},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[425,94813,94814],{"class":427,"line":2784},[425,94815,94816],{"class":435},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[425,94818,94819],{"class":427,"line":3577},[425,94820,94801],{"class":435},[425,94822,94823],{"class":427,"line":3591},[425,94824,94806],{"class":435},[425,94826,94827],{"class":427,"line":3599},[425,94828,94829],{"class":435},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[425,94831,94832],{"class":427,"line":3604},[425,94833,94683],{"class":435},[1099,94835,94837],{"id":94836},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,94839,94840],{},"repeat()将数组中的每个元素重复若干次",[416,94842,94844],{"className":31133,"code":94843,"language":31135,"meta":395,"style":395},"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",[422,94845,94846,94862,94871,94875,94880,94904,94909,94918,94922,94927,94931,94936,94952,94956,94960,94965,94970,94975,94979,94984,94988,94993,94998,95002,95018,95022,95026,95031,95036,95041,95046],{"__ignoreMap":395},[425,94847,94848,94850,94852,94854,94856,94858,94860],{"class":427,"line":428},[425,94849,22],{"class":701},[425,94851,1204],{"class":1155},[425,94853,93757],{"class":701},[425,94855,1367],{"class":691},[425,94857,1527],{"class":701},[425,94859,1468],{"class":691},[425,94861,1165],{"class":701},[425,94863,94864,94867,94869],{"class":427,"line":698},[425,94865,94866],{"class":701},"np.repeat(a,",[425,94868,1229],{"class":691},[425,94870,1165],{"class":701},[425,94872,94873],{"class":427,"line":710},[425,94874,94319],{"class":1216},[425,94876,94877],{"class":427,"line":721},[425,94878,94879],{"class":1216},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[425,94881,94882,94884,94886,94888,94890,94892,94894,94896,94898,94900,94902],{"class":427,"line":735},[425,94883,94061],{"class":701},[425,94885,1204],{"class":1155},[425,94887,93757],{"class":701},[425,94889,1367],{"class":691},[425,94891,1527],{"class":701},[425,94893,1671],{"class":691},[425,94895,93762],{"class":701},[425,94897,1442],{"class":691},[425,94899,1527],{"class":701},[425,94901,1229],{"class":691},[425,94903,1165],{"class":701},[425,94905,94906],{"class":427,"line":743},[425,94907,94908],{"class":1216},"#这个重复之后二维变成一维\n",[425,94910,94911,94914,94916],{"class":427,"line":751},[425,94912,94913],{"class":701},"np.repeat(aa,",[425,94915,1235],{"class":691},[425,94917,1165],{"class":701},[425,94919,94920],{"class":427,"line":759},[425,94921,94683],{"class":435},[425,94923,94924],{"class":427,"line":770},[425,94925,94926],{"class":435},"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",[425,94928,94929],{"class":427,"line":780},[425,94930,94683],{"class":435},[425,94932,94933],{"class":427,"line":790},[425,94934,94935],{"class":1216},"#指定axis\n",[425,94937,94938,94940,94942,94944,94946,94948,94950],{"class":427,"line":805},[425,94939,94913],{"class":701},[425,94941,1235],{"class":691},[425,94943,1527],{"class":701},[425,94945,48269],{"class":6216},[425,94947,1204],{"class":1155},[425,94949,1341],{"class":691},[425,94951,1165],{"class":701},[425,94953,94954],{"class":427,"line":818},[425,94955,94319],{"class":1216},[425,94957,94958],{"class":427,"line":831},[425,94959,94683],{"class":435},[425,94961,94962],{"class":427,"line":841},[425,94963,94964],{"class":435},"array([[ 1,  2,  3],\n",[425,94966,94967],{"class":427,"line":852},[425,94968,94969],{"class":435},"       [ 1,  2,  3],\n",[425,94971,94972],{"class":427,"line":862},[425,94973,94974],{"class":435},"       [ 4,  5,  6],\n",[425,94976,94977],{"class":427,"line":878},[425,94978,94974],{"class":435},[425,94980,94981],{"class":427,"line":914},[425,94982,94983],{"class":435},"       [ 7,  8,  9],\n",[425,94985,94986],{"class":427,"line":943},[425,94987,94983],{"class":435},[425,94989,94990],{"class":427,"line":956},[425,94991,94992],{"class":435},"       [10, 11, 12],\n",[425,94994,94995],{"class":427,"line":964},[425,94996,94997],{"class":435},"       [10, 11, 12]])\n",[425,94999,95000],{"class":427,"line":2733},[425,95001,94683],{"class":435},[425,95003,95004,95006,95008,95010,95012,95014,95016],{"class":427,"line":2750},[425,95005,94913],{"class":701},[425,95007,1235],{"class":691},[425,95009,1527],{"class":701},[425,95011,48269],{"class":6216},[425,95013,1204],{"class":1155},[425,95015,1367],{"class":691},[425,95017,1165],{"class":701},[425,95019,95020],{"class":427,"line":2755},[425,95021,94319],{"class":1216},[425,95023,95024],{"class":427,"line":2760},[425,95025,94683],{"class":435},[425,95027,95028],{"class":427,"line":2765},[425,95029,95030],{"class":435},"array([[ 1,  1,  2,  2,  3,  3],\n",[425,95032,95033],{"class":427,"line":2779},[425,95034,95035],{"class":435},"       [ 4,  4,  5,  5,  6,  6],\n",[425,95037,95038],{"class":427,"line":2784},[425,95039,95040],{"class":435},"       [ 7,  7,  8,  8,  9,  9],\n",[425,95042,95043],{"class":427,"line":3577},[425,95044,95045],{"class":435},"       [10, 10, 11, 11, 12, 12]])\n",[425,95047,95048],{"class":427,"line":3591},[425,95049,94683],{"class":435},[1099,95051,95053],{"id":95052},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[416,95055,95057],{"className":31133,"code":95056,"language":31135,"meta":395,"style":395},"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",[422,95058,95059,95075,95080,95092,95096,95101,95111,95115],{"__ignoreMap":395},[425,95060,95061,95063,95065,95067,95069,95071,95073],{"class":427,"line":428},[425,95062,22],{"class":701},[425,95064,1204],{"class":1155},[425,95066,93757],{"class":701},[425,95068,1367],{"class":691},[425,95070,1527],{"class":701},[425,95072,1468],{"class":691},[425,95074,1165],{"class":701},[425,95076,95077],{"class":427,"line":698},[425,95078,95079],{"class":1216},"#array([，2，3，4])\n",[425,95081,95082,95085,95087,95089],{"class":427,"line":710},[425,95083,95084],{"class":701},"np.roll(a,",[425,95086,1235],{"class":691},[425,95088,895],{"class":701},[425,95090,95091],{"class":1216},"#传正数向后调多少位，传负数向前调多少位\n",[425,95093,95094],{"class":427,"line":721},[425,95095,94319],{"class":1216},[425,95097,95098],{"class":427,"line":735},[425,95099,95100],{"class":1216},"#array([3, 4, 1, 2])\n",[425,95102,95103,95105,95107,95109],{"class":427,"line":743},[425,95104,95084],{"class":701},[425,95106,1680],{"class":1155},[425,95108,1367],{"class":691},[425,95110,1165],{"class":701},[425,95112,95113],{"class":427,"line":751},[425,95114,94319],{"class":1216},[425,95116,95117],{"class":427,"line":759},[425,95118,95119],{"class":1216},"#array([2, 3, 4, 1])\n",[19,95121,95122],{},[393,95123],{"alt":395,"src":95124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[1099,95126,95128],{"id":95127},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,95130,95131],{},"resize()重新调整数组的大小",[19,95133,95134],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[416,95136,95138],{"className":31133,"code":95137,"language":31135,"meta":395,"style":395},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[422,95139,95140,95145,95158],{"__ignoreMap":395},[425,95141,95142],{"class":427,"line":428},[425,95143,95144],{"class":1216},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[425,95146,95147,95150,95152,95154,95156],{"class":427,"line":698},[425,95148,95149],{"class":701},"np.resize(aa,(",[425,95151,1235],{"class":691},[425,95153,1527],{"class":701},[425,95155,1493],{"class":691},[425,95157,31252],{"class":701},[425,95159,95160,95162,95164,95166,95168,95170],{"class":427,"line":710},[425,95161,95149],{"class":701},[425,95163,1235],{"class":691},[425,95165,1527],{"class":701},[425,95167,1569],{"class":691},[425,95169,83526],{"class":701},[425,95171,95172],{"class":1216},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[1099,95174,95176],{"id":95175},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,95178,95179],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,95181,95182],{},[393,95183],{"alt":395,"src":95184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[1099,95186,95188],{"id":95187},"_126-保存加载文件","12.6 保存加载文件",[19,95190,95191],{},"savetxt():将数据保存到txt文件中",[19,95193,95194],{},"loadtxt():从文件加载数据",[19,95196,95197],{},[393,95198],{"alt":395,"src":95199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[1099,95201,95203],{"id":95202},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,95205,95206],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[1099,95208,95210],{"id":95209},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,95212,95213],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,95215,95216],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,95218,95219],{},[393,95220],{"alt":395,"src":95221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[1099,95223,95225],{"id":95224},"_129-where语句","12.9 where语句",[19,95227,95228],{},"np.where(条件,x,y)",[19,95230,95231],{},"如果条件为True,对应值为x,否则对应值为y",[19,95233,95234],{},[393,95235],{"alt":395,"src":95236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[1099,95238,95240],{"id":95239},"_1210-dot矩阵","12.10 dot()矩阵",[19,95242,95243],{},[393,95244],{"alt":395,"src":95245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[1074,95247,95248],{},"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":395,"searchDepth":698,"depth":698,"links":95250},[95251,95252,95253,95254,95255,95256,95257,95258,95259,95260],{"id":94613,"depth":698,"text":94614},{"id":94836,"depth":698,"text":94837},{"id":95052,"depth":698,"text":95053},{"id":95127,"depth":698,"text":95128},{"id":95175,"depth":698,"text":95176},{"id":95187,"depth":698,"text":95188},{"id":95202,"depth":698,"text":95203},{"id":95209,"depth":698,"text":95210},{"id":95224,"depth":698,"text":95225},{"id":95239,"depth":698,"text":95240},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94605,"description":24374},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":95267,"title":95268,"body":95269,"description":24374,"extension":1082,"meta":95622,"navigation":1084,"path":95623,"seo":95624,"stem":95625,"__hash__":95626},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":95270,"toc":95620},[95271,95274,95277,95280,95283,95286,95351,95353,95617],[10,95272,95268],{"id":95273},"_13数组排序",[19,95275,95276],{},"排序主要用到的方法是np.sort和np.argsort",[19,95278,95279],{},"其中np.sort()对数组直接排序",[19,95281,95282],{},"而np.argsort()是返回排序后的原始索引",[19,95284,95285],{},"①一维数组",[416,95287,95289],{"className":31133,"code":95288,"language":31135,"meta":395,"style":395},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[422,95290,95291,95295,95335,95343],{"__ignoreMap":395},[425,95292,95293],{"class":427,"line":428},[425,95294,93860],{"class":1216},[425,95296,95297,95299,95301,95303,95305,95307,95309,95311,95313,95315,95317,95319,95321,95323,95325,95327,95329,95331,95333],{"class":427,"line":698},[425,95298,22],{"class":701},[425,95300,1204],{"class":1155},[425,95302,93779],{"class":701},[425,95304,1229],{"class":691},[425,95306,1527],{"class":701},[425,95308,1646],{"class":691},[425,95310,1527],{"class":701},[425,95312,1544],{"class":691},[425,95314,1527],{"class":701},[425,95316,1923],{"class":691},[425,95318,1527],{"class":701},[425,95320,1428],{"class":691},[425,95322,1527],{"class":701},[425,95324,2040],{"class":691},[425,95326,1527],{"class":701},[425,95328,1493],{"class":691},[425,95330,1527],{"class":701},[425,95332,1594],{"class":691},[425,95334,5657],{"class":701},[425,95336,95337,95340],{"class":427,"line":710},[425,95338,95339],{"class":701},"np.sort(a)",[425,95341,95342],{"class":1216},"#升序排序\n",[425,95344,95345,95348],{"class":427,"line":721},[425,95346,95347],{"class":701},"np.argsort(a)",[425,95349,95350],{"class":1216},"#按照元素大小来索引排序\n",[19,95352,94046],{},[416,95354,95356],{"className":31133,"code":95355,"language":31135,"meta":395,"style":395},"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",[422,95357,95358,95370,95396,95401,95405,95410,95415,95420,95425,95429,95437,95441,95446,95451,95456,95461,95465,95470,95483,95487,95492,95497,95502,95507,95511,95516,95528,95532,95536,95540,95544,95548,95552,95557,95572,95577,95586,95591,95595,95599,95604,95608,95613],{"__ignoreMap":395},[425,95359,95360,95363,95365,95367],{"class":427,"line":428},[425,95361,95362],{"class":701},"np.random.seed(",[425,95364,1341],{"class":691},[425,95366,895],{"class":701},[425,95368,95369],{"class":1216},"#保证每次值一样\n",[425,95371,95372,95374,95376,95378,95380,95382,95384,95386,95388,95390,95392,95394],{"class":427,"line":698},[425,95373,94061],{"class":701},[425,95375,1204],{"class":1155},[425,95377,93869],{"class":701},[425,95379,1460],{"class":691},[425,95381,1527],{"class":701},[425,95383,32251],{"class":6216},[425,95385,1204],{"class":1155},[425,95387,1159],{"class":701},[425,95389,1442],{"class":691},[425,95391,1527],{"class":701},[425,95393,1493],{"class":691},[425,95395,31252],{"class":701},[425,95397,95398],{"class":427,"line":710},[425,95399,95400],{"class":1216},"#原数组：\n",[425,95402,95403],{"class":427,"line":721},[425,95404,94683],{"class":435},[425,95406,95407],{"class":427,"line":735},[425,95408,95409],{"class":435},"array([[44, 47, 64, 67, 67,  9],\n",[425,95411,95412],{"class":427,"line":743},[425,95413,95414],{"class":435},"       [83, 21, 36, 87, 70, 88],\n",[425,95416,95417],{"class":427,"line":751},[425,95418,95419],{"class":435},"       [88, 12, 58, 65, 39, 87],\n",[425,95421,95422],{"class":427,"line":759},[425,95423,95424],{"class":435},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[425,95426,95427],{"class":427,"line":770},[425,95428,94683],{"class":435},[425,95430,95431,95434],{"class":427,"line":780},[425,95432,95433],{"class":701},"np.sort(aa)",[425,95435,95436],{"class":1216},"#每行进行了排序\n",[425,95438,95439],{"class":427,"line":790},[425,95440,94683],{"class":435},[425,95442,95443],{"class":427,"line":805},[425,95444,95445],{"class":435},"array([[ 9, 44, 47, 64, 67, 67],\n",[425,95447,95448],{"class":427,"line":818},[425,95449,95450],{"class":435},"       [21, 36, 70, 83, 87, 88],\n",[425,95452,95453],{"class":427,"line":831},[425,95454,95455],{"class":435},"       [12, 39, 58, 65, 87, 88],\n",[425,95457,95458],{"class":427,"line":841},[425,95459,95460],{"class":435},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[425,95462,95463],{"class":427,"line":852},[425,95464,94683],{"class":435},[425,95466,95467],{"class":427,"line":862},[425,95468,95469],{"class":1216},"#axis=0时\n",[425,95471,95472,95475,95477,95479,95481],{"class":427,"line":878},[425,95473,95474],{"class":701},"np.sort(aa,",[425,95476,48269],{"class":6216},[425,95478,1204],{"class":1155},[425,95480,1341],{"class":691},[425,95482,1165],{"class":701},[425,95484,95485],{"class":427,"line":914},[425,95486,94683],{"class":435},[425,95488,95489],{"class":427,"line":943},[425,95490,95491],{"class":435},"array([[44, 12, 36, 37, 25,  9],\n",[425,95493,95494],{"class":427,"line":956},[425,95495,95496],{"class":435},"       [46, 21, 58, 65, 39, 77],\n",[425,95498,95499],{"class":427,"line":964},[425,95500,95501],{"class":435},"       [83, 47, 64, 67, 67, 87],\n",[425,95503,95504],{"class":427,"line":2733},[425,95505,95506],{"class":435},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[425,95508,95509],{"class":427,"line":2750},[425,95510,94683],{"class":435},[425,95512,95513],{"class":427,"line":2755},[425,95514,95515],{"class":1216},"#axis=1时,为默认值\n",[425,95517,95518,95520,95522,95524,95526],{"class":427,"line":2760},[425,95519,95474],{"class":701},[425,95521,48269],{"class":6216},[425,95523,1204],{"class":1155},[425,95525,1367],{"class":691},[425,95527,1165],{"class":701},[425,95529,95530],{"class":427,"line":2765},[425,95531,94683],{"class":435},[425,95533,95534],{"class":427,"line":2779},[425,95535,95445],{"class":435},[425,95537,95538],{"class":427,"line":2784},[425,95539,95450],{"class":435},[425,95541,95542],{"class":427,"line":3577},[425,95543,95455],{"class":435},[425,95545,95546],{"class":427,"line":3591},[425,95547,95460],{"class":435},[425,95549,95550],{"class":427,"line":3599},[425,95551,94683],{"class":435},[425,95553,95554],{"class":427,"line":3604},[425,95555,95556],{"class":1216},"#按最后一列排序\n",[425,95558,95559,95561,95563,95566,95568,95570],{"class":427,"line":3610},[425,95560,1412],{"class":701},[425,95562,1204],{"class":1155},[425,95564,95565],{"class":701},"aa[:,",[425,95567,1680],{"class":1155},[425,95569,1367],{"class":691},[425,95571,34001],{"class":701},[425,95573,95574],{"class":427,"line":3616},[425,95575,95576],{"class":1216},"#获取最后一列排好序的索引\n",[425,95578,95579,95581,95583],{"class":427,"line":3621},[425,95580,74813],{"class":701},[425,95582,1204],{"class":1155},[425,95584,95585],{"class":701},"np.argsort(b)\n",[425,95587,95588],{"class":427,"line":8948},[425,95589,95590],{"class":701},"aa[index]\n",[425,95592,95593],{"class":427,"line":8972},[425,95594,94683],{"class":435},[425,95596,95597],{"class":427,"line":8977},[425,95598,95409],{"class":435},[425,95600,95601],{"class":427,"line":8983},[425,95602,95603],{"class":435},"       [46, 88, 81, 37, 25, 77],\n",[425,95605,95606],{"class":427,"line":9010},[425,95607,95419],{"class":435},[425,95609,95610],{"class":427,"line":9015},[425,95611,95612],{"class":435},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[425,95614,95615],{"class":427,"line":9021},[425,95616,94683],{"class":435},[1074,95618,95619],{},"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":395,"searchDepth":698,"depth":698,"links":95621},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":95268,"description":24374},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95628,"title":95629,"body":95630,"description":24374,"extension":1082,"meta":95660,"navigation":1084,"path":95661,"seo":95662,"stem":95663,"__hash__":95664},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95631,"toc":95658},[95632,95635,95638,95641,95644,95647,95650,95653],[10,95633,95629],{"id":95634},"_14广播机制",[19,95636,95637],{},"广播的规则：",[19,95639,95640],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,95642,95643],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,95645,95646],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,95648,95649],{},"3.如果没有维度形状为1，则会引发异常",[19,95651,95652],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,95654,95655],{},[393,95656],{"alt":395,"src":95657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":395,"searchDepth":698,"depth":698,"links":95659},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95629,"description":24374},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95666,"title":95667,"body":95668,"description":24374,"extension":1082,"meta":95766,"navigation":1084,"path":95767,"seo":95768,"stem":95769,"__hash__":95770},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95669,"toc":95764},[95670,95673,95676,95761],[10,95671,95667],{"id":95672},"_15比较掩码",[19,95674,95675],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[416,95677,95679],{"className":31133,"code":95678,"language":31135,"meta":395,"style":395},"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",[422,95680,95681,95727,95738,95752,95756],{"__ignoreMap":395},[425,95682,95683,95685,95687,95690,95692,95694,95696,95698,95700,95702,95704,95706,95708,95710,95712,95714,95716,95718,95720,95722,95724],{"class":427,"line":428},[425,95684,22],{"class":701},[425,95686,1204],{"class":1155},[425,95688,95689],{"class":701},"np.array([[",[425,95691,1367],{"class":691},[425,95693,1527],{"class":701},[425,95695,1235],{"class":691},[425,95697,1527],{"class":701},[425,95699,1229],{"class":691},[425,95701,48785],{"class":701},[425,95703,1620],{"class":691},[425,95705,1527],{"class":701},[425,95707,1646],{"class":691},[425,95709,1527],{"class":701},[425,95711,1671],{"class":691},[425,95713,48785],{"class":701},[425,95715,1873],{"class":691},[425,95717,1527],{"class":701},[425,95719,1898],{"class":691},[425,95721,1527],{"class":701},[425,95723,1923],{"class":691},[425,95725,95726],{"class":701},"]])\n",[425,95728,95729,95731,95733,95735],{"class":427,"line":698},[425,95730,22],{"class":701},[425,95732,2057],{"class":1155},[425,95734,1848],{"class":691},[425,95736,95737],{"class":1216},"#结果是一个由True,False组成的数组\n",[425,95739,95740,95743,95745,95747,95749],{"class":427,"line":710},[425,95741,95742],{"class":701},"a[a",[425,95744,2057],{"class":1155},[425,95746,1848],{"class":691},[425,95748,2087],{"class":701},[425,95750,95751],{"class":1216},"#小于20的元素会存到这个数组中\n",[425,95753,95754],{"class":427,"line":721},[425,95755,94319],{"class":1216},[425,95757,95758],{"class":427,"line":735},[425,95759,95760],{"class":1216},"#array([ 1,  2,  3, 11, 12, 13])\n",[1074,95762,95763],{},"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":395,"searchDepth":698,"depth":698,"links":95765},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95667,"description":24374},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95772,"title":95773,"body":95774,"description":24374,"extension":1082,"meta":95866,"navigation":1084,"path":95867,"seo":95868,"stem":95869,"__hash__":95870},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95775,"toc":95864},[95776,95779,95782,95785,95788,95791,95856,95861],[10,95777,95773],{"id":95778},"_16魔法命令time",[19,95780,95781],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,95783,95784],{},"%:行模式",[19,95786,95787],{},"%%:单元格模式",[19,95789,95790],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[416,95792,95794],{"className":31133,"code":95793,"language":31135,"meta":395,"style":395},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[422,95795,95796,95801,95808,95813,95822,95835,95839,95847],{"__ignoreMap":395},[425,95797,95798],{"class":427,"line":428},[425,95799,95800],{"class":1216},"#程序执行时间\n",[425,95802,95803,95805],{"class":427,"line":698},[425,95804,31147],{"class":1155},[425,95806,95807],{"class":701}," time \n",[425,95809,95810],{"class":427,"line":710},[425,95811,95812],{"class":1216},"#获取时间\n",[425,95814,95815,95818,95820],{"class":427,"line":721},[425,95816,95817],{"class":701},"start",[425,95819,1204],{"class":1155},[425,95821,33173],{"class":701},[425,95823,95824,95827,95830,95832],{"class":427,"line":735},[425,95825,95826],{"class":701},"time.sleep(",[425,95828,95829],{"class":691},"0.4",[425,95831,895],{"class":701},[425,95833,95834],{"class":1216},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[425,95836,95837],{"class":427,"line":743},[425,95838,95812],{"class":1216},[425,95840,95841,95843,95845],{"class":427,"line":751},[425,95842,46556],{"class":701},[425,95844,1204],{"class":1155},[425,95846,33173],{"class":701},[425,95848,95849,95851,95853],{"class":427,"line":759},[425,95850,46556],{"class":701},[425,95852,1680],{"class":1155},[425,95854,95855],{"class":701},"start\n",[19,95857,95858],{},[393,95859],{"alt":395,"src":95860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[1074,95862,95863],{},"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":395,"searchDepth":698,"depth":698,"links":95865},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95773,"description":24374},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95872,"title":95873,"body":95874,"description":24374,"extension":1082,"meta":95909,"navigation":1084,"path":95910,"seo":95911,"stem":95912,"__hash__":95913},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95875,"toc":95907},[95876,95879,95882,95885,95888,95891,95894,95897,95902],[10,95877,95873],{"id":95878},"_17魔法命令timeit",[19,95880,95881],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,95883,95884],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,95886,95887],{},"单元格模式：",[19,95889,95890],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,95892,95893],{},"初始化语句执行次数由轮数来决定",[19,95895,95896],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,95898,95899],{},[393,95900],{"alt":395,"src":95901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,95903,95904],{},[393,95905],{"alt":395,"src":95906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":395,"searchDepth":698,"depth":698,"links":95908},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95873,"description":24374},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95915,"title":95916,"body":95917,"description":24374,"extension":1082,"meta":95935,"navigation":1084,"path":95936,"seo":95937,"stem":95938,"__hash__":95939},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95918,"toc":95933},[95919,95922,95925,95928],[10,95920,95916],{"id":95921},"_18魔法命令writefile和run",[19,95923,95924],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,95926,95927],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,95929,95930],{},[393,95931],{"alt":395,"src":95932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":395,"searchDepth":698,"depth":698,"links":95934},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95916,"description":24374},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95941,"title":95942,"body":95943,"description":24374,"extension":1082,"meta":95996,"navigation":1084,"path":95997,"seo":95998,"stem":95999,"__hash__":96000},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95944,"toc":95994},[95945,95948,95951,95953,95956,95959,95964,95967,95970,95973,95976,95979,95982,95985,95988,95991],[10,95946,95942],{"id":95947},"_19魔法命令memit",[19,95949,95950],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,95952,25592],{},[19,95954,95955],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,95957,95958],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,95960,95961],{},[393,95962],{"alt":395,"src":95963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,95965,95966],{},"补充：",[19,95968,95969],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,95971,95972],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,95974,95975],{},"解决方法：",[19,95977,95978],{},"1.cmd",[19,95980,95981],{},"2.依次输入以下代码：",[19,95983,95984],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,95986,95987],{},"pip install --upgrade ipython",[19,95989,95990],{},"#升级 memory_profiler 和 setuptools",[19,95992,95993],{},"pip install --upgrade memory_profiler setuptools",{"title":395,"searchDepth":698,"depth":698,"links":95995},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95942,"description":24374},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":96002,"title":96003,"body":96004,"description":24374,"extension":1082,"meta":97650,"navigation":1084,"path":97651,"seo":97652,"stem":97653,"__hash__":97654},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":96005,"toc":97620},[96006,96009,96013,96017,96078,96081,96086,96090,96095,96100,96105,96110,96113,96118,96122,96126,96159,96162,96165,96168,96220,96223,96259,96262,96304,96308,96329,96331,96368,96370,96375,96377,96382,96386,96389,96417,96421,96425,96478,96482,96574,96578,96582,96585,96590,96594,96619,96624,96628,96631,96634,96637,96640,96643,96646,96649,96661,96665,96669,96672,96704,96707,96730,96733,96759,96762,96788,96791,96825,96828,96890,96894,96897,96901,96904,96930,96933,96936,96941,96944,97013,97015,97020,97081,97084,97095,97101,97106,97110,97113,97126,97130,97145,97147,97170,97172,97198,97201,97204,97207,97255,97257,97262,97266,97270,97297,97301,97328,97331,97336,97341,97431,97435,97493,97498,97501,97504,97546,97550,97606,97611,97614,97617],[10,96007,96003],{"id":96008},"_2创建数组",[1099,96010,96012],{"id":96011},"_21-array函数创建数组","2.1 array()函数创建数组",[14,96014,96016],{"id":96015},"_221-函数语句","2.2.1 函数语句",[416,96018,96020],{"className":31133,"code":96019,"language":31135,"meta":395,"style":395},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[422,96021,96022],{"__ignoreMap":395},[425,96023,96024,96027,96030,96032,96034,96036,96038,96040,96043,96045,96048,96050,96053,96055,96057,96059,96062,96064,96067,96069,96072,96074,96076],{"class":427,"line":428},[425,96025,96026],{"class":701},"numpy.array(",[425,96028,96029],{"class":691},"object",[425,96031,13434],{"class":701},[425,96033,94255],{"class":6216},[425,96035,14563],{"class":1155},[425,96037,39688],{"class":691},[425,96039,13434],{"class":701},[425,96041,96042],{"class":6216},"copy",[425,96044,14563],{"class":1155},[425,96046,96047],{"class":691}," True",[425,96049,13434],{"class":701},[425,96051,96052],{"class":6216},"order",[425,96054,14563],{"class":1155},[425,96056,39688],{"class":691},[425,96058,13434],{"class":701},[425,96060,96061],{"class":6216},"subok",[425,96063,14563],{"class":1155},[425,96065,96066],{"class":691}," False",[425,96068,13434],{"class":701},[425,96070,96071],{"class":6216},"ndmin",[425,96073,14563],{"class":1155},[425,96075,5093],{"class":691},[425,96077,1165],{"class":701},[19,96079,96080],{},"参数：",[19,96082,96083],{},[393,96084],{"alt":395,"src":96085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[14,96087,96089],{"id":96088},"_222-实例","2.2.2 实例",[19,96091,96092],{},[393,96093],{"alt":395,"src":96094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,96096,96097],{},[393,96098],{"alt":395,"src":96099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,96101,96102],{},[393,96103],{"alt":395,"src":96104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,96106,96107],{},[393,96108],{"alt":395,"src":96109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,96111,96112],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,96114,96115],{},[393,96116],{"alt":395,"src":96117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[1099,96119,96121],{"id":96120},"_22-随机数创建数组","2.2 随机数创建数组",[14,96123,96125],{"id":96124},"_221-random语句","2.2.1 random语句",[416,96127,96129],{"className":31133,"code":96128,"language":31135,"meta":395,"style":395},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[422,96130,96131,96136,96141,96149,96154],{"__ignoreMap":395},[425,96132,96133],{"class":427,"line":428},[425,96134,96135],{"class":1216},"#random.random()\n",[425,96137,96138],{"class":427,"line":698},[425,96139,96140],{"class":1216},"#确定随机种子,就是每次运行结果是相同的\n",[425,96142,96143,96145,96147],{"class":427,"line":710},[425,96144,95362],{"class":701},[425,96146,1341],{"class":691},[425,96148,1165],{"class":701},[425,96150,96151],{"class":427,"line":721},[425,96152,96153],{"class":701},"np.random.random()\n",[425,96155,96156],{"class":427,"line":735},[425,96157,96158],{"class":1216},"#生成一个随机的数目\n",[19,96160,96161],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,96163,96164],{},"可以指定数组形状 size",[19,96166,96167],{},"①生成一维数组",[416,96169,96171],{"className":31133,"code":96170,"language":31135,"meta":395,"style":395},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[422,96172,96173,96178,96191,96196,96212],{"__ignoreMap":395},[425,96174,96175],{"class":427,"line":428},[425,96176,96177],{"class":1216},"#random.random(size())\n",[425,96179,96180,96183,96185,96187,96189],{"class":427,"line":698},[425,96181,96182],{"class":701},"np.random.random(",[425,96184,32251],{"class":6216},[425,96186,1204],{"class":1155},[425,96188,1468],{"class":691},[425,96190,1165],{"class":701},[425,96192,96193],{"class":427,"line":710},[425,96194,96195],{"class":1216},"#生成一位的五个元素\n",[425,96197,96198,96200,96202,96204,96206,96208,96210],{"class":427,"line":721},[425,96199,22],{"class":701},[425,96201,1204],{"class":1155},[425,96203,96182],{"class":701},[425,96205,32251],{"class":6216},[425,96207,1204],{"class":1155},[425,96209,1442],{"class":691},[425,96211,1165],{"class":701},[425,96213,96214,96217],{"class":427,"line":735},[425,96215,96216],{"class":701},"a.shape ",[425,96218,96219],{"class":1216},"#输出数组形状\n",[19,96221,96222],{},"②生成二维数组",[416,96224,96226],{"className":31133,"code":96225,"language":31135,"meta":395,"style":395},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[422,96227,96228,96232,96254],{"__ignoreMap":395},[425,96229,96230],{"class":427,"line":428},[425,96231,94056],{"class":1216},[425,96233,96234,96236,96238,96240,96242,96244,96246,96248,96250,96252],{"class":427,"line":698},[425,96235,94061],{"class":701},[425,96237,1204],{"class":1155},[425,96239,96182],{"class":701},[425,96241,32251],{"class":6216},[425,96243,1204],{"class":1155},[425,96245,1159],{"class":701},[425,96247,1442],{"class":691},[425,96249,1527],{"class":701},[425,96251,1468],{"class":691},[425,96253,31252],{"class":701},[425,96255,96256],{"class":427,"line":710},[425,96257,96258],{"class":1216},"#生成四行五列的数组\n",[19,96260,96261],{},"③生成三维数组",[416,96263,96265],{"className":31133,"code":96264,"language":31135,"meta":395,"style":395},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[422,96266,96267,96272,96299],{"__ignoreMap":395},[425,96268,96269],{"class":427,"line":428},[425,96270,96271],{"class":1216},"#三维数组\n",[425,96273,96274,96277,96279,96281,96283,96285,96287,96289,96291,96293,96295,96297],{"class":427,"line":698},[425,96275,96276],{"class":701},"aaa",[425,96278,1204],{"class":1155},[425,96280,96182],{"class":701},[425,96282,32251],{"class":6216},[425,96284,1204],{"class":1155},[425,96286,1159],{"class":701},[425,96288,1235],{"class":691},[425,96290,1527],{"class":701},[425,96292,1229],{"class":691},[425,96294,1527],{"class":701},[425,96296,1442],{"class":691},[425,96298,31252],{"class":701},[425,96300,96301],{"class":427,"line":710},[425,96302,96303],{"class":701},"aaa.shape\n",[14,96305,96307],{"id":96306},"_222-randint语句","2.2.2 randint语句",[416,96309,96311],{"className":31133,"code":96310,"language":31135,"meta":395,"style":395},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[422,96312,96313,96318],{"__ignoreMap":395},[425,96314,96315],{"class":427,"line":428},[425,96316,96317],{"class":1216},"#生成随机的整数 random.randint(low,high,size)\n",[425,96319,96320,96322,96324,96326],{"class":427,"line":698},[425,96321,93869],{"class":701},[425,96323,1468],{"class":691},[425,96325,938],{"class":701},[425,96327,96328],{"class":1216},"#0~5中的随机一个数\n",[19,96330,96167],{},[416,96332,96334],{"className":31133,"code":96333,"language":31135,"meta":395,"style":395},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[422,96335,96336,96341,96363],{"__ignoreMap":395},[425,96337,96338],{"class":427,"line":428},[425,96339,96340],{"class":1216},"#一维\n",[425,96342,96343,96345,96347,96349,96351,96353,96355,96357,96359,96361],{"class":427,"line":698},[425,96344,93869],{"class":701},[425,96346,1367],{"class":691},[425,96348,1527],{"class":701},[425,96350,1620],{"class":691},[425,96352,1527],{"class":701},[425,96354,32251],{"class":6216},[425,96356,1204],{"class":1155},[425,96358,1159],{"class":701},[425,96360,1594],{"class":691},[425,96362,31252],{"class":701},[425,96364,96365],{"class":427,"line":710},[425,96366,96367],{"class":1216},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,96369,96222],{},[19,96371,96372],{},[393,96373],{"alt":395,"src":96374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,96376,96261],{},[19,96378,96379],{},[393,96380],{"alt":395,"src":96381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[14,96383,96385],{"id":96384},"_222-rand语句","2.2.2 rand语句",[19,96387,96388],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[416,96390,96392],{"className":31133,"code":96391,"language":31135,"meta":395,"style":395},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[422,96393,96394,96407,96412],{"__ignoreMap":395},[425,96395,96396,96399,96401,96403,96405],{"class":427,"line":428},[425,96397,96398],{"class":701},"np.random.rand(",[425,96400,1460],{"class":691},[425,96402,1527],{"class":701},[425,96404,1594],{"class":691},[425,96406,1165],{"class":701},[425,96408,96409],{"class":427,"line":698},[425,96410,96411],{"class":1216},"#第一个参数100：行数，表示有100个样本\n",[425,96413,96414],{"class":427,"line":710},[425,96415,96416],{"class":1216},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[1099,96418,96420],{"id":96419},"_23-arange创建数组","2.3 arange()创建数组",[14,96422,96424],{"id":96423},"_231-函数语句","2.3.1 函数语句",[416,96426,96428],{"className":31133,"code":96427,"language":31135,"meta":395,"style":395},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[422,96429,96430,96444,96449,96454,96459,96464,96469,96474],{"__ignoreMap":395},[425,96431,96432,96435,96437,96439,96442],{"class":427,"line":428},[425,96433,96434],{"class":701},"numpy.arange([start,] stop[, step], ",[425,96436,94255],{"class":6216},[425,96438,1204],{"class":1155},[425,96440,96441],{"class":691},"None",[425,96443,1165],{"class":701},[425,96445,96446],{"class":427,"line":698},[425,96447,96448],{"class":1216},"#参数\n",[425,96450,96451],{"class":427,"line":710},[425,96452,96453],{"class":435},"\"\"\"\n",[425,96455,96456],{"class":427,"line":721},[425,96457,96458],{"class":435},"start:起始值，可选，默认从 0 开始。\n",[425,96460,96461],{"class":427,"line":735},[425,96462,96463],{"class":435},"stop:结束值（不包含该值）。\n",[425,96465,96466],{"class":427,"line":743},[425,96467,96468],{"class":435},"step:步长，可选，默认是 1。可以为浮点数。\n",[425,96470,96471],{"class":427,"line":751},[425,96472,96473],{"class":435},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[425,96475,96476],{"class":427,"line":759},[425,96477,96453],{"class":435},[14,96479,96481],{"id":96480},"_232-实例","2.3.2 实例",[416,96483,96485],{"className":31133,"code":96484,"language":31135,"meta":395,"style":395},"#创建一维数组\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",[422,96486,96487,96491,96515,96520,96525,96529,96552,96556,96560,96565,96570],{"__ignoreMap":395},[425,96488,96489],{"class":427,"line":428},[425,96490,93860],{"class":1216},[425,96492,96493,96495,96497,96499,96501,96503,96505,96507,96509,96511,96513],{"class":427,"line":698},[425,96494,93757],{"class":701},[425,96496,1367],{"class":691},[425,96498,1527],{"class":701},[425,96500,1873],{"class":691},[425,96502,1527],{"class":701},[425,96504,1367],{"class":691},[425,96506,1527],{"class":701},[425,96508,94255],{"class":6216},[425,96510,1204],{"class":1155},[425,96512,1162],{"class":691},[425,96514,1165],{"class":701},[425,96516,96517],{"class":427,"line":710},[425,96518,96519],{"class":1216},"#输出结果：\n",[425,96521,96522],{"class":427,"line":721},[425,96523,96524],{"class":1216},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[425,96526,96527],{"class":427,"line":735},[425,96528,94702],{"class":1216},[425,96530,96531,96534,96536,96538,96540,96543,96545,96547,96549],{"class":427,"line":743},[425,96532,96533],{"class":701},"np.array([np.arange(",[425,96535,1367],{"class":691},[425,96537,1527],{"class":701},[425,96539,1442],{"class":691},[425,96541,96542],{"class":701},"),np.arange(",[425,96544,1442],{"class":691},[425,96546,1527],{"class":701},[425,96548,1518],{"class":691},[425,96550,96551],{"class":701},")])\n",[425,96553,96554],{"class":427,"line":751},[425,96555,94319],{"class":1216},[425,96557,96558],{"class":427,"line":759},[425,96559,96453],{"class":435},[425,96561,96562],{"class":427,"line":770},[425,96563,96564],{"class":435},"array([[1, 2, 3],\n",[425,96566,96567],{"class":427,"line":780},[425,96568,96569],{"class":435},"       [4, 5, 6]])\n",[425,96571,96572],{"class":427,"line":790},[425,96573,96453],{"class":435},[1099,96575,96577],{"id":96576},"_24-生态分布","2.4 生态分布",[14,96579,96581],{"id":96580},"_241-标准正态分布","2.4.1 标准正态分布",[19,96583,96584],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,96586,96587],{},[393,96588],{"alt":395,"src":96589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[14,96591,96593],{"id":96592},"_242-常规正态分布","2.4.2 常规正态分布",[416,96595,96597],{"className":31133,"code":96596,"language":31135,"meta":395,"style":395},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[422,96598,96599,96604,96609,96614],{"__ignoreMap":395},[425,96600,96601],{"class":427,"line":428},[425,96602,96603],{"class":701},"random.normal(loc,scale,size)也可以生成正态分布\n",[425,96605,96606],{"class":427,"line":698},[425,96607,96608],{"class":1216},"#loc:期望\n",[425,96610,96611],{"class":427,"line":710},[425,96612,96613],{"class":1216},"#scale:方差\n",[425,96615,96616],{"class":427,"line":721},[425,96617,96618],{"class":1216},"#size:用于确定是几维的数列\n",[19,96620,96621],{},[393,96622],{"alt":395,"src":96623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[1099,96625,96627],{"id":96626},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,96629,96630],{},"ndim:秩，维度个数",[19,96632,96633],{},"size:数组元素的个数",[19,96635,96636],{},"shape:数组的形状",[19,96638,96639],{},"dtype:数组元素的类型",[19,96641,96642],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,96644,96645],{},"他们都是属性，通过数组.属性的形式来确定",[19,96647,96648],{},"如果需要输出多个可以通过以下方式：",[416,96650,96652],{"className":31133,"code":96651,"language":31135,"meta":395,"style":395},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[422,96653,96654],{"__ignoreMap":395},[425,96655,96656,96658],{"class":427,"line":428},[425,96657,31170],{"class":691},[425,96659,96660],{"class":701},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[1099,96662,96664],{"id":96663},"_26-其他方式创建数组","2.6 其他方式创建数组",[14,96666,96668],{"id":96667},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,96670,96671],{},"①创建一维数组",[416,96673,96675],{"className":31133,"code":96674,"language":31135,"meta":395,"style":395},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[422,96676,96677,96686,96690,96695,96700],{"__ignoreMap":395},[425,96678,96679,96682,96684],{"class":427,"line":428},[425,96680,96681],{"class":701},"np.zeros(",[425,96683,1594],{"class":691},[425,96685,1165],{"class":701},[425,96687,96688],{"class":427,"line":698},[425,96689,96453],{"class":435},[425,96691,96692],{"class":427,"line":710},[425,96693,96694],{"class":435},"输出结果：\n",[425,96696,96697],{"class":427,"line":721},[425,96698,96699],{"class":435},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[425,96701,96702],{"class":427,"line":735},[425,96703,96453],{"class":435},[19,96705,96706],{},"上方代码等价于：",[416,96708,96710],{"className":31133,"code":96709,"language":31135,"meta":395,"style":395},"np.zeros(shape=(10))#创建10个元素的0数组\n",[422,96711,96712],{"__ignoreMap":395},[425,96713,96714,96716,96719,96721,96723,96725,96727],{"class":427,"line":428},[425,96715,96681],{"class":701},[425,96717,96718],{"class":6216},"shape",[425,96720,1204],{"class":1155},[425,96722,1159],{"class":701},[425,96724,1594],{"class":691},[425,96726,83526],{"class":701},[425,96728,96729],{"class":1216},"#创建10个元素的0数组\n",[19,96731,96732],{},"也可以指定类型",[416,96734,96736],{"className":31133,"code":96735,"language":31135,"meta":395,"style":395},"#指定类型\nnp.zeros(5,dtype=int)\n",[422,96737,96738,96743],{"__ignoreMap":395},[425,96739,96740],{"class":427,"line":428},[425,96741,96742],{"class":1216},"#指定类型\n",[425,96744,96745,96747,96749,96751,96753,96755,96757],{"class":427,"line":698},[425,96746,96681],{"class":701},[425,96748,1468],{"class":691},[425,96750,1527],{"class":701},[425,96752,94255],{"class":6216},[425,96754,1204],{"class":1155},[425,96756,1162],{"class":691},[425,96758,1165],{"class":701},[19,96760,96761],{},"②创建二维数组",[416,96763,96765],{"className":31133,"code":96764,"language":31135,"meta":395,"style":395},"np.zeros((3,4),dtype=int)\n",[422,96766,96767],{"__ignoreMap":395},[425,96768,96769,96772,96774,96776,96778,96780,96782,96784,96786],{"class":427,"line":428},[425,96770,96771],{"class":701},"np.zeros((",[425,96773,1229],{"class":691},[425,96775,1527],{"class":701},[425,96777,1442],{"class":691},[425,96779,43011],{"class":701},[425,96781,94255],{"class":6216},[425,96783,1204],{"class":1155},[425,96785,1162],{"class":691},[425,96787,1165],{"class":701},[19,96789,96790],{},"③创建三维数组",[416,96792,96794],{"className":31133,"code":96793,"language":31135,"meta":395,"style":395},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[422,96795,96796,96801],{"__ignoreMap":395},[425,96797,96798],{"class":427,"line":428},[425,96799,96800],{"class":1216},"#创建三维数组\n",[425,96802,96803,96805,96807,96809,96811,96813,96815,96817,96819,96821,96823],{"class":427,"line":698},[425,96804,96771],{"class":701},[425,96806,1229],{"class":691},[425,96808,1527],{"class":701},[425,96810,1442],{"class":691},[425,96812,1527],{"class":701},[425,96814,1468],{"class":691},[425,96816,43011],{"class":701},[425,96818,94255],{"class":6216},[425,96820,1204],{"class":1155},[425,96822,1162],{"class":691},[425,96824,1165],{"class":701},[19,96826,96827],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[416,96829,96831],{"className":31133,"code":96830,"language":31135,"meta":395,"style":395},"#使用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",[422,96832,96833,96838,96853,96858,96863,96885],{"__ignoreMap":395},[425,96834,96835],{"class":427,"line":428},[425,96836,96837],{"class":1216},"#使用zeros_like将创建的一维数组变成全0的数组\n",[425,96839,96840,96842,96844,96846,96848,96850],{"class":427,"line":698},[425,96841,22],{"class":701},[425,96843,1204],{"class":1155},[425,96845,93757],{"class":701},[425,96847,1442],{"class":691},[425,96849,895],{"class":701},[425,96851,96852],{"class":1216},"#这个得到的结果：一维数组0，1，2，3\n",[425,96854,96855],{"class":427,"line":710},[425,96856,96857],{"class":701},"np.zeros_like(a)\n",[425,96859,96860],{"class":427,"line":721},[425,96861,96862],{"class":1216},"#使用zeros_like将创建的二维数组变成全0的数组\n",[425,96864,96865,96867,96869,96871,96873,96875,96877,96879,96881,96883],{"class":427,"line":735},[425,96866,94061],{"class":701},[425,96868,1204],{"class":1155},[425,96870,96182],{"class":701},[425,96872,32251],{"class":6216},[425,96874,1204],{"class":1155},[425,96876,1159],{"class":701},[425,96878,1442],{"class":691},[425,96880,1527],{"class":701},[425,96882,1468],{"class":691},[425,96884,31252],{"class":701},[425,96886,96887],{"class":427,"line":743},[425,96888,96889],{"class":701},"np.zeros_like(aa)\n",[14,96891,96893],{"id":96892},"_262-ones创建数组","2.6.2 ones()创建数组",[19,96895,96896],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[14,96898,96900],{"id":96899},"_263-empty创建数组","2.6.3 empty()创建数组",[19,96902,96903],{},"①empty()用法",[416,96905,96907],{"className":31133,"code":96906,"language":31135,"meta":395,"style":395},"numpy.empty(shape,dtype=float,order='c')\n",[422,96908,96909],{"__ignoreMap":395},[425,96910,96911,96914,96916,96918,96920,96922,96924,96926,96928],{"class":427,"line":428},[425,96912,96913],{"class":701},"numpy.empty(shape,",[425,96915,94255],{"class":6216},[425,96917,1204],{"class":1155},[425,96919,1198],{"class":691},[425,96921,1527],{"class":701},[425,96923,96052],{"class":6216},[425,96925,1204],{"class":1155},[425,96927,76783],{"class":435},[425,96929,1165],{"class":701},[19,96931,96932],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,96934,96935],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,96937,96938],{},[393,96939],{"alt":395,"src":96940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,96942,96943],{},"②empty()用法",[416,96945,96947],{"className":31133,"code":96946,"language":31135,"meta":395,"style":395},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[422,96948,96949,96970,96982,97003,97008],{"__ignoreMap":395},[425,96950,96951,96953,96955,96958,96960,96962,96964,96966,96968],{"class":427,"line":428},[425,96952,1993],{"class":701},[425,96954,1204],{"class":1155},[425,96956,96957],{"class":701},"np.empty(",[425,96959,1594],{"class":691},[425,96961,1527],{"class":701},[425,96963,94255],{"class":6216},[425,96965,1204],{"class":1155},[425,96967,1162],{"class":691},[425,96969,1165],{"class":701},[425,96971,96972,96974,96976,96978,96980],{"class":427,"line":698},[425,96973,1968],{"class":701},[425,96975,1204],{"class":1155},[425,96977,93757],{"class":701},[425,96979,1468],{"class":691},[425,96981,1165],{"class":701},[425,96983,96984,96987,96989,96992,96994,96996,96999,97001],{"class":427,"line":710},[425,96985,96986],{"class":701},"np.add(",[425,96988,1235],{"class":691},[425,96990,96991],{"class":701},",x,",[425,96993,93809],{"class":6216},[425,96995,1204],{"class":1155},[425,96997,96998],{"class":701},"y[:",[425,97000,1468],{"class":691},[425,97002,5657],{"class":701},[425,97004,97005],{"class":427,"line":721},[425,97006,97007],{"class":1216},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[425,97009,97010],{"class":427,"line":735},[425,97011,97012],{"class":701},"y\n",[19,97014,12513],{},[19,97016,97017],{},[393,97018],{"alt":395,"src":97019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[416,97021,97023],{"className":31133,"code":97022,"language":31135,"meta":395,"style":395},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[422,97024,97025,97041,97061,97076],{"__ignoreMap":395},[425,97026,97027,97029,97031,97033,97035,97037,97039],{"class":427,"line":428},[425,97028,1968],{"class":701},[425,97030,1204],{"class":1155},[425,97032,93757],{"class":701},[425,97034,1367],{"class":691},[425,97036,1527],{"class":701},[425,97038,1493],{"class":691},[425,97040,1165],{"class":701},[425,97042,97043,97045,97047,97049,97051,97053,97055,97057,97059],{"class":427,"line":698},[425,97044,1993],{"class":701},[425,97046,1204],{"class":1155},[425,97048,96957],{"class":701},[425,97050,1468],{"class":691},[425,97052,1527],{"class":701},[425,97054,94255],{"class":6216},[425,97056,1204],{"class":1155},[425,97058,1162],{"class":691},[425,97060,1165],{"class":701},[425,97062,97063,97066,97068,97070,97072,97074],{"class":427,"line":710},[425,97064,97065],{"class":701},"np.add(x,",[425,97067,1235],{"class":691},[425,97069,1527],{"class":701},[425,97071,93809],{"class":6216},[425,97073,1204],{"class":1155},[425,97075,94204],{"class":701},[425,97077,97078],{"class":427,"line":721},[425,97079,97080],{"class":1216},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,97082,97083],{},"③empty_like()",[19,97085,97086],{},[400,97087,97088,97089,97094],{},"创建一个",[400,97090,97091],{},[400,97092,97093],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,97096,97097,97100],{},[422,97098,97099],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,97102,97103],{},[393,97104],{"alt":395,"src":97105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[14,97107,97109],{"id":97108},"_264-用法","2.6.4 ？？用法",[19,97111,97112],{},"当想查看一个函数的参数时，可以通过？？来实现",[416,97114,97116],{"className":31133,"code":97115,"language":31135,"meta":395,"style":395},"np.full??\n",[422,97117,97118],{"__ignoreMap":395},[425,97119,97120,97123],{"class":427,"line":428},[425,97121,97122],{"class":701},"np.full",[425,97124,97125],{"class":78158},"??\n",[14,97127,97129],{"id":97128},"_265-full创建数组","2.6.5 full()创建数组",[416,97131,97133],{"className":31133,"code":97132,"language":31135,"meta":395,"style":395},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[422,97134,97135,97140],{"__ignoreMap":395},[425,97136,97137],{"class":427,"line":428},[425,97138,97139],{"class":701},"full(shape,fill_value)\n",[425,97141,97142],{"class":427,"line":698},[425,97143,97144],{"class":701},"创建全为某个指定值的数组\n",[19,97146,95285],{},[416,97148,97150],{"className":31133,"code":97149,"language":31135,"meta":395,"style":395},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[422,97151,97152,97157],{"__ignoreMap":395},[425,97153,97154],{"class":427,"line":428},[425,97155,97156],{"class":1216},"#创建一个一维数组,以20进行填充\n",[425,97158,97159,97162,97164,97166,97168],{"class":427,"line":698},[425,97160,97161],{"class":701},"np.full(",[425,97163,1594],{"class":691},[425,97165,1527],{"class":701},[425,97167,1848],{"class":691},[425,97169,1165],{"class":701},[19,97171,94046],{},[416,97173,97175],{"className":31133,"code":97174,"language":31135,"meta":395,"style":395},"#创建二维数组\nnp.full((3,5),11)\n",[422,97176,97177,97181],{"__ignoreMap":395},[425,97178,97179],{"class":427,"line":428},[425,97180,94702],{"class":1216},[425,97182,97183,97186,97188,97190,97192,97194,97196],{"class":427,"line":698},[425,97184,97185],{"class":701},"np.full((",[425,97187,1229],{"class":691},[425,97189,1527],{"class":701},[425,97191,1468],{"class":691},[425,97193,43011],{"class":701},[425,97195,1620],{"class":691},[425,97197,1165],{"class":701},[19,97199,97200],{},"③full_like用法",[19,97202,97203],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,97205,97206],{},"这里是指定填充而已",[416,97208,97210],{"className":31133,"code":97209,"language":31135,"meta":395,"style":395},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[422,97211,97212,97217,97241,97246],{"__ignoreMap":395},[425,97213,97214],{"class":427,"line":428},[425,97215,97216],{"class":1216},"#创建一个指定形状数组\n",[425,97218,97219,97221,97223,97225,97227,97229,97231,97233,97235,97237,97239],{"class":427,"line":698},[425,97220,22],{"class":701},[425,97222,1204],{"class":1155},[425,97224,93757],{"class":701},[425,97226,1367],{"class":691},[425,97228,1527],{"class":701},[425,97230,1474],{"class":691},[425,97232,93762],{"class":701},[425,97234,1442],{"class":691},[425,97236,1527],{"class":701},[425,97238,1569],{"class":691},[425,97240,1165],{"class":701},[425,97242,97243],{"class":427,"line":710},[425,97244,97245],{"class":1216},"#进行指定填充\n",[425,97247,97248,97251,97253],{"class":427,"line":721},[425,97249,97250],{"class":701},"np.full_like(a,",[425,97252,1594],{"class":691},[425,97254,1165],{"class":701},[19,97256,12513],{},[19,97258,97259],{},[393,97260],{"alt":395,"src":97261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[14,97263,97265],{"id":97264},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22995,97267,97269],{"id":97268},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[416,97271,97273],{"className":31133,"code":97272,"language":31135,"meta":395,"style":395},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[422,97274,97275,97292],{"__ignoreMap":395},[425,97276,97277,97280,97282,97284,97286,97288,97290],{"class":427,"line":428},[425,97278,97279],{"class":701},"np.eye(",[425,97281,1442],{"class":691},[425,97283,1527],{"class":701},[425,97285,94255],{"class":6216},[425,97287,1204],{"class":1155},[425,97289,1162],{"class":691},[425,97291,1165],{"class":701},[425,97293,97294],{"class":427,"line":698},[425,97295,97296],{"class":1216},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22995,97298,97300],{"id":97299},"_2662-法2identity","2.6.6.2 法2：identity()",[416,97302,97304],{"className":31133,"code":97303,"language":31135,"meta":395,"style":395},"#identity()\nnp.identity(5,dtype=int)\n",[422,97305,97306,97311],{"__ignoreMap":395},[425,97307,97308],{"class":427,"line":428},[425,97309,97310],{"class":1216},"#identity()\n",[425,97312,97313,97316,97318,97320,97322,97324,97326],{"class":427,"line":698},[425,97314,97315],{"class":701},"np.identity(",[425,97317,1468],{"class":691},[425,97319,1527],{"class":701},[425,97321,94255],{"class":6216},[425,97323,1204],{"class":1155},[425,97325,1162],{"class":691},[425,97327,1165],{"class":701},[19,97329,97330],{},"两个函数是有区别的",[19,97332,97333],{},[393,97334],{"alt":395,"src":97335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,97337,97338],{},[393,97339],{"alt":395,"src":97340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[416,97342,97344],{"className":31133,"code":97343,"language":31135,"meta":395,"style":395},"# 创建一个 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",[422,97345,97346,97351,97363,97368,97373,97378,97383,97387,97392,97412,97416,97421,97426],{"__ignoreMap":395},[425,97347,97348],{"class":427,"line":428},[425,97349,97350],{"class":1216},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[425,97352,97353,97355,97357,97359,97361],{"class":427,"line":698},[425,97354,97279],{"class":701},[425,97356,1229],{"class":691},[425,97358,13434],{"class":701},[425,97360,1442],{"class":691},[425,97362,1165],{"class":701},[425,97364,97365],{"class":427,"line":710},[425,97366,97367],{"class":1216},"# 输出:\n",[425,97369,97370],{"class":427,"line":721},[425,97371,97372],{"class":1216},"# [[1. 0. 0. 0.]\n",[425,97374,97375],{"class":427,"line":735},[425,97376,97377],{"class":1216},"#  [0. 1. 0. 0.]\n",[425,97379,97380],{"class":427,"line":743},[425,97381,97382],{"class":1216},"#  [0. 0. 1. 0.]]\n",[425,97384,97385],{"class":427,"line":751},[425,97386,3400],{"emptyLinePlaceholder":1084},[425,97388,97389],{"class":427,"line":759},[425,97390,97391],{"class":1216},"# 对角线向上偏移1\n",[425,97393,97394,97396,97398,97400,97402,97404,97406,97408,97410],{"class":427,"line":770},[425,97395,97279],{"class":701},[425,97397,1229],{"class":691},[425,97399,13434],{"class":701},[425,97401,1442],{"class":691},[425,97403,13434],{"class":701},[425,97405,1641],{"class":6216},[425,97407,1204],{"class":1155},[425,97409,1367],{"class":691},[425,97411,1165],{"class":701},[425,97413,97414],{"class":427,"line":780},[425,97415,97367],{"class":1216},[425,97417,97418],{"class":427,"line":790},[425,97419,97420],{"class":1216},"# [[0. 1. 0. 0.]\n",[425,97422,97423],{"class":427,"line":805},[425,97424,97425],{"class":1216},"#  [0. 0. 1. 0.]\n",[425,97427,97428],{"class":427,"line":818},[425,97429,97430],{"class":1216},"#  [0. 0. 0. 1.]]\n",[14,97432,97434],{"id":97433},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[416,97436,97438],{"className":31133,"code":97437,"language":31135,"meta":395,"style":395},"#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",[422,97439,97440,97445,97449,97454,97459,97464,97469,97474,97479,97484,97489],{"__ignoreMap":395},[425,97441,97442],{"class":427,"line":428},[425,97443,97444],{"class":1216},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[425,97446,97447],{"class":427,"line":698},[425,97448,96453],{"class":435},[425,97450,97451],{"class":427,"line":710},[425,97452,97453],{"class":435},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[425,97455,97456],{"class":427,"line":721},[425,97457,97458],{"class":435},"参数介绍：\n",[425,97460,97461],{"class":427,"line":735},[425,97462,97463],{"class":435},"start：序列的起始值\n",[425,97465,97466],{"class":427,"line":743},[425,97467,97468],{"class":435},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[425,97470,97471],{"class":427,"line":751},[425,97472,97473],{"class":435},"num：要生长的等步长的样本数量，默认为50\n",[425,97475,97476],{"class":427,"line":759},[425,97477,97478],{"class":435},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[425,97480,97481],{"class":427,"line":770},[425,97482,97483],{"class":435},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[425,97485,97486],{"class":427,"line":780},[425,97487,97488],{"class":435},"dtype：ndarry的数据类型\n",[425,97490,97491],{"class":427,"line":790},[425,97492,96453],{"class":435},[19,97494,97495],{},[393,97496],{"alt":395,"src":97497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,97499,97500],{},"这里num=是可以省略的",[19,97502,97503],{},"也就是下方两行代码结果是一模一样的",[416,97505,97507],{"className":31133,"code":97506,"language":31135,"meta":395,"style":395},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[422,97508,97509,97526],{"__ignoreMap":395},[425,97510,97511,97514,97516,97518,97520,97522,97524],{"class":427,"line":428},[425,97512,97513],{"class":701},"np.linspace(",[425,97515,1367],{"class":691},[425,97517,1527],{"class":701},[425,97519,1468],{"class":691},[425,97521,1527],{"class":701},[425,97523,1468],{"class":691},[425,97525,1165],{"class":701},[425,97527,97528,97530,97532,97534,97536,97538,97540,97542,97544],{"class":427,"line":698},[425,97529,97513],{"class":701},[425,97531,1367],{"class":691},[425,97533,1527],{"class":701},[425,97535,1468],{"class":691},[425,97537,1527],{"class":701},[425,97539,2671],{"class":6216},[425,97541,1204],{"class":1155},[425,97543,1468],{"class":691},[425,97545,1165],{"class":701},[14,97547,97549],{"id":97548},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[416,97551,97553],{"className":31133,"code":97552,"language":31135,"meta":395,"style":395},"#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",[422,97554,97555,97560,97564,97569,97574,97579,97584,97588,97593,97598,97602],{"__ignoreMap":395},[425,97556,97557],{"class":427,"line":428},[425,97558,97559],{"class":1216},"#logspace函数用于创建一个等比数列，格式如下：\n",[425,97561,97562],{"class":427,"line":698},[425,97563,96453],{"class":435},[425,97565,97566],{"class":427,"line":710},[425,97567,97568],{"class":435},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[425,97570,97571],{"class":427,"line":721},[425,97572,97573],{"class":435},"参数为：\n",[425,97575,97576],{"class":427,"line":735},[425,97577,97578],{"class":435},"start:序列的起始位置为：base**start\n",[425,97580,97581],{"class":427,"line":743},[425,97582,97583],{"class":435},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[425,97585,97586],{"class":427,"line":751},[425,97587,97473],{"class":435},[425,97589,97590],{"class":427,"line":759},[425,97591,97592],{"class":435},"endpoint：是否包含 stop 这个值，默认是 True\n",[425,97594,97595],{"class":427,"line":770},[425,97596,97597],{"class":435},"base：对数的底数，默认是 10（常见对数）\n",[425,97599,97600],{"class":427,"line":780},[425,97601,97488],{"class":435},[425,97603,97604],{"class":427,"line":790},[425,97605,96453],{"class":435},[19,97607,97608],{},[393,97609],{"alt":395,"src":97610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,97612,97613],{},"logspace()函数中的num参数也是可以不写num=的",[19,97615,97616],{},"endpoint是不可以省略的",[1074,97618,97619],{},"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":395,"searchDepth":698,"depth":698,"links":97621},[97622,97626,97631,97635,97639,97640],{"id":96011,"depth":698,"text":96012,"children":97623},[97624,97625],{"id":96015,"depth":710,"text":96016},{"id":96088,"depth":710,"text":96089},{"id":96120,"depth":698,"text":96121,"children":97627},[97628,97629,97630],{"id":96124,"depth":710,"text":96125},{"id":96306,"depth":710,"text":96307},{"id":96384,"depth":710,"text":96385},{"id":96419,"depth":698,"text":96420,"children":97632},[97633,97634],{"id":96423,"depth":710,"text":96424},{"id":96480,"depth":710,"text":96481},{"id":96576,"depth":698,"text":96577,"children":97636},[97637,97638],{"id":96580,"depth":710,"text":96581},{"id":96592,"depth":710,"text":96593},{"id":96626,"depth":698,"text":96627},{"id":96663,"depth":698,"text":96664,"children":97641},[97642,97643,97644,97645,97646,97647,97648,97649],{"id":96667,"depth":710,"text":96668},{"id":96892,"depth":710,"text":96893},{"id":96899,"depth":710,"text":96900},{"id":97108,"depth":710,"text":97109},{"id":97128,"depth":710,"text":97129},{"id":97264,"depth":710,"text":97265},{"id":97433,"depth":710,"text":97434},{"id":97548,"depth":710,"text":97549},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":96003,"description":24374},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97656,"title":97657,"body":97658,"description":24374,"extension":1082,"meta":97751,"navigation":1084,"path":97752,"seo":97753,"stem":97754,"__hash__":97755},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97659,"toc":97749},[97660,97663,97666,97669,97672,97675,97678,97681,97684,97687,97690,97693,97695,97698,97701,97706,97709,97712,97746],[10,97661,97657],{"id":97662},"_20魔法命令mprun",[19,97664,97665],{},"逐行分析数据内存的使用情况",[19,97667,97668],{},"语法格式：",[19,97670,97671],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,97673,97674],{},"分析结果列如下：",[19,97676,97677],{},"Line行号",[19,97679,97680],{},"Mem usage内存使用大小",[19,97682,97683],{},"increment内存增量",[19,97685,97686],{},"Line content代码内容",[19,97688,97689],{},"补充说明：",[19,97691,97692],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,97694,95958],{},[19,97696,97697],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,97699,97700],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,97702,97703],{},[393,97704],{"alt":395,"src":97705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,97707,97708],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,97710,97711],{},"这时候需要重新加载模块",[416,97713,97715],{"className":31133,"code":97714,"language":31135,"meta":395,"style":395},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[422,97716,97717,97722,97729,97734],{"__ignoreMap":395},[425,97718,97719],{"class":427,"line":428},[425,97720,97721],{"class":1216},"#重新加载模块\n",[425,97723,97724,97726],{"class":427,"line":698},[425,97725,31147],{"class":1155},[425,97727,97728],{"class":701}," importlib\n",[425,97730,97731],{"class":427,"line":710},[425,97732,97733],{"class":701},"importlib.reload(mprun_test)\n",[425,97735,97736,97738,97741,97743],{"class":427,"line":721},[425,97737,1477],{"class":1155},[425,97739,97740],{"class":701},"mprun ",[425,97742,1680],{"class":1155},[425,97744,97745],{"class":701},"f mprun_test.fun_test mprun_test.fun_test()\n",[1074,97747,97748],{},"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":395,"searchDepth":698,"depth":698,"links":97750},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97657,"description":24374},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97757,"title":97758,"body":97759,"description":24374,"extension":1082,"meta":97776,"navigation":1084,"path":97777,"seo":97778,"stem":97779,"__hash__":97780},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97760,"toc":97774},[97761,97764,97769],[10,97762,97758],{"id":97763},"_3一维数组的索引和切片",[19,97765,97766],{},[393,97767],{"alt":395,"src":97768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,97770,97771],{},[393,97772],{"alt":395,"src":97773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":395,"searchDepth":698,"depth":698,"links":97775},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97758,"description":24374},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97782,"title":97783,"body":97784,"description":24374,"extension":1082,"meta":98267,"navigation":1084,"path":98268,"seo":98269,"stem":98270,"__hash__":98271},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97785,"toc":98265},[97786,97789,97792,97797,97830,97833,97871,97874,97908,97911,98016,98019,98056,98059,98160,98163,98214,98217,98259,98262],[10,97787,97783],{"id":97788},"_4二维数组的索引与切片",[19,97790,97791],{},"①获取指定单个元素",[19,97793,97794],{},[393,97795],{"alt":395,"src":97796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[416,97798,97800],{"className":31133,"code":97799,"language":31135,"meta":395,"style":395},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[422,97801,97802,97807,97812,97817],{"__ignoreMap":395},[425,97803,97804],{"class":427,"line":428},[425,97805,97806],{"class":1216},"#获取元素9\n",[425,97808,97809],{"class":427,"line":698},[425,97810,97811],{"class":1216},"#先获取所在行，再获取所在列\n",[425,97813,97814],{"class":427,"line":710},[425,97815,97816],{"class":1216},"#数组[行索引号，列索引号]\n",[425,97818,97819,97822,97824,97826,97828],{"class":427,"line":721},[425,97820,97821],{"class":701},"a[",[425,97823,1367],{"class":691},[425,97825,1527],{"class":701},[425,97827,1235],{"class":691},[425,97829,34001],{"class":701},[19,97831,97832],{},"②获取整行元素",[416,97834,97836],{"className":31133,"code":97835,"language":31135,"meta":395,"style":395},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[422,97837,97838,97843,97848,97856,97861],{"__ignoreMap":395},[425,97839,97840],{"class":427,"line":428},[425,97841,97842],{"class":1216},"#获取整行 数组[行索引号]\n",[425,97844,97845],{"class":427,"line":698},[425,97846,97847],{"class":1216},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[425,97849,97850,97852,97854],{"class":427,"line":710},[425,97851,97821],{"class":701},[425,97853,1235],{"class":691},[425,97855,34001],{"class":701},[425,97857,97858],{"class":427,"line":721},[425,97859,97860],{"class":1216},"#也可以负索引获取一行\n",[425,97862,97863,97865,97867,97869],{"class":427,"line":735},[425,97864,97821],{"class":701},[425,97866,1680],{"class":1155},[425,97868,1367],{"class":691},[425,97870,34001],{"class":701},[19,97872,97873],{},"③获取整列元素",[416,97875,97877],{"className":31133,"code":97876,"language":31135,"meta":395,"style":395},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[422,97878,97879,97884,97893,97898],{"__ignoreMap":395},[425,97880,97881],{"class":427,"line":428},[425,97882,97883],{"class":1216},"#获取整列 数组名[:,列索引]\n",[425,97885,97886,97889,97891],{"class":427,"line":698},[425,97887,97888],{"class":701},"a[:,",[425,97890,1235],{"class":691},[425,97892,34001],{"class":701},[425,97894,97895],{"class":427,"line":710},[425,97896,97897],{"class":1216},"#也可以负索引获取一列\n",[425,97899,97900,97902,97904,97906],{"class":427,"line":721},[425,97901,97888],{"class":701},[425,97903,1680],{"class":1155},[425,97905,1367],{"class":691},[425,97907,34001],{"class":701},[19,97909,97910],{},"④部分行部分列的元素",[416,97912,97914],{"className":31133,"code":97913,"language":31135,"meta":395,"style":395},"#部分行部分列 数组名[行切片，列切片]\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",[422,97915,97916,97921,97931,97935,97939,97944,97949,97953,97965,97969,97973,97978,97983,97988,97993,97997,98002],{"__ignoreMap":395},[425,97917,97918],{"class":427,"line":428},[425,97919,97920],{"class":1216},"#部分行部分列 数组名[行切片，列切片]\n",[425,97922,97923,97926,97928],{"class":427,"line":698},[425,97924,97925],{"class":701},"a[:",[425,97927,1235],{"class":691},[425,97929,97930],{"class":701},",:]\n",[425,97932,97933],{"class":427,"line":710},[425,97934,94319],{"class":1216},[425,97936,97937],{"class":427,"line":721},[425,97938,94683],{"class":435},[425,97940,97941],{"class":427,"line":735},[425,97942,97943],{"class":435},"array([[ 1,  2,  3,  4,  5,  6],\n",[425,97945,97946],{"class":427,"line":743},[425,97947,97948],{"class":435},"       [ 7,  8,  9, 10, 11, 12]])\n",[425,97950,97951],{"class":427,"line":751},[425,97952,94683],{"class":435},[425,97954,97955,97957,97959,97961,97963],{"class":427,"line":759},[425,97956,97888],{"class":701},[425,97958,1367],{"class":691},[425,97960,948],{"class":701},[425,97962,1442],{"class":691},[425,97964,34001],{"class":701},[425,97966,97967],{"class":427,"line":770},[425,97968,94319],{"class":1216},[425,97970,97971],{"class":427,"line":780},[425,97972,94683],{"class":435},[425,97974,97975],{"class":427,"line":790},[425,97976,97977],{"class":435},"array([[ 2,  3,  4],\n",[425,97979,97980],{"class":427,"line":805},[425,97981,97982],{"class":435},"       [ 8,  9, 10],\n",[425,97984,97985],{"class":427,"line":818},[425,97986,97987],{"class":435},"       [14, 15, 16],\n",[425,97989,97990],{"class":427,"line":831},[425,97991,97992],{"class":435},"       [20, 21, 22]])\n",[425,97994,97995],{"class":427,"line":841},[425,97996,94683],{"class":435},[425,97998,97999],{"class":427,"line":852},[425,98000,98001],{"class":1216},"#对列行同时进行切片，使用了step参数\n",[425,98003,98004,98007,98009,98012,98014],{"class":427,"line":862},[425,98005,98006],{"class":701},"a[::",[425,98008,1235],{"class":691},[425,98010,98011],{"class":701},",::",[425,98013,1235],{"class":691},[425,98015,34001],{"class":701},[19,98017,98018],{},"⑤同时获取两个元素",[416,98020,98022],{"className":31133,"code":98021,"language":31135,"meta":395,"style":395},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[422,98023,98024,98029,98034],{"__ignoreMap":395},[425,98025,98026],{"class":427,"line":428},[425,98027,98028],{"class":1216},"#同时获取第三行第二列，第四行第一列\n",[425,98030,98031],{"class":427,"line":698},[425,98032,98033],{"class":1216},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[425,98035,98036,98039,98041,98043,98045,98047,98049,98051,98053],{"class":427,"line":710},[425,98037,98038],{"class":701},"a[(",[425,98040,1235],{"class":691},[425,98042,1527],{"class":701},[425,98044,1229],{"class":691},[425,98046,43002],{"class":701},[425,98048,1367],{"class":691},[425,98050,1527],{"class":701},[425,98052,1341],{"class":691},[425,98054,98055],{"class":701},")]\n",[19,98057,98058],{},"⑥切片，对行进行反向获取",[416,98060,98062],{"className":31133,"code":98061,"language":31135,"meta":395,"style":395},"#切片 对所有行进行反向获取\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",[422,98063,98064,98069,98079,98083,98087,98092,98097,98102,98107,98111,98116,98132,98136,98141,98146,98151,98156],{"__ignoreMap":395},[425,98065,98066],{"class":427,"line":428},[425,98067,98068],{"class":1216},"#切片 对所有行进行反向获取\n",[425,98070,98071,98073,98075,98077],{"class":427,"line":698},[425,98072,98006],{"class":701},[425,98074,1680],{"class":1155},[425,98076,1367],{"class":691},[425,98078,34001],{"class":701},[425,98080,98081],{"class":427,"line":710},[425,98082,94319],{"class":1216},[425,98084,98085],{"class":427,"line":721},[425,98086,94683],{"class":435},[425,98088,98089],{"class":427,"line":735},[425,98090,98091],{"class":435},"array([[19, 20, 21, 22, 23, 24],\n",[425,98093,98094],{"class":427,"line":743},[425,98095,98096],{"class":435},"       [13, 14, 15, 16, 17, 18],\n",[425,98098,98099],{"class":427,"line":751},[425,98100,98101],{"class":435},"       [ 7,  8,  9, 10, 11, 12],\n",[425,98103,98104],{"class":427,"line":759},[425,98105,98106],{"class":435},"       [ 1,  2,  3,  4,  5,  6]])\n",[425,98108,98109],{"class":427,"line":770},[425,98110,94683],{"class":435},[425,98112,98113],{"class":427,"line":780},[425,98114,98115],{"class":1216},"#对行列都进行反向切片获取\n",[425,98117,98118,98120,98122,98124,98126,98128,98130],{"class":427,"line":790},[425,98119,98006],{"class":701},[425,98121,1680],{"class":1155},[425,98123,1367],{"class":691},[425,98125,98011],{"class":701},[425,98127,1680],{"class":1155},[425,98129,1367],{"class":691},[425,98131,34001],{"class":701},[425,98133,98134],{"class":427,"line":805},[425,98135,94683],{"class":435},[425,98137,98138],{"class":427,"line":818},[425,98139,98140],{"class":435},"array([[24, 23, 22, 21, 20, 19],\n",[425,98142,98143],{"class":427,"line":831},[425,98144,98145],{"class":435},"       [18, 17, 16, 15, 14, 13],\n",[425,98147,98148],{"class":427,"line":841},[425,98149,98150],{"class":435},"       [12, 11, 10,  9,  8,  7],\n",[425,98152,98153],{"class":427,"line":852},[425,98154,98155],{"class":435},"       [ 6,  5,  4,  3,  2,  1]])\n",[425,98157,98158],{"class":427,"line":862},[425,98159,94683],{"class":435},[19,98161,98162],{},"⑦修改元素",[416,98164,98166],{"className":31133,"code":98165,"language":31135,"meta":395,"style":395},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[422,98167,98168,98173,98191,98196],{"__ignoreMap":395},[425,98169,98170],{"class":427,"line":428},[425,98171,98172],{"class":1216},"#获取前两行和前两列\n",[425,98174,98175,98178,98180,98182,98184,98187,98189],{"class":427,"line":698},[425,98176,98177],{"class":701},"sub_a",[425,98179,1204],{"class":1155},[425,98181,97925],{"class":701},[425,98183,1235],{"class":691},[425,98185,98186],{"class":701},",:",[425,98188,1235],{"class":691},[425,98190,34001],{"class":701},[425,98192,98193],{"class":427,"line":710},[425,98194,98195],{"class":1216},"#修改sub_a第一个元素的值\n",[425,98197,98198,98201,98203,98205,98207,98209,98211],{"class":427,"line":721},[425,98199,98200],{"class":701},"sub_a[",[425,98202,1341],{"class":691},[425,98204,1527],{"class":701},[425,98206,1341],{"class":691},[425,98208,2087],{"class":701},[425,98210,1204],{"class":1155},[425,98212,98213],{"class":691},"100\n",[19,98215,98216],{},"⑧数组复制copy()",[416,98218,98220],{"className":31133,"code":98219,"language":31135,"meta":395,"style":395},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[422,98221,98222,98227,98237,98242],{"__ignoreMap":395},[425,98223,98224],{"class":427,"line":428},[425,98225,98226],{"class":1216},"#数组复制\n",[425,98228,98229,98232,98234],{"class":427,"line":698},[425,98230,98231],{"class":701},"copy_a",[425,98233,1204],{"class":1155},[425,98235,98236],{"class":701},"np.copy(sub_a)\n",[425,98238,98239],{"class":427,"line":710},[425,98240,98241],{"class":1216},"#修改copy_a后不影响原数组\n",[425,98243,98244,98247,98249,98251,98253,98255,98257],{"class":427,"line":721},[425,98245,98246],{"class":701},"copy_a[",[425,98248,1341],{"class":691},[425,98250,1527],{"class":701},[425,98252,1341],{"class":691},[425,98254,2087],{"class":701},[425,98256,1204],{"class":1155},[425,98258,98213],{"class":691},[19,98260,98261],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[1074,98263,98264],{},"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":395,"searchDepth":698,"depth":698,"links":98266},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97783,"description":24374},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":98273,"title":98274,"body":98275,"description":24374,"extension":1082,"meta":98767,"navigation":1084,"path":98768,"seo":98769,"stem":98770,"__hash__":98771},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":98276,"toc":98759},[98277,98280,98284,98287,98290,98343,98346,98371,98374,98393,98413,98416,98432,98436,98482,98486,98528,98532,98535,98538,98541,98544,98547,98609,98669,98673,98676,98733,98737,98742,98751,98756],[10,98278,98274],{"id":98279},"_5改变数组的维度",[1099,98281,98283],{"id":98282},"_51-使用reshape","5.1 使用reshape()",[19,98285,98286],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,98288,98289],{},"①一维数组转换为二维数组",[416,98291,98293],{"className":31133,"code":98292,"language":31135,"meta":395,"style":395},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[422,98294,98295,98311,98316,98321,98326],{"__ignoreMap":395},[425,98296,98297,98299,98301,98303,98305,98307,98309],{"class":427,"line":428},[425,98298,22],{"class":701},[425,98300,1204],{"class":1155},[425,98302,93757],{"class":701},[425,98304,1367],{"class":691},[425,98306,1527],{"class":701},[425,98308,1671],{"class":691},[425,98310,1165],{"class":701},[425,98312,98313],{"class":427,"line":698},[425,98314,98315],{"class":1216},"#将一维数组进行转换\n",[425,98317,98318],{"class":427,"line":710},[425,98319,98320],{"class":1216},"#注意点：元素个数不可以变\n",[425,98322,98323],{"class":427,"line":721},[425,98324,98325],{"class":1216},"#转换维度要保持一致，不一致就异常！！！\n",[425,98327,98328,98330,98332,98335,98337,98339,98341],{"class":427,"line":735},[425,98329,94061],{"class":701},[425,98331,1204],{"class":1155},[425,98333,98334],{"class":701},"a.reshape(",[425,98336,1235],{"class":691},[425,98338,1527],{"class":701},[425,98340,1493],{"class":691},[425,98342,1165],{"class":701},[19,98344,98345],{},"②一维数组转换为三维数组",[416,98347,98349],{"className":31133,"code":98348,"language":31135,"meta":395,"style":395},"aaa=a.reshape(2,3,2)\n",[422,98350,98351],{"__ignoreMap":395},[425,98352,98353,98355,98357,98359,98361,98363,98365,98367,98369],{"class":427,"line":428},[425,98354,96276],{"class":701},[425,98356,1204],{"class":1155},[425,98358,98334],{"class":701},[425,98360,1235],{"class":691},[425,98362,1527],{"class":701},[425,98364,1229],{"class":691},[425,98366,1527],{"class":701},[425,98368,1235],{"class":691},[425,98370,1165],{"class":701},[19,98372,98373],{},"③二维数组转化为一维数组",[416,98375,98377],{"className":31133,"code":98376,"language":31135,"meta":395,"style":395},"#知道元素个数：\naa.reshape(12)\n",[422,98378,98379,98384],{"__ignoreMap":395},[425,98380,98381],{"class":427,"line":428},[425,98382,98383],{"class":1216},"#知道元素个数：\n",[425,98385,98386,98389,98391],{"class":427,"line":698},[425,98387,98388],{"class":701},"aa.reshape(",[425,98390,1646],{"class":691},[425,98392,1165],{"class":701},[416,98394,98396],{"className":31133,"code":98395,"language":31135,"meta":395,"style":395},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[422,98397,98398,98403],{"__ignoreMap":395},[425,98399,98400],{"class":427,"line":428},[425,98401,98402],{"class":1216},"#不知道元素个数，参数传递-1\n",[425,98404,98405,98407,98409,98411],{"class":427,"line":698},[425,98406,98388],{"class":701},[425,98408,1680],{"class":1155},[425,98410,1367],{"class":691},[425,98412,1165],{"class":701},[19,98414,98415],{},"④三维数组转换为一维数组",[416,98417,98419],{"className":31133,"code":98418,"language":31135,"meta":395,"style":395},"aaa.reshape(-1)\n",[422,98420,98421],{"__ignoreMap":395},[425,98422,98423,98426,98428,98430],{"class":427,"line":428},[425,98424,98425],{"class":701},"aaa.reshape(",[425,98427,1680],{"class":1155},[425,98429,1367],{"class":691},[425,98431,1165],{"class":701},[1099,98433,98435],{"id":98434},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[416,98437,98439],{"className":31133,"code":98438,"language":31135,"meta":395,"style":395},"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",[422,98440,98441,98468,98473,98477],{"__ignoreMap":395},[425,98442,98443,98445,98447,98449,98451,98453,98455,98457,98459,98461,98463,98465],{"class":427,"line":428},[425,98444,94061],{"class":701},[425,98446,1204],{"class":1155},[425,98448,93757],{"class":701},[425,98450,1367],{"class":691},[425,98452,1527],{"class":701},[425,98454,1671],{"class":691},[425,98456,93762],{"class":701},[425,98458,1235],{"class":691},[425,98460,1527],{"class":701},[425,98462,1493],{"class":691},[425,98464,895],{"class":701},[425,98466,98467],{"class":1216},"#转换为2行6列的数组\n",[425,98469,98470],{"class":427,"line":698},[425,98471,98472],{"class":701},"aa.revel()\n",[425,98474,98475],{"class":427,"line":710},[425,98476,94319],{"class":1216},[425,98478,98479],{"class":427,"line":721},[425,98480,98481],{"class":1216},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[1099,98483,98485],{"id":98484},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[416,98487,98489],{"className":31133,"code":98488,"language":31135,"meta":395,"style":395},"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",[422,98490,98491,98515,98520,98524],{"__ignoreMap":395},[425,98492,98493,98495,98497,98499,98501,98503,98505,98507,98509,98511,98513],{"class":427,"line":428},[425,98494,94061],{"class":701},[425,98496,1204],{"class":1155},[425,98498,93757],{"class":701},[425,98500,1367],{"class":691},[425,98502,1527],{"class":701},[425,98504,1671],{"class":691},[425,98506,93762],{"class":701},[425,98508,1235],{"class":691},[425,98510,1527],{"class":701},[425,98512,1493],{"class":691},[425,98514,1165],{"class":701},[425,98516,98517],{"class":427,"line":698},[425,98518,98519],{"class":701},"aa.flatten()\n",[425,98521,98522],{"class":427,"line":710},[425,98523,94319],{"class":1216},[425,98525,98526],{"class":427,"line":721},[425,98527,98481],{"class":1216},[1099,98529,98531],{"id":98530},"_54-使用resize","5.4 使用resize()",[19,98533,98534],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,98536,98537],{},"通过resize方法可以改变数组的维度",[19,98539,98540],{},"#resize修改数组维度",[19,98542,98543],{},"#以元组的形式指定形状",[19,98545,98546],{},"#改变的是原数组",[416,98548,98550],{"className":31133,"code":98549,"language":31135,"meta":395,"style":395},"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",[422,98551,98552,98568,98588,98601,98605],{"__ignoreMap":395},[425,98553,98554,98556,98558,98560,98562,98564,98566],{"class":427,"line":428},[425,98555,22],{"class":701},[425,98557,1204],{"class":1155},[425,98559,93757],{"class":701},[425,98561,1367],{"class":691},[425,98563,1527],{"class":701},[425,98565,1671],{"class":691},[425,98567,1165],{"class":701},[425,98569,98570,98573,98575,98577,98579,98581,98583,98585],{"class":427,"line":698},[425,98571,98572],{"class":701},"a.shape",[425,98574,1204],{"class":1155},[425,98576,1159],{"class":701},[425,98578,1235],{"class":691},[425,98580,1527],{"class":701},[425,98582,1493],{"class":691},[425,98584,895],{"class":701},[425,98586,98587],{"class":1216},"#改变了原数组\n",[425,98589,98590,98592,98594,98597,98599],{"class":427,"line":710},[425,98591,22],{"class":701},[425,98593,1204],{"class":1155},[425,98595,98596],{"class":701},"resize((",[425,98598,1646],{"class":691},[425,98600,31252],{"class":701},[425,98602,98603],{"class":427,"line":721},[425,98604,94319],{"class":1216},[425,98606,98607],{"class":427,"line":735},[425,98608,98481],{"class":1216},[416,98610,98612],{"className":31133,"code":98611,"language":31135,"meta":395,"style":395},"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",[422,98613,98614,98627,98631,98635,98640,98645,98650,98655,98660,98665],{"__ignoreMap":395},[425,98615,98616,98619,98621,98623,98625],{"class":427,"line":428},[425,98617,98618],{"class":701},"a.resize((",[425,98620,1493],{"class":691},[425,98622,1527],{"class":701},[425,98624,1235],{"class":691},[425,98626,31252],{"class":701},[425,98628,98629],{"class":427,"line":698},[425,98630,94319],{"class":1216},[425,98632,98633],{"class":427,"line":710},[425,98634,94683],{"class":435},[425,98636,98637],{"class":427,"line":721},[425,98638,98639],{"class":435},"array([[ 1,  2],\n",[425,98641,98642],{"class":427,"line":735},[425,98643,98644],{"class":435},"       [ 3,  4],\n",[425,98646,98647],{"class":427,"line":743},[425,98648,98649],{"class":435},"       [ 5,  6],\n",[425,98651,98652],{"class":427,"line":751},[425,98653,98654],{"class":435},"       [ 7,  8],\n",[425,98656,98657],{"class":427,"line":759},[425,98658,98659],{"class":435},"       [ 9, 10],\n",[425,98661,98662],{"class":427,"line":770},[425,98663,98664],{"class":435},"       [11, 12]])\n",[425,98666,98667],{"class":427,"line":780},[425,98668,94683],{"class":435},[1099,98670,98672],{"id":98671},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,98674,98675],{},"改变了原数组",[416,98677,98679],{"className":31133,"code":98678,"language":31135,"meta":395,"style":395},"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",[422,98680,98681,98697,98713,98717,98721,98725,98729],{"__ignoreMap":395},[425,98682,98683,98685,98687,98689,98691,98693,98695],{"class":427,"line":428},[425,98684,22],{"class":701},[425,98686,1204],{"class":1155},[425,98688,93757],{"class":701},[425,98690,1367],{"class":691},[425,98692,1527],{"class":701},[425,98694,1671],{"class":691},[425,98696,1165],{"class":701},[425,98698,98699,98701,98703,98705,98707,98709,98711],{"class":427,"line":698},[425,98700,98572],{"class":701},[425,98702,1204],{"class":1155},[425,98704,1159],{"class":701},[425,98706,1235],{"class":691},[425,98708,1527],{"class":701},[425,98710,1493],{"class":691},[425,98712,1165],{"class":701},[425,98714,98715],{"class":427,"line":710},[425,98716,94319],{"class":1216},[425,98718,98719],{"class":427,"line":721},[425,98720,94683],{"class":435},[425,98722,98723],{"class":427,"line":735},[425,98724,97943],{"class":435},[425,98726,98727],{"class":427,"line":743},[425,98728,97948],{"class":435},[425,98730,98731],{"class":427,"line":751},[425,98732,94683],{"class":435},[1099,98734,98736],{"id":98735},"_56-重要比较","5.6 重要比较：",[19,98738,98739],{},[393,98740],{"alt":395,"src":98741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,98743,98744,98745,98747,98748,98750],{},"口诀：NumPy 函数要么用 ",[422,98746,96718],{},"，要么用 ",[422,98749,32251],{},"，创建结构用 shape，造数据用 size",[19,98752,98753],{},[393,98754],{"alt":395,"src":98755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[1074,98757,98758],{},"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":395,"searchDepth":698,"depth":698,"links":98760},[98761,98762,98763,98764,98765,98766],{"id":98282,"depth":698,"text":98283},{"id":98434,"depth":698,"text":98435},{"id":98484,"depth":698,"text":98485},{"id":98530,"depth":698,"text":98531},{"id":98671,"depth":698,"text":98672},{"id":98735,"depth":698,"text":98736},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":98274,"description":24374},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98773,"title":98774,"body":98775,"description":24374,"extension":1082,"meta":99847,"navigation":1084,"path":99848,"seo":99849,"stem":99850,"__hash__":99851},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98776,"toc":99841},[98777,98780,98784,98787,98790,98793,98858,98861,98901,98904,98986,98989,98994,99016,99018,99023,99028,99031,99034,99189,99192,99394,99398,99401,99404,99472,99474,99479,99482,99485,99565,99569,99572,99574,99647,99649,99654,99656,99736,99740,99743,99746,99749,99752,99755,99758,99838],[10,98778,98774],{"id":98779},"_6数组的拼接",[1099,98781,98783],{"id":98782},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,98785,98786],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,98788,98789],{},"函数内部传两个数列构成的数列或者元组",[19,98791,98792],{},"①一维数组的拼接",[416,98794,98796],{"className":31133,"code":98795,"language":31135,"meta":395,"style":395},"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",[422,98797,98798,98818,98838,98843,98848,98853],{"__ignoreMap":395},[425,98799,98800,98802,98804,98806,98808,98810,98812,98814,98816],{"class":427,"line":428},[425,98801,22],{"class":701},[425,98803,1204],{"class":1155},[425,98805,93779],{"class":701},[425,98807,1367],{"class":691},[425,98809,1527],{"class":701},[425,98811,1235],{"class":691},[425,98813,1527],{"class":701},[425,98815,1229],{"class":691},[425,98817,5657],{"class":701},[425,98819,98820,98822,98824,98826,98828,98830,98832,98834,98836],{"class":427,"line":698},[425,98821,1412],{"class":701},[425,98823,1204],{"class":1155},[425,98825,93779],{"class":701},[425,98827,1442],{"class":691},[425,98829,1527],{"class":701},[425,98831,1468],{"class":691},[425,98833,1527],{"class":701},[425,98835,1493],{"class":691},[425,98837,5657],{"class":701},[425,98839,98840],{"class":427,"line":710},[425,98841,98842],{"class":1216},"#调用concatenate进行数组拼接\n",[425,98844,98845],{"class":427,"line":721},[425,98846,98847],{"class":701},"np.concatenate((a,b))\n",[425,98849,98850],{"class":427,"line":735},[425,98851,98852],{"class":1216},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[425,98854,98855],{"class":427,"line":743},[425,98856,98857],{"class":1216},"#np.concatenate([a,b])\n",[19,98859,98860],{},"②一维多个数组拼接",[416,98862,98864],{"className":31133,"code":98863,"language":31135,"meta":395,"style":395},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[422,98865,98866,98871,98891,98896],{"__ignoreMap":395},[425,98867,98868],{"class":427,"line":428},[425,98869,98870],{"class":1216},"#也可以多个数组进行拼接\n",[425,98872,98873,98875,98877,98879,98881,98883,98885,98887,98889],{"class":427,"line":698},[425,98874,1437],{"class":701},[425,98876,1204],{"class":1155},[425,98878,93779],{"class":701},[425,98880,1594],{"class":691},[425,98882,1527],{"class":701},[425,98884,1620],{"class":691},[425,98886,1527],{"class":701},[425,98888,1671],{"class":691},[425,98890,5657],{"class":701},[425,98892,98893],{"class":427,"line":710},[425,98894,98895],{"class":701},"c\n",[425,98897,98898],{"class":427,"line":721},[425,98899,98900],{"class":701},"np.concatenate((a,b,c))\n",[19,98902,98903],{},"③二维数组拼接",[416,98905,98907],{"className":31133,"code":98906,"language":31135,"meta":395,"style":395},"#二维数组使用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",[422,98908,98909,98914,98938,98963,98968,98973],{"__ignoreMap":395},[425,98910,98911],{"class":427,"line":428},[425,98912,98913],{"class":1216},"#二维数组使用concatenate进行拼接\n",[425,98915,98916,98918,98920,98922,98924,98926,98928,98930,98932,98934,98936],{"class":427,"line":698},[425,98917,94061],{"class":701},[425,98919,1204],{"class":1155},[425,98921,93757],{"class":701},[425,98923,1367],{"class":691},[425,98925,1527],{"class":701},[425,98927,1671],{"class":691},[425,98929,93762],{"class":701},[425,98931,1229],{"class":691},[425,98933,1527],{"class":701},[425,98935,1442],{"class":691},[425,98937,1165],{"class":701},[425,98939,98940,98943,98945,98947,98949,98951,98953,98955,98957,98959,98961],{"class":427,"line":710},[425,98941,98942],{"class":701},"bb",[425,98944,1204],{"class":1155},[425,98946,93757],{"class":701},[425,98948,1486],{"class":691},[425,98950,1527],{"class":701},[425,98952,1790],{"class":691},[425,98954,93762],{"class":701},[425,98956,1229],{"class":691},[425,98958,1527],{"class":701},[425,98960,1442],{"class":691},[425,98962,1165],{"class":701},[425,98964,98965],{"class":427,"line":721},[425,98966,98967],{"class":1216},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[425,98969,98970],{"class":427,"line":735},[425,98971,98972],{"class":1216},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[425,98974,98975,98978,98980,98982,98984],{"class":427,"line":743},[425,98976,98977],{"class":701},"np.concatenate((aa,bb),",[425,98979,48269],{"class":6216},[425,98981,1204],{"class":1155},[425,98983,1341],{"class":691},[425,98985,1165],{"class":701},[19,98987,98988],{},"结果：",[19,98990,98991],{},[393,98992],{"alt":395,"src":98993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[416,98995,98997],{"className":31133,"code":98996,"language":31135,"meta":395,"style":395},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[422,98998,98999,99004],{"__ignoreMap":395},[425,99000,99001],{"class":427,"line":428},[425,99002,99003],{"class":1216},"#指定axis为1进行拼接\n",[425,99005,99006,99008,99010,99012,99014],{"class":427,"line":698},[425,99007,98977],{"class":701},[425,99009,48269],{"class":6216},[425,99011,1204],{"class":1155},[425,99013,1367],{"class":691},[425,99015,1165],{"class":701},[19,99017,98988],{},[19,99019,99020],{},[393,99021],{"alt":395,"src":99022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,99024,99025],{},[400,99026,99027],{},"二维数组总结：0竖着方向，1横着方向",[19,99029,99030],{},"④三维数组拼接",[19,99032,99033],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[416,99035,99037],{"className":31133,"code":99036,"language":31135,"meta":395,"style":395},"#两个三行六列\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",[422,99038,99039,99044,99072,99102,99107,99124,99129,99134,99139,99156,99161,99166,99171,99184],{"__ignoreMap":395},[425,99040,99041],{"class":427,"line":428},[425,99042,99043],{"class":1216},"#两个三行六列\n",[425,99045,99046,99048,99050,99052,99054,99056,99058,99060,99062,99064,99066,99068,99070],{"class":427,"line":698},[425,99047,96276],{"class":701},[425,99049,1204],{"class":1155},[425,99051,93757],{"class":701},[425,99053,1367],{"class":691},[425,99055,1527],{"class":701},[425,99057,1474],{"class":691},[425,99059,93762],{"class":701},[425,99061,1235],{"class":691},[425,99063,1527],{"class":701},[425,99065,1229],{"class":691},[425,99067,1527],{"class":701},[425,99069,1493],{"class":691},[425,99071,1165],{"class":701},[425,99073,99074,99077,99079,99081,99083,99085,99088,99090,99092,99094,99096,99098,99100],{"class":427,"line":710},[425,99075,99076],{"class":701},"bbb",[425,99078,1204],{"class":1155},[425,99080,93757],{"class":701},[425,99082,1486],{"class":691},[425,99084,1527],{"class":701},[425,99086,99087],{"class":691},"137",[425,99089,93762],{"class":701},[425,99091,1235],{"class":691},[425,99093,1527],{"class":701},[425,99095,1229],{"class":691},[425,99097,1527],{"class":701},[425,99099,1493],{"class":691},[425,99101,1165],{"class":701},[425,99103,99104],{"class":427,"line":721},[425,99105,99106],{"class":1216},"#axis=0\n",[425,99108,99109,99111,99113,99116,99118,99120,99122],{"class":427,"line":735},[425,99110,1843],{"class":701},[425,99112,1204],{"class":1155},[425,99114,99115],{"class":701},"np.concatenate((aaa,bbb),",[425,99117,48269],{"class":6216},[425,99119,1204],{"class":1155},[425,99121,1341],{"class":691},[425,99123,1165],{"class":701},[425,99125,99126],{"class":427,"line":743},[425,99127,99128],{"class":701},"s.shape\n",[425,99130,99131],{"class":427,"line":751},[425,99132,99133],{"class":1216},"#输出：(4,3,6)\n",[425,99135,99136],{"class":427,"line":759},[425,99137,99138],{"class":1216},"#axis=1\n",[425,99140,99141,99144,99146,99148,99150,99152,99154],{"class":427,"line":770},[425,99142,99143],{"class":701},"ss",[425,99145,1204],{"class":1155},[425,99147,99115],{"class":701},[425,99149,48269],{"class":6216},[425,99151,1204],{"class":1155},[425,99153,1367],{"class":691},[425,99155,1165],{"class":701},[425,99157,99158],{"class":427,"line":780},[425,99159,99160],{"class":701},"ss.shape\n",[425,99162,99163],{"class":427,"line":790},[425,99164,99165],{"class":1216},"#输出：(2,6,6)\n",[425,99167,99168],{"class":427,"line":805},[425,99169,99170],{"class":1216},"#axis=2\n",[425,99172,99173,99175,99177,99179,99181],{"class":427,"line":818},[425,99174,99115],{"class":701},[425,99176,48269],{"class":6216},[425,99178,1204],{"class":1155},[425,99180,1235],{"class":691},[425,99182,99183],{"class":701},").shape\n",[425,99185,99186],{"class":427,"line":831},[425,99187,99188],{"class":1216},"#输出：（2，3，12）\n",[19,99190,99191],{},"⑤四维数组拼接",[416,99193,99195],{"className":31133,"code":99194,"language":31135,"meta":395,"style":395},"#两个三行六列\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",[422,99196,99197,99201,99229,99257,99282,99308,99312,99325,99330,99334,99346,99351,99355,99367,99372,99377,99389],{"__ignoreMap":395},[425,99198,99199],{"class":427,"line":428},[425,99200,99043],{"class":1216},[425,99202,99203,99205,99207,99209,99211,99213,99215,99217,99219,99221,99223,99225,99227],{"class":427,"line":698},[425,99204,96276],{"class":701},[425,99206,1204],{"class":1155},[425,99208,93757],{"class":701},[425,99210,1367],{"class":691},[425,99212,1527],{"class":701},[425,99214,1474],{"class":691},[425,99216,93762],{"class":701},[425,99218,1235],{"class":691},[425,99220,1527],{"class":701},[425,99222,1229],{"class":691},[425,99224,1527],{"class":701},[425,99226,1493],{"class":691},[425,99228,1165],{"class":701},[425,99230,99231,99233,99235,99237,99239,99241,99243,99245,99247,99249,99251,99253,99255],{"class":427,"line":710},[425,99232,99076],{"class":701},[425,99234,1204],{"class":1155},[425,99236,93757],{"class":701},[425,99238,1486],{"class":691},[425,99240,1527],{"class":701},[425,99242,99087],{"class":691},[425,99244,93762],{"class":701},[425,99246,1235],{"class":691},[425,99248,1527],{"class":701},[425,99250,1229],{"class":691},[425,99252,1527],{"class":701},[425,99254,1493],{"class":691},[425,99256,1165],{"class":701},[425,99258,99259,99262,99264,99266,99268,99270,99272,99274,99276,99278,99280],{"class":427,"line":721},[425,99260,99261],{"class":701},"aaaa",[425,99263,1204],{"class":1155},[425,99265,98425],{"class":701},[425,99267,1235],{"class":691},[425,99269,1527],{"class":701},[425,99271,1229],{"class":691},[425,99273,1527],{"class":701},[425,99275,1229],{"class":691},[425,99277,1527],{"class":701},[425,99279,1235],{"class":691},[425,99281,1165],{"class":701},[425,99283,99284,99287,99289,99292,99294,99296,99298,99300,99302,99304,99306],{"class":427,"line":735},[425,99285,99286],{"class":701},"bbbb",[425,99288,1204],{"class":1155},[425,99290,99291],{"class":701},"bbb.reshape(",[425,99293,1235],{"class":691},[425,99295,1527],{"class":701},[425,99297,1229],{"class":691},[425,99299,1527],{"class":701},[425,99301,1229],{"class":691},[425,99303,1527],{"class":701},[425,99305,1235],{"class":691},[425,99307,1165],{"class":701},[425,99309,99310],{"class":427,"line":743},[425,99311,99106],{"class":1216},[425,99313,99314,99317,99319,99321,99323],{"class":427,"line":751},[425,99315,99316],{"class":701},"np.concatenate((aaaa,bbbb),",[425,99318,48269],{"class":6216},[425,99320,1204],{"class":1155},[425,99322,1341],{"class":691},[425,99324,99183],{"class":701},[425,99326,99327],{"class":427,"line":759},[425,99328,99329],{"class":1216},"#结果：（4，3，3，2）\n",[425,99331,99332],{"class":427,"line":770},[425,99333,99138],{"class":1216},[425,99335,99336,99338,99340,99342,99344],{"class":427,"line":780},[425,99337,99316],{"class":701},[425,99339,48269],{"class":6216},[425,99341,1204],{"class":1155},[425,99343,1367],{"class":691},[425,99345,99183],{"class":701},[425,99347,99348],{"class":427,"line":790},[425,99349,99350],{"class":1216},"#结果：（2，6，3，2）\n",[425,99352,99353],{"class":427,"line":805},[425,99354,99170],{"class":1216},[425,99356,99357,99359,99361,99363,99365],{"class":427,"line":818},[425,99358,99316],{"class":701},[425,99360,48269],{"class":6216},[425,99362,1204],{"class":1155},[425,99364,1235],{"class":691},[425,99366,99183],{"class":701},[425,99368,99369],{"class":427,"line":831},[425,99370,99371],{"class":1216},"#结果：（2，3，6，2）\n",[425,99373,99374],{"class":427,"line":841},[425,99375,99376],{"class":1216},"#axis=3\n",[425,99378,99379,99381,99383,99385,99387],{"class":427,"line":852},[425,99380,99316],{"class":701},[425,99382,48269],{"class":6216},[425,99384,1204],{"class":1155},[425,99386,1229],{"class":691},[425,99388,99183],{"class":701},[425,99390,99391],{"class":427,"line":862},[425,99392,99393],{"class":1216},"#结果：（2，3，3，4）\n",[1099,99395,99397],{"id":99396},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,99399,99400],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,99402,99403],{},"①二维数组",[416,99405,99407],{"className":31133,"code":99406,"language":31135,"meta":395,"style":395},"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",[422,99408,99409,99433,99457,99462,99467],{"__ignoreMap":395},[425,99410,99411,99413,99415,99417,99419,99421,99423,99425,99427,99429,99431],{"class":427,"line":428},[425,99412,94061],{"class":701},[425,99414,1204],{"class":1155},[425,99416,93757],{"class":701},[425,99418,1367],{"class":691},[425,99420,1527],{"class":701},[425,99422,1671],{"class":691},[425,99424,93762],{"class":701},[425,99426,1229],{"class":691},[425,99428,1527],{"class":701},[425,99430,1442],{"class":691},[425,99432,1165],{"class":701},[425,99434,99435,99437,99439,99441,99443,99445,99447,99449,99451,99453,99455],{"class":427,"line":698},[425,99436,98942],{"class":701},[425,99438,1204],{"class":1155},[425,99440,93757],{"class":701},[425,99442,1486],{"class":691},[425,99444,1527],{"class":701},[425,99446,1790],{"class":691},[425,99448,93762],{"class":701},[425,99450,1229],{"class":691},[425,99452,1527],{"class":701},[425,99454,1442],{"class":691},[425,99456,1165],{"class":701},[425,99458,99459],{"class":427,"line":710},[425,99460,99461],{"class":701},"np.hstack((aa,bb))\n",[425,99463,99464],{"class":427,"line":721},[425,99465,99466],{"class":1216},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[425,99468,99469],{"class":427,"line":735},[425,99470,99471],{"class":1216},"#np.hstack([aa,bb])\n",[19,99473,98988],{},[19,99475,99476],{},[393,99477],{"alt":395,"src":99478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,99480,99481],{},"等效于concatenate()函数中axis=1时的情况",[19,99483,99484],{},"②三维数组",[416,99486,99488],{"className":31133,"code":99487,"language":31135,"meta":395,"style":395},"#两个三行六列\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",[422,99489,99490,99494,99522,99550,99555,99560],{"__ignoreMap":395},[425,99491,99492],{"class":427,"line":428},[425,99493,99043],{"class":1216},[425,99495,99496,99498,99500,99502,99504,99506,99508,99510,99512,99514,99516,99518,99520],{"class":427,"line":698},[425,99497,96276],{"class":701},[425,99499,1204],{"class":1155},[425,99501,93757],{"class":701},[425,99503,1367],{"class":691},[425,99505,1527],{"class":701},[425,99507,1474],{"class":691},[425,99509,93762],{"class":701},[425,99511,1235],{"class":691},[425,99513,1527],{"class":701},[425,99515,1229],{"class":691},[425,99517,1527],{"class":701},[425,99519,1493],{"class":691},[425,99521,1165],{"class":701},[425,99523,99524,99526,99528,99530,99532,99534,99536,99538,99540,99542,99544,99546,99548],{"class":427,"line":710},[425,99525,99076],{"class":701},[425,99527,1204],{"class":1155},[425,99529,93757],{"class":701},[425,99531,1486],{"class":691},[425,99533,1527],{"class":701},[425,99535,99087],{"class":691},[425,99537,93762],{"class":701},[425,99539,1235],{"class":691},[425,99541,1527],{"class":701},[425,99543,1229],{"class":691},[425,99545,1527],{"class":701},[425,99547,1493],{"class":691},[425,99549,1165],{"class":701},[425,99551,99552],{"class":427,"line":721},[425,99553,99554],{"class":1216},"#使用hstack\n",[425,99556,99557],{"class":427,"line":735},[425,99558,99559],{"class":701},"np.hstack((aaa,bbb)).shape\n",[425,99561,99562],{"class":427,"line":743},[425,99563,99564],{"class":1216},"#输出：（2，6，6）\n",[1099,99566,99568],{"id":99567},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,99570,99571],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,99573,99403],{},[416,99575,99577],{"className":31133,"code":99576,"language":31135,"meta":395,"style":395},"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",[422,99578,99579,99603,99627,99632,99637,99642],{"__ignoreMap":395},[425,99580,99581,99583,99585,99587,99589,99591,99593,99595,99597,99599,99601],{"class":427,"line":428},[425,99582,94061],{"class":701},[425,99584,1204],{"class":1155},[425,99586,93757],{"class":701},[425,99588,1367],{"class":691},[425,99590,1527],{"class":701},[425,99592,1671],{"class":691},[425,99594,93762],{"class":701},[425,99596,1229],{"class":691},[425,99598,1527],{"class":701},[425,99600,1442],{"class":691},[425,99602,1165],{"class":701},[425,99604,99605,99607,99609,99611,99613,99615,99617,99619,99621,99623,99625],{"class":427,"line":698},[425,99606,98942],{"class":701},[425,99608,1204],{"class":1155},[425,99610,93757],{"class":701},[425,99612,1486],{"class":691},[425,99614,1527],{"class":701},[425,99616,1790],{"class":691},[425,99618,93762],{"class":701},[425,99620,1229],{"class":691},[425,99622,1527],{"class":701},[425,99624,1442],{"class":691},[425,99626,1165],{"class":701},[425,99628,99629],{"class":427,"line":710},[425,99630,99631],{"class":1216},"#vstack 垂直方向进行堆叠\n",[425,99633,99634],{"class":427,"line":721},[425,99635,99636],{"class":701},"np.vstack((aa,bb))\n",[425,99638,99639],{"class":427,"line":735},[425,99640,99641],{"class":1216},"#与hstack传的参数类似，等价于：\n",[425,99643,99644],{"class":427,"line":743},[425,99645,99646],{"class":701},"np.vstack([aa,bb])\n",[19,99648,98988],{},[19,99650,99651],{},[393,99652],{"alt":395,"src":99653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,99655,99484],{},[416,99657,99659],{"className":31133,"code":99658,"language":31135,"meta":395,"style":395},"#两个三行六列\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",[422,99660,99661,99665,99693,99721,99726,99731],{"__ignoreMap":395},[425,99662,99663],{"class":427,"line":428},[425,99664,99043],{"class":1216},[425,99666,99667,99669,99671,99673,99675,99677,99679,99681,99683,99685,99687,99689,99691],{"class":427,"line":698},[425,99668,96276],{"class":701},[425,99670,1204],{"class":1155},[425,99672,93757],{"class":701},[425,99674,1367],{"class":691},[425,99676,1527],{"class":701},[425,99678,1474],{"class":691},[425,99680,93762],{"class":701},[425,99682,1235],{"class":691},[425,99684,1527],{"class":701},[425,99686,1229],{"class":691},[425,99688,1527],{"class":701},[425,99690,1493],{"class":691},[425,99692,1165],{"class":701},[425,99694,99695,99697,99699,99701,99703,99705,99707,99709,99711,99713,99715,99717,99719],{"class":427,"line":710},[425,99696,99076],{"class":701},[425,99698,1204],{"class":1155},[425,99700,93757],{"class":701},[425,99702,1486],{"class":691},[425,99704,1527],{"class":701},[425,99706,99087],{"class":691},[425,99708,93762],{"class":701},[425,99710,1235],{"class":691},[425,99712,1527],{"class":701},[425,99714,1229],{"class":691},[425,99716,1527],{"class":701},[425,99718,1493],{"class":691},[425,99720,1165],{"class":701},[425,99722,99723],{"class":427,"line":721},[425,99724,99725],{"class":1216},"#使用vstack\n",[425,99727,99728],{"class":427,"line":735},[425,99729,99730],{"class":701},"np.vstack((aaa,bbb)).shape\n",[425,99732,99733],{"class":427,"line":743},[425,99734,99735],{"class":1216},"#输出：（4，3，6）\n",[1099,99737,99739],{"id":99738},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,99741,99742],{},"该方法是三维数组特有的方法",[19,99744,99745],{},"也就是说",[19,99747,99748],{},"一维数组拼接方法用：concatenate()",[19,99750,99751],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,99753,99754],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,99756,99757],{},"四维数组及多维数组只能用concatenate进行拼接",[416,99759,99761],{"className":31133,"code":99760,"language":31135,"meta":395,"style":395},"#两个三行六列\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",[422,99762,99763,99767,99795,99823,99828,99833],{"__ignoreMap":395},[425,99764,99765],{"class":427,"line":428},[425,99766,99043],{"class":1216},[425,99768,99769,99771,99773,99775,99777,99779,99781,99783,99785,99787,99789,99791,99793],{"class":427,"line":698},[425,99770,96276],{"class":701},[425,99772,1204],{"class":1155},[425,99774,93757],{"class":701},[425,99776,1367],{"class":691},[425,99778,1527],{"class":701},[425,99780,1474],{"class":691},[425,99782,93762],{"class":701},[425,99784,1235],{"class":691},[425,99786,1527],{"class":701},[425,99788,1229],{"class":691},[425,99790,1527],{"class":701},[425,99792,1493],{"class":691},[425,99794,1165],{"class":701},[425,99796,99797,99799,99801,99803,99805,99807,99809,99811,99813,99815,99817,99819,99821],{"class":427,"line":710},[425,99798,99076],{"class":701},[425,99800,1204],{"class":1155},[425,99802,93757],{"class":701},[425,99804,1486],{"class":691},[425,99806,1527],{"class":701},[425,99808,99087],{"class":691},[425,99810,93762],{"class":701},[425,99812,1235],{"class":691},[425,99814,1527],{"class":701},[425,99816,1229],{"class":691},[425,99818,1527],{"class":701},[425,99820,1493],{"class":691},[425,99822,1165],{"class":701},[425,99824,99825],{"class":427,"line":721},[425,99826,99827],{"class":1216},"#使用dstack\n",[425,99829,99830],{"class":427,"line":735},[425,99831,99832],{"class":701},"np.dstack((aaa,bbb)).shape\n",[425,99834,99835],{"class":427,"line":743},[425,99836,99837],{"class":1216},"#结果：（2，3，12）\n",[1074,99839,99840],{},"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":395,"searchDepth":698,"depth":698,"links":99842},[99843,99844,99845,99846],{"id":98782,"depth":698,"text":98783},{"id":99396,"depth":698,"text":99397},{"id":99567,"depth":698,"text":99568},{"id":99738,"depth":698,"text":99739},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98774,"description":24374},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99853,"title":99854,"body":99855,"description":24374,"extension":1082,"meta":100130,"navigation":1084,"path":100131,"seo":100132,"stem":100133,"__hash__":100134},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99856,"toc":100128},[99857,99860,99863,99957,99960,99963,99966,99969,99972,99975,99978,99981,100125],[10,99858,99854],{"id":99859},"_7数组转置",[19,99861,99862],{},"使用transpose()函数",[416,99864,99866],{"className":31133,"code":99865,"language":31135,"meta":395,"style":395},"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",[422,99867,99868,99878,99902,99907,99912,99917,99922,99930,99934,99938,99943,99948,99953],{"__ignoreMap":395},[425,99869,99870,99872,99874,99876],{"class":427,"line":428},[425,99871,31147],{"class":1155},[425,99873,32135],{"class":701},[425,99875,32138],{"class":1155},[425,99877,32141],{"class":701},[425,99879,99880,99882,99884,99886,99888,99890,99892,99894,99896,99898,99900],{"class":427,"line":698},[425,99881,22],{"class":701},[425,99883,1204],{"class":1155},[425,99885,32472],{"class":701},[425,99887,1367],{"class":691},[425,99889,1527],{"class":701},[425,99891,1671],{"class":691},[425,99893,93762],{"class":701},[425,99895,1442],{"class":691},[425,99897,1527],{"class":701},[425,99899,1229],{"class":691},[425,99901,1165],{"class":701},[425,99903,99904],{"class":427,"line":710},[425,99905,99906],{"class":1216},"#二维数组转置\n",[425,99908,99909],{"class":427,"line":721},[425,99910,99911],{"class":1216},"#调用transpose()函数\n",[425,99913,99914],{"class":427,"line":735},[425,99915,99916],{"class":701},"a.transpose()\n",[425,99918,99919],{"class":427,"line":743},[425,99920,99921],{"class":1216},"#对于二维数组也可以采用.T来实现\n",[425,99923,99924,99927],{"class":427,"line":751},[425,99925,99926],{"class":701},"a.T",[425,99928,99929],{"class":1216},"#与上述代码一样\n",[425,99931,99932],{"class":427,"line":759},[425,99933,94319],{"class":1216},[425,99935,99936],{"class":427,"line":770},[425,99937,94683],{"class":435},[425,99939,99940],{"class":427,"line":780},[425,99941,99942],{"class":435},"array([[ 1,  4,  7, 10],\n",[425,99944,99945],{"class":427,"line":790},[425,99946,99947],{"class":435},"       [ 2,  5,  8, 11],\n",[425,99949,99950],{"class":427,"line":805},[425,99951,99952],{"class":435},"       [ 3,  6,  9, 12]])\n",[425,99954,99955],{"class":427,"line":818},[425,99956,94683],{"class":435},[19,99958,99959],{},"也可以使用np.transpose()的形式",[19,99961,99962],{},"#多维数组进行转置 np.transpose()",[19,99964,99965],{},"#对二维数组也可以使用np.transpose()进行转置",[19,99967,99968],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,99970,99971],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,99973,99974],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,99976,99977],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,99979,99980],{},"四维及以上的数组也是一样的道理",[416,99982,99984],{"className":31133,"code":99983,"language":31135,"meta":395,"style":395},"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",[422,99985,99986,100014,100019,100024,100029,100047,100052,100084,100089,100094,100099,100120],{"__ignoreMap":395},[425,99987,99988,99990,99992,99994,99996,99998,100000,100002,100004,100006,100008,100010,100012],{"class":427,"line":428},[425,99989,1968],{"class":701},[425,99991,1204],{"class":1155},[425,99993,93757],{"class":701},[425,99995,1367],{"class":691},[425,99997,1527],{"class":701},[425,99999,1474],{"class":691},[425,100001,93762],{"class":701},[425,100003,1229],{"class":691},[425,100005,1527],{"class":701},[425,100007,1493],{"class":691},[425,100009,1527],{"class":701},[425,100011,1235],{"class":691},[425,100013,1165],{"class":701},[425,100015,100016],{"class":427,"line":698},[425,100017,100018],{"class":701},"x.shape\n",[425,100020,100021],{"class":427,"line":710},[425,100022,100023],{"class":1216},"#结果：（3,6,2）\n",[425,100025,100026],{"class":427,"line":721},[425,100027,100028],{"class":1216},"#使用np.transpose()进行转置 变为(2,6,3)\n",[425,100030,100031,100034,100036,100038,100040,100042,100044],{"class":427,"line":735},[425,100032,100033],{"class":701},"np.transpose(x,(",[425,100035,1235],{"class":691},[425,100037,1527],{"class":701},[425,100039,1367],{"class":691},[425,100041,1527],{"class":701},[425,100043,1341],{"class":691},[425,100045,100046],{"class":701},")).shape\n",[425,100048,100049],{"class":427,"line":743},[425,100050,100051],{"class":1216},"#结果：(2,6,3)\n",[425,100053,100054,100056,100058,100060,100062,100064,100066,100068,100070,100072,100074,100076,100078,100080,100082],{"class":427,"line":751},[425,100055,99261],{"class":701},[425,100057,1204],{"class":1155},[425,100059,93757],{"class":701},[425,100061,1367],{"class":691},[425,100063,1527],{"class":701},[425,100065,1474],{"class":691},[425,100067,93762],{"class":701},[425,100069,1229],{"class":691},[425,100071,1527],{"class":701},[425,100073,1235],{"class":691},[425,100075,1527],{"class":701},[425,100077,1367],{"class":691},[425,100079,1527],{"class":701},[425,100081,1493],{"class":691},[425,100083,1165],{"class":701},[425,100085,100086],{"class":427,"line":759},[425,100087,100088],{"class":701},"aaaa.shape\n",[425,100090,100091],{"class":427,"line":770},[425,100092,100093],{"class":1216},"#结果：（3，2，1，6）\n",[425,100095,100096],{"class":427,"line":780},[425,100097,100098],{"class":1216},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[425,100100,100101,100104,100106,100108,100110,100112,100114,100116,100118],{"class":427,"line":790},[425,100102,100103],{"class":701},"np.transpose(aaaa,(",[425,100105,1367],{"class":691},[425,100107,1527],{"class":701},[425,100109,1235],{"class":691},[425,100111,1527],{"class":701},[425,100113,1341],{"class":691},[425,100115,1527],{"class":701},[425,100117,1229],{"class":691},[425,100119,100046],{"class":701},[425,100121,100122],{"class":427,"line":805},[425,100123,100124],{"class":1216},"#结果：(2,1,3,6)\n",[1074,100126,100127],{},"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":395,"searchDepth":698,"depth":698,"links":100129},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99854,"description":24374},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":100136,"title":100137,"body":100138,"description":24374,"extension":1082,"meta":100872,"navigation":1084,"path":100873,"seo":100874,"stem":100875,"__hash__":100876},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":100139,"toc":100870},[100140,100143,100146,100149,100152,100155,100158,100161,100164,100273,100276,100279,100867],[10,100141,100137],{"id":100142},"_8数组分割",[19,100144,100145],{},"split分割",[19,100147,100148],{},"numpy.split(ary,indics_or_sections,axis)",[19,100150,100151],{},"解释：",[19,100153,100154],{},"ary:被分割的数组",[19,100156,100157],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,100159,100160],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,100162,100163],{},"①一维数组的分割",[416,100165,100167],{"className":31133,"code":100166,"language":31135,"meta":395,"style":395},"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",[422,100168,100169,100185,100190,100199,100203,100208,100216,100220,100225,100230,100243,100247,100252,100264,100268],{"__ignoreMap":395},[425,100170,100171,100173,100175,100177,100179,100181,100183],{"class":427,"line":428},[425,100172,22],{"class":701},[425,100174,1204],{"class":1155},[425,100176,93757],{"class":701},[425,100178,1367],{"class":691},[425,100180,1527],{"class":701},[425,100182,1569],{"class":691},[425,100184,1165],{"class":701},[425,100186,100187],{"class":427,"line":698},[425,100188,100189],{"class":1216},"#如果传入整数，必须能够平分，否则会报错\n",[425,100191,100192,100195,100197],{"class":427,"line":710},[425,100193,100194],{"class":701},"np.split(a,",[425,100196,1235],{"class":691},[425,100198,1165],{"class":701},[425,100200,100201],{"class":427,"line":721},[425,100202,94319],{"class":1216},[425,100204,100205],{"class":427,"line":735},[425,100206,100207],{"class":1216},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[425,100209,100210,100212,100214],{"class":427,"line":743},[425,100211,100194],{"class":701},[425,100213,1442],{"class":691},[425,100215,1165],{"class":701},[425,100217,100218],{"class":427,"line":751},[425,100219,94319],{"class":1216},[425,100221,100222],{"class":427,"line":759},[425,100223,100224],{"class":1216},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[425,100226,100227],{"class":427,"line":770},[425,100228,100229],{"class":1216},"#传入数组\n",[425,100231,100232,100235,100237,100239,100241],{"class":427,"line":780},[425,100233,100234],{"class":701},"np.split(a,[",[425,100236,1229],{"class":691},[425,100238,1527],{"class":701},[425,100240,1468],{"class":691},[425,100242,5657],{"class":701},[425,100244,100245],{"class":427,"line":790},[425,100246,94319],{"class":1216},[425,100248,100249],{"class":427,"line":805},[425,100250,100251],{"class":1216},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[425,100253,100254,100256,100258,100260,100262],{"class":427,"line":818},[425,100255,100234],{"class":701},[425,100257,1468],{"class":691},[425,100259,1527],{"class":701},[425,100261,1518],{"class":691},[425,100263,5657],{"class":701},[425,100265,100266],{"class":427,"line":831},[425,100267,94319],{"class":1216},[425,100269,100270],{"class":427,"line":841},[425,100271,100272],{"class":1216},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,100274,100275],{},"②二维数组的分割",[19,100277,100278],{},"使用split()",[416,100280,100282],{"className":31133,"code":100281,"language":31135,"meta":395,"style":395},"#二维数组分割\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",[422,100283,100284,100289,100313,100318,100327,100331,100335,100340,100345,100350,100355,100360,100365,100370,100374,100387,100391,100395,100399,100403,100407,100412,100417,100422,100426,100431,100447,100451,100455,100460,100465,100470,100475,100480,100485,100490,100495,100500,100505,100510,100515,100520,100525,100530,100535,100540,100545,100549,100553,100573,100577,100581,100586,100591,100596,100601,100606,100611,100616,100621,100626,100631,100636,100641,100646,100651,100656,100661,100666,100671,100675,100680,100689,100693,100697,100701,100705,100709,100713,100717,100721,100725,100734,100738,100742,100746,100750,100754,100758,100762,100766,100770,100774,100778,100782,100786,100790,100794,100798,100802,100806,100810,100814,100818,100831,100835,100839,100843,100847,100851,100855,100859,100863],{"__ignoreMap":395},[425,100285,100286],{"class":427,"line":428},[425,100287,100288],{"class":1216},"#二维数组分割\n",[425,100290,100291,100293,100295,100297,100299,100301,100303,100305,100307,100309,100311],{"class":427,"line":698},[425,100292,94061],{"class":701},[425,100294,1204],{"class":1155},[425,100296,93757],{"class":701},[425,100298,1367],{"class":691},[425,100300,1527],{"class":701},[425,100302,1474],{"class":691},[425,100304,93762],{"class":701},[425,100306,1493],{"class":691},[425,100308,1527],{"class":701},[425,100310,1493],{"class":691},[425,100312,1165],{"class":701},[425,100314,100315],{"class":427,"line":710},[425,100316,100317],{"class":1216},"#默认axis=0  传入整数平均分,按行来的\n",[425,100319,100320,100323,100325],{"class":427,"line":721},[425,100321,100322],{"class":701},"np.split(aa,",[425,100324,1229],{"class":691},[425,100326,1165],{"class":701},[425,100328,100329],{"class":427,"line":735},[425,100330,96519],{"class":1216},[425,100332,100333],{"class":427,"line":743},[425,100334,94683],{"class":435},[425,100336,100337],{"class":427,"line":751},[425,100338,100339],{"class":435},"[array([[ 1,  2,  3,  4,  5,  6],\n",[425,100341,100342],{"class":427,"line":759},[425,100343,100344],{"class":435},"        [ 7,  8,  9, 10, 11, 12]]),\n",[425,100346,100347],{"class":427,"line":770},[425,100348,100349],{"class":435}," array([[13, 14, 15, 16, 17, 18],\n",[425,100351,100352],{"class":427,"line":780},[425,100353,100354],{"class":435},"        [19, 20, 21, 22, 23, 24]]),\n",[425,100356,100357],{"class":427,"line":790},[425,100358,100359],{"class":435}," array([[25, 26, 27, 28, 29, 30],\n",[425,100361,100362],{"class":427,"line":805},[425,100363,100364],{"class":435},"        [31, 32, 33, 34, 35, 36]])]\n",[425,100366,100367],{"class":427,"line":818},[425,100368,100369],{"class":435}," '''\n",[425,100371,100372],{"class":427,"line":831},[425,100373,100229],{"class":1216},[425,100375,100376,100379,100381,100383,100385],{"class":427,"line":841},[425,100377,100378],{"class":701},"np.split(aa,[",[425,100380,1235],{"class":691},[425,100382,1527],{"class":701},[425,100384,1468],{"class":691},[425,100386,5657],{"class":701},[425,100388,100389],{"class":427,"line":852},[425,100390,96519],{"class":1216},[425,100392,100393],{"class":427,"line":862},[425,100394,94683],{"class":435},[425,100396,100397],{"class":427,"line":878},[425,100398,100339],{"class":435},[425,100400,100401],{"class":427,"line":914},[425,100402,100344],{"class":435},[425,100404,100405],{"class":427,"line":943},[425,100406,100349],{"class":435},[425,100408,100409],{"class":427,"line":956},[425,100410,100411],{"class":435},"        [19, 20, 21, 22, 23, 24],\n",[425,100413,100414],{"class":427,"line":964},[425,100415,100416],{"class":435},"        [25, 26, 27, 28, 29, 30]]),\n",[425,100418,100419],{"class":427,"line":2733},[425,100420,100421],{"class":435}," array([[31, 32, 33, 34, 35, 36]])]\n",[425,100423,100424],{"class":427,"line":2750},[425,100425,94683],{"class":435},[425,100427,100428],{"class":427,"line":2755},[425,100429,100430],{"class":1216},"#axis=1 按照列来分\n",[425,100432,100433,100435,100437,100439,100441,100443,100445],{"class":427,"line":2760},[425,100434,100322],{"class":701},[425,100436,1229],{"class":691},[425,100438,1527],{"class":701},[425,100440,48269],{"class":6216},[425,100442,1204],{"class":1155},[425,100444,1367],{"class":691},[425,100446,1165],{"class":701},[425,100448,100449],{"class":427,"line":2765},[425,100450,96519],{"class":1216},[425,100452,100453],{"class":427,"line":2779},[425,100454,94683],{"class":435},[425,100456,100457],{"class":427,"line":2784},[425,100458,100459],{"class":435},"[array([[ 1,  2],\n",[425,100461,100462],{"class":427,"line":3577},[425,100463,100464],{"class":435},"        [ 7,  8],\n",[425,100466,100467],{"class":427,"line":3591},[425,100468,100469],{"class":435},"        [13, 14],\n",[425,100471,100472],{"class":427,"line":3599},[425,100473,100474],{"class":435},"        [19, 20],\n",[425,100476,100477],{"class":427,"line":3604},[425,100478,100479],{"class":435},"        [25, 26],\n",[425,100481,100482],{"class":427,"line":3610},[425,100483,100484],{"class":435},"        [31, 32]]),\n",[425,100486,100487],{"class":427,"line":3616},[425,100488,100489],{"class":435}," array([[ 3,  4],\n",[425,100491,100492],{"class":427,"line":3621},[425,100493,100494],{"class":435},"        [ 9, 10],\n",[425,100496,100497],{"class":427,"line":8948},[425,100498,100499],{"class":435},"        [15, 16],\n",[425,100501,100502],{"class":427,"line":8972},[425,100503,100504],{"class":435},"        [21, 22],\n",[425,100506,100507],{"class":427,"line":8977},[425,100508,100509],{"class":435},"        [27, 28],\n",[425,100511,100512],{"class":427,"line":8983},[425,100513,100514],{"class":435},"        [33, 34]]),\n",[425,100516,100517],{"class":427,"line":9010},[425,100518,100519],{"class":435}," array([[ 5,  6],\n",[425,100521,100522],{"class":427,"line":9015},[425,100523,100524],{"class":435},"        [11, 12],\n",[425,100526,100527],{"class":427,"line":9021},[425,100528,100529],{"class":435},"        [17, 18],\n",[425,100531,100532],{"class":427,"line":9033},[425,100533,100534],{"class":435},"        [23, 24],\n",[425,100536,100537],{"class":427,"line":9045},[425,100538,100539],{"class":435},"        [29, 30],\n",[425,100541,100542],{"class":427,"line":9057},[425,100543,100544],{"class":435},"        [35, 36]])]\n",[425,100546,100547],{"class":427,"line":10715},[425,100548,100369],{"class":435},[425,100550,100551],{"class":427,"line":10740},[425,100552,100229],{"class":1216},[425,100554,100555,100557,100559,100561,100563,100565,100567,100569,100571],{"class":427,"line":10763},[425,100556,100378],{"class":701},[425,100558,1367],{"class":691},[425,100560,1527],{"class":701},[425,100562,1235],{"class":691},[425,100564,42364],{"class":701},[425,100566,48269],{"class":6216},[425,100568,1204],{"class":1155},[425,100570,1367],{"class":691},[425,100572,1165],{"class":701},[425,100574,100575],{"class":427,"line":10787},[425,100576,94319],{"class":1216},[425,100578,100579],{"class":427,"line":10792},[425,100580,94683],{"class":435},[425,100582,100583],{"class":427,"line":10797},[425,100584,100585],{"class":435},"[array([[ 1],\n",[425,100587,100588],{"class":427,"line":10802},[425,100589,100590],{"class":435},"        [ 7],\n",[425,100592,100593],{"class":427,"line":10811},[425,100594,100595],{"class":435},"        [13],\n",[425,100597,100598],{"class":427,"line":10816},[425,100599,100600],{"class":435},"        [19],\n",[425,100602,100603],{"class":427,"line":10822},[425,100604,100605],{"class":435},"        [25],\n",[425,100607,100608],{"class":427,"line":10843},[425,100609,100610],{"class":435},"        [31]]),\n",[425,100612,100613],{"class":427,"line":10849},[425,100614,100615],{"class":435}," array([[ 2],\n",[425,100617,100618],{"class":427,"line":10863},[425,100619,100620],{"class":435},"        [ 8],\n",[425,100622,100623],{"class":427,"line":10869},[425,100624,100625],{"class":435},"        [14],\n",[425,100627,100628],{"class":427,"line":10896},[425,100629,100630],{"class":435},"        [20],\n",[425,100632,100633],{"class":427,"line":10905},[425,100634,100635],{"class":435},"        [26],\n",[425,100637,100638],{"class":427,"line":10911},[425,100639,100640],{"class":435},"        [32]]),\n",[425,100642,100643],{"class":427,"line":10919},[425,100644,100645],{"class":435}," array([[ 3,  4,  5,  6],\n",[425,100647,100648],{"class":427,"line":10924},[425,100649,100650],{"class":435},"        [ 9, 10, 11, 12],\n",[425,100652,100653],{"class":427,"line":17601},[425,100654,100655],{"class":435},"        [15, 16, 17, 18],\n",[425,100657,100658],{"class":427,"line":17607},[425,100659,100660],{"class":435},"        [21, 22, 23, 24],\n",[425,100662,100663],{"class":427,"line":17630},[425,100664,100665],{"class":435},"        [27, 28, 29, 30],\n",[425,100667,100668],{"class":427,"line":17636},[425,100669,100670],{"class":435},"        [33, 34, 35, 36]])]\n",[425,100672,100673],{"class":427,"line":17659},[425,100674,94683],{"class":435},[425,100676,100677],{"class":427,"line":17673},[425,100678,100679],{"class":1216},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[425,100681,100682,100685,100687],{"class":427,"line":17693},[425,100683,100684],{"class":701},"np.vsplit(aa,",[425,100686,1229],{"class":691},[425,100688,1165],{"class":701},[425,100690,100691],{"class":427,"line":17699},[425,100692,94319],{"class":1216},[425,100694,100695],{"class":427,"line":17710},[425,100696,94683],{"class":435},[425,100698,100699],{"class":427,"line":17733},[425,100700,100339],{"class":435},[425,100702,100703],{"class":427,"line":17755},[425,100704,100344],{"class":435},[425,100706,100707],{"class":427,"line":17760},[425,100708,100349],{"class":435},[425,100710,100711],{"class":427,"line":17766},[425,100712,100354],{"class":435},[425,100714,100715],{"class":427,"line":17780},[425,100716,100359],{"class":435},[425,100718,100719],{"class":427,"line":17793},[425,100720,100364],{"class":435},[425,100722,100723],{"class":427,"line":17798},[425,100724,94683],{"class":435},[425,100726,100727,100730,100732],{"class":427,"line":17812},[425,100728,100729],{"class":701},"np.hsplit(aa,",[425,100731,1229],{"class":691},[425,100733,1165],{"class":701},[425,100735,100736],{"class":427,"line":17817},[425,100737,94319],{"class":1216},[425,100739,100740],{"class":427,"line":17823},[425,100741,94683],{"class":435},[425,100743,100744],{"class":427,"line":17828},[425,100745,100459],{"class":435},[425,100747,100748],{"class":427,"line":17842},[425,100749,100464],{"class":435},[425,100751,100752],{"class":427,"line":17847},[425,100753,100469],{"class":435},[425,100755,100756],{"class":427,"line":17852},[425,100757,100474],{"class":435},[425,100759,100760],{"class":427,"line":17866},[425,100761,100479],{"class":435},[425,100763,100764],{"class":427,"line":17878},[425,100765,100484],{"class":435},[425,100767,100768],{"class":427,"line":17883},[425,100769,100489],{"class":435},[425,100771,100772],{"class":427,"line":17896},[425,100773,100494],{"class":435},[425,100775,100776],{"class":427,"line":17901},[425,100777,100499],{"class":435},[425,100779,100780],{"class":427,"line":17906},[425,100781,100504],{"class":435},[425,100783,100784],{"class":427,"line":17911},[425,100785,100509],{"class":435},[425,100787,100788],{"class":427,"line":17924},[425,100789,100514],{"class":435},[425,100791,100792],{"class":427,"line":17929},[425,100793,100519],{"class":435},[425,100795,100796],{"class":427,"line":33388},[425,100797,100524],{"class":435},[425,100799,100800],{"class":427,"line":33394},[425,100801,100529],{"class":435},[425,100803,100804],{"class":427,"line":33400},[425,100805,100534],{"class":435},[425,100807,100808],{"class":427,"line":33406},[425,100809,100539],{"class":435},[425,100811,100812],{"class":427,"line":33412},[425,100813,100544],{"class":435},[425,100815,100816],{"class":427,"line":33423},[425,100817,94683],{"class":435},[425,100819,100820,100823,100825,100827,100829],{"class":427,"line":33429},[425,100821,100822],{"class":701},"np.vsplit(aa,[",[425,100824,1235],{"class":691},[425,100826,1527],{"class":701},[425,100828,1468],{"class":691},[425,100830,5657],{"class":701},[425,100832,100833],{"class":427,"line":33449},[425,100834,94319],{"class":1216},[425,100836,100837],{"class":427,"line":33455},[425,100838,94683],{"class":435},[425,100840,100841],{"class":427,"line":33466},[425,100842,100339],{"class":435},[425,100844,100845],{"class":427,"line":33472},[425,100846,100344],{"class":435},[425,100848,100849],{"class":427,"line":33478},[425,100850,100349],{"class":435},[425,100852,100853],{"class":427,"line":33484},[425,100854,100411],{"class":435},[425,100856,100857],{"class":427,"line":33490},[425,100858,100416],{"class":435},[425,100860,100861],{"class":427,"line":33496},[425,100862,100421],{"class":435},[425,100864,100865],{"class":427,"line":33502},[425,100866,100369],{"class":435},[1074,100868,100869],{},"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":395,"searchDepth":698,"depth":698,"links":100871},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":100137,"description":24374},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100878,"title":100879,"body":100880,"description":24374,"extension":1082,"meta":101374,"navigation":1084,"path":101375,"seo":101376,"stem":101377,"__hash__":101378},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100881,"toc":101365},[100882,100885,100888,100913,100917,100976,101028,101032,101034,101070,101124,101126,101164,101235,101239,101244,101248,101251,101284,101287,101291,101294,101297,101300,101303,101308,101312,101315,101318,101321,101324,101329,101333,101338,101341,101362],[10,100883,100879],{"id":100884},"_9数学函数",[19,100886,100887],{},"补充回顾：python的列表推导式",[416,100889,100891],{"className":31133,"code":100890,"language":31135,"meta":395,"style":395},"[1\u002Fi for i in a]\n",[422,100892,100893],{"__ignoreMap":395},[425,100894,100895,100897,100899,100901,100904,100906,100908,100910],{"class":427,"line":428},[425,100896,2037],{"class":701},[425,100898,1367],{"class":691},[425,100900,1732],{"class":1155},[425,100902,100903],{"class":701},"i ",[425,100905,4025],{"class":1155},[425,100907,10437],{"class":701},[425,100909,27034],{"class":1155},[425,100911,100912],{"class":701}," a]\n",[1099,100914,100916],{"id":100915},"_91-求倒数","9.1 求倒数",[416,100918,100920],{"className":31133,"code":100919,"language":31135,"meta":395,"style":395},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[422,100921,100922,100927,100955,100967],{"__ignoreMap":395},[425,100923,100924],{"class":427,"line":428},[425,100925,100926],{"class":1216},"#数组求倒数\n",[425,100928,100929,100931,100933,100935,100937,100939,100941,100943,100945,100947,100949,100951,100953],{"class":427,"line":698},[425,100930,22],{"class":701},[425,100932,1204],{"class":1155},[425,100934,2037],{"class":701},[425,100936,1367],{"class":691},[425,100938,1527],{"class":701},[425,100940,1235],{"class":691},[425,100942,1527],{"class":701},[425,100944,1229],{"class":691},[425,100946,1527],{"class":701},[425,100948,1442],{"class":691},[425,100950,1527],{"class":701},[425,100952,1468],{"class":691},[425,100954,34001],{"class":701},[425,100956,100957,100959,100961,100964],{"class":427,"line":710},[425,100958,1412],{"class":701},[425,100960,1204],{"class":1155},[425,100962,100963],{"class":701},"np.array(a)",[425,100965,100966],{"class":1216},"#将列表转换为数组\n",[425,100968,100969,100971,100973],{"class":427,"line":721},[425,100970,1367],{"class":691},[425,100972,1732],{"class":1155},[425,100974,100975],{"class":701},"b\n",[416,100977,100979],{"className":31133,"code":100978,"language":31135,"meta":395,"style":395},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[422,100980,100981,101009,101018,101023],{"__ignoreMap":395},[425,100982,100983,100985,100987,100989,100991,100993,100995,100997,100999,101001,101003,101005,101007],{"class":427,"line":428},[425,100984,22],{"class":701},[425,100986,1204],{"class":1155},[425,100988,2037],{"class":701},[425,100990,1367],{"class":691},[425,100992,1527],{"class":701},[425,100994,1235],{"class":691},[425,100996,1527],{"class":701},[425,100998,1229],{"class":691},[425,101000,1527],{"class":701},[425,101002,1442],{"class":691},[425,101004,1527],{"class":701},[425,101006,1468],{"class":691},[425,101008,34001],{"class":701},[425,101010,101011,101013,101015],{"class":427,"line":698},[425,101012,1412],{"class":701},[425,101014,1204],{"class":1155},[425,101016,101017],{"class":701},"np.array(a)\n",[425,101019,101020],{"class":427,"line":710},[425,101021,101022],{"class":1216},"#调用numpy中的函数reciprocal()\n",[425,101024,101025],{"class":427,"line":721},[425,101026,101027],{"class":701},"np.reciprocal(b)\n",[1099,101029,101031],{"id":101030},"_92-求平方","9.2 求平方",[19,101033,95285],{},[416,101035,101037],{"className":31133,"code":101036,"language":31135,"meta":395,"style":395},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[422,101038,101039,101044,101049,101065],{"__ignoreMap":395},[425,101040,101041],{"class":427,"line":428},[425,101042,101043],{"class":1216},"#square()，求平方\n",[425,101045,101046],{"class":427,"line":698},[425,101047,101048],{"class":1216},"#一维数组\n",[425,101050,101051,101053,101055,101057,101059,101061,101063],{"class":427,"line":710},[425,101052,22],{"class":701},[425,101054,1204],{"class":1155},[425,101056,93757],{"class":701},[425,101058,1367],{"class":691},[425,101060,1527],{"class":701},[425,101062,1594],{"class":691},[425,101064,1165],{"class":701},[425,101066,101067],{"class":427,"line":721},[425,101068,101069],{"class":701},"np.square(a)\n",[416,101071,101073],{"className":31133,"code":101072,"language":31135,"meta":395,"style":395},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[422,101074,101075,101080,101085,101106],{"__ignoreMap":395},[425,101076,101077],{"class":427,"line":428},[425,101078,101079],{"class":1216},"#或者通过循环遍历的形式来计算\n",[425,101081,101082],{"class":427,"line":698},[425,101083,101084],{"class":1216},"#这是一个列表\n",[425,101086,101087,101090,101092,101094,101096,101098,101100,101103],{"class":427,"line":710},[425,101088,101089],{"class":701},"[i",[425,101091,1603],{"class":1155},[425,101093,100903],{"class":701},[425,101095,4025],{"class":1155},[425,101097,10437],{"class":701},[425,101099,27034],{"class":1155},[425,101101,101102],{"class":701}," a]",[425,101104,101105],{"class":1216},"#这个求完之后在数列当中\n",[425,101107,101108,101111,101113,101115,101117,101119,101121],{"class":427,"line":721},[425,101109,101110],{"class":701},"np.array([i",[425,101112,1603],{"class":1155},[425,101114,100903],{"class":701},[425,101116,4025],{"class":1155},[425,101118,10437],{"class":701},[425,101120,27034],{"class":1155},[425,101122,101123],{"class":701}," a])\n",[19,101125,94046],{},[416,101127,101129],{"className":31133,"code":101128,"language":31135,"meta":395,"style":395},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[422,101130,101131,101135,101159],{"__ignoreMap":395},[425,101132,101133],{"class":427,"line":428},[425,101134,94056],{"class":1216},[425,101136,101137,101139,101141,101143,101145,101147,101149,101151,101153,101155,101157],{"class":427,"line":698},[425,101138,94061],{"class":701},[425,101140,1204],{"class":1155},[425,101142,93757],{"class":701},[425,101144,1367],{"class":691},[425,101146,1527],{"class":701},[425,101148,1671],{"class":691},[425,101150,93762],{"class":701},[425,101152,1442],{"class":691},[425,101154,1527],{"class":701},[425,101156,1229],{"class":691},[425,101158,1165],{"class":701},[425,101160,101161],{"class":427,"line":710},[425,101162,101163],{"class":701},"np.square(aa)\n",[416,101165,101167],{"className":31133,"code":101166,"language":31135,"meta":395,"style":395},"#传统的方式\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",[422,101168,101169,101174,101183,101199,101215,101230],{"__ignoreMap":395},[425,101170,101171],{"class":427,"line":428},[425,101172,101173],{"class":1216},"#传统的方式\n",[425,101175,101176,101178,101180],{"class":427,"line":698},[425,101177,98942],{"class":701},[425,101179,1204],{"class":1155},[425,101181,101182],{"class":701},"np.empty_like(aa)\n",[425,101184,101185,101187,101189,101191,101193,101195,101197],{"class":427,"line":710},[425,101186,4025],{"class":1155},[425,101188,10437],{"class":701},[425,101190,27034],{"class":1155},[425,101192,33198],{"class":691},[425,101194,1159],{"class":701},[425,101196,1442],{"class":691},[425,101198,31541],{"class":701},[425,101200,101201,101203,101205,101207,101209,101211,101213],{"class":427,"line":721},[425,101202,4201],{"class":1155},[425,101204,10499],{"class":701},[425,101206,27034],{"class":1155},[425,101208,33198],{"class":691},[425,101210,1159],{"class":701},[425,101212,1229],{"class":691},[425,101214,31541],{"class":701},[425,101216,101217,101220,101222,101225,101227],{"class":427,"line":735},[425,101218,101219],{"class":701},"        bb[i,j]",[425,101221,1204],{"class":1155},[425,101223,101224],{"class":701},"aa[i,j]",[425,101226,1603],{"class":1155},[425,101228,101229],{"class":701},"aa[i,j]\n",[425,101231,101232],{"class":427,"line":743},[425,101233,101234],{"class":701},"bb\n",[1099,101236,101238],{"id":101237},"_93-求各元素的符号","9.3 求各元素的符号",[19,101240,101241],{},[393,101242],{"alt":395,"src":101243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[1099,101245,101247],{"id":101246},"_94-modf函数","9.4 modf函数",[19,101249,101250],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[416,101252,101254],{"className":31133,"code":101253,"language":31135,"meta":395,"style":395},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[422,101255,101256,101279],{"__ignoreMap":395},[425,101257,101258,101260,101262,101264,101266,101268,101270,101272,101274,101277],{"class":427,"line":428},[425,101259,22],{"class":701},[425,101261,1204],{"class":1155},[425,101263,93757],{"class":701},[425,101265,1680],{"class":1155},[425,101267,1594],{"class":691},[425,101269,1527],{"class":701},[425,101271,1594],{"class":691},[425,101273,1527],{"class":701},[425,101275,101276],{"class":691},"0.3",[425,101278,1165],{"class":701},[425,101280,101281],{"class":427,"line":698},[425,101282,101283],{"class":701},"np.modf(a)\n",[19,101285,101286],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[1099,101288,101290],{"id":101289},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,101292,101293],{},"np.cell()",[19,101295,101296],{},"np.floor()",[19,101298,101299],{},"np.rint()",[19,101301,101302],{},"对各元素分别向上取整、向下取整、四舍五入",[19,101304,101305],{},[393,101306],{"alt":395,"src":101307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[1099,101309,101311],{"id":101310},"_96-around函数","9.6 around()函数",[19,101313,101314],{},"around()函数也可以实现对数的小数位数进行操作",[19,101316,101317],{},"其中的参数：",[19,101319,101320],{},"1.要传的数组",[19,101322,101323],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,101325,101326],{},[393,101327],{"alt":395,"src":101328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[1099,101330,101332],{"id":101331},"_97-三角函数","9.7 三角函数",[19,101334,101335],{},[393,101336],{"alt":395,"src":101337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,101339,101340],{},"引入图像模块非常重要",[416,101342,101344],{"className":31133,"code":101343,"language":31135,"meta":395,"style":395},"from matplotlib import pyplot as plt\n",[422,101345,101346],{"__ignoreMap":395},[425,101347,101348,101350,101353,101355,101358,101360],{"class":427,"line":428},[425,101349,31492],{"class":1155},[425,101351,101352],{"class":701}," matplotlib ",[425,101354,31147],{"class":1155},[425,101356,101357],{"class":701}," pyplot ",[425,101359,32138],{"class":1155},[425,101361,32192],{"class":701},[1074,101363,101364],{},"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":395,"searchDepth":698,"depth":698,"links":101366},[101367,101368,101369,101370,101371,101372,101373],{"id":100915,"depth":698,"text":100916},{"id":101030,"depth":698,"text":101031},{"id":101237,"depth":698,"text":101238},{"id":101246,"depth":698,"text":101247},{"id":101289,"depth":698,"text":101290},{"id":101310,"depth":698,"text":101311},{"id":101331,"depth":698,"text":101332},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100879,"description":24374},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101380,"title":101381,"body":101382,"description":24374,"extension":1082,"meta":101386,"navigation":1084,"path":101387,"seo":101388,"stem":101389,"__hash__":101390},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101383,"toc":101384},[],{"title":395,"searchDepth":698,"depth":698,"links":101385},[],{"category":51175},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101381,"description":24374},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101392,"title":101393,"body":101394,"description":395,"extension":1082,"meta":103402,"navigation":1084,"path":103403,"seo":103404,"stem":103405,"__hash__":103406},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101395,"toc":103378},[101396,101399,101403,101406,101409,101415,101418,101441,101444,101478,101481,101522,101526,101529,101622,101625,101669,101672,101689,101692,101706,101709,101712,101757,101760,101797,101801,101804,101810,101815,101835,101839,101842,101908,101911,101929,101933,101936,101965,101975,101981,101985,101988,101994,102005,102009,102012,102042,102045,102325,102328,102331,102342,102345,102348,102370,102377,102380,102398,102401,102404,102418,102426,102429,102455,102461,102464,102467,102477,102489,102509,102518,102538,102548,102572,102585,102599,102604,102645,102662,102687,102699,102719,102725,102770,102789,102806,102819,102835,102842,102854,102863,102898,102919,102944,102957,102981,102996,103021,103024,103045,103054,103057,103068,103072,103075,103081,103093,103100,103104,103107,103119,103122,103136,103139,103149,103159,103162,103202,103205,103209,103215,103218,103232,103236,103239,103272,103276,103279,103302,103310,103313,103319,103325,103328,103331,103359,103363,103366,103372,103375],[10,101397,101393],{"id":101398},"_1环境安装与第一个-mujoco-程序",[1099,101400,101402],{"id":101401},"_1目标说明","1.目标说明",[19,101404,101405],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,101407,101408],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[416,101410,101413],{"className":101411,"code":101412,"language":6187,"meta":395},[6185],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[422,101414,101412],{"__ignoreMap":395},[19,101416,101417],{},"需要掌握:",[972,101419,101420,101423,101426,101431,101436],{},[450,101421,101422],{},"Fedora 44 下 MuJoCo 的系统依赖",[450,101424,101425],{},"Python 虚拟环境创建",[450,101427,101428],{},[422,101429,101430],{},"mujoco.MjModel",[450,101432,101433],{},[422,101434,101435],{},"mujoco.MjData",[450,101437,101438],{},[422,101439,101440],{},"mujoco.mj_step(model, data)",[19,101442,101443],{},"MuJoCo 中最重要的两个对象:",[35,101445,101446,101456],{},[38,101447,101448],{},[41,101449,101450,101453],{},[44,101451,101452],{"align":46},"对象",[44,101454,101455],{"align":46},"含义",[55,101457,101458,101468],{},[41,101459,101460,101465],{},[60,101461,101462],{"align":46},[422,101463,101464],{},"MjModel",[60,101466,101467],{"align":46},"模型结构，来自 XML，基本不随时间变化",[41,101469,101470,101475],{},[60,101471,101472],{"align":46},[422,101473,101474],{},"MjData",[60,101476,101477],{"align":46},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,101479,101480],{},"可以先用一个类比理解：",[35,101482,101483,101493],{},[38,101484,101485],{},[41,101486,101487,101490],{},[44,101488,101489],{"align":46},"类比",[44,101491,101492],{"align":46},"MuJoCo 对象",[55,101494,101495,101504,101513],{},[41,101496,101497,101500],{},[60,101498,101499],{"align":46},"游戏地图和角色配置",[60,101501,101502],{"align":46},[422,101503,101464],{},[41,101505,101506,101509],{},[60,101507,101508],{"align":46},"游戏运行到当前帧的状态",[60,101510,101511],{"align":46},[422,101512,101474],{},[41,101514,101515,101518],{},[60,101516,101517],{"align":46},"前进一帧",[60,101519,101520],{"align":46},[422,101521,101440],{},[1099,101523,101525],{"id":101524},"_2环境与依赖安装","2.环境与依赖安装",[19,101527,101528],{},"Fedora 44 系统依赖:",[416,101530,101532],{"className":418,"code":101531,"language":420,"meta":395,"style":395},"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",[422,101533,101534,101546,101559,101572,101582,101592,101611],{"__ignoreMap":395},[425,101535,101536,101538,101540,101542,101544],{"class":427,"line":428},[425,101537,652],{"class":431},[425,101539,27305],{"class":435},[425,101541,24828],{"class":435},[425,101543,27389],{"class":691},[425,101545,695],{"class":691},[425,101547,101548,101551,101554,101557],{"class":427,"line":698},[425,101549,101550],{"class":435},"  python3",[425,101552,101553],{"class":435}," python3-pip",[425,101555,101556],{"class":435}," python3-virtualenv",[425,101558,695],{"class":691},[425,101560,101561,101564,101567,101570],{"class":427,"line":710},[425,101562,101563],{"class":435},"  mesa-libGL",[425,101565,101566],{"class":435}," mesa-libGLU",[425,101568,101569],{"class":435}," mesa-dri-drivers",[425,101571,695],{"class":691},[425,101573,101574,101577,101580],{"class":427,"line":721},[425,101575,101576],{"class":435},"  libglvnd-glx",[425,101578,101579],{"class":435}," libglvnd-opengl",[425,101581,695],{"class":691},[425,101583,101584,101587,101590],{"class":427,"line":735},[425,101585,101586],{"class":435},"  glfw",[425,101588,101589],{"class":435}," glfw-devel",[425,101591,695],{"class":691},[425,101593,101594,101597,101600,101603,101606,101609],{"class":427,"line":743},[425,101595,101596],{"class":435},"  libX11",[425,101598,101599],{"class":435}," libXcursor",[425,101601,101602],{"class":435}," libXi",[425,101604,101605],{"class":435}," libXinerama",[425,101607,101608],{"class":435}," libXrandr",[425,101610,695],{"class":691},[425,101612,101613,101616,101619],{"class":427,"line":751},[425,101614,101615],{"class":435},"  gcc",[425,101617,101618],{"class":435}," gcc-c++",[425,101620,101621],{"class":435}," make\n",[19,101623,101624],{},"创建 Python 环境:",[416,101626,101628],{"className":418,"code":101627,"language":420,"meta":395,"style":395},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[422,101629,101630,101644,101652],{"__ignoreMap":395},[425,101631,101632,101635,101638,101641],{"class":427,"line":428},[425,101633,101634],{"class":431},"python3",[425,101636,101637],{"class":691}," -m",[425,101639,101640],{"class":435}," venv",[425,101642,101643],{"class":435}," .venv\n",[425,101645,101646,101649],{"class":427,"line":698},[425,101647,101648],{"class":691},"source",[425,101650,101651],{"class":435}," .venv\u002Fbin\u002Factivate\n",[425,101653,101654,101656,101658,101661,101663,101666],{"class":427,"line":710},[425,101655,31135],{"class":431},[425,101657,101637],{"class":691},[425,101659,101660],{"class":435}," pip",[425,101662,24828],{"class":435},[425,101664,101665],{"class":691}," --upgrade",[425,101667,101668],{"class":435}," pip\n",[19,101670,101671],{},"pip 安装:",[416,101673,101675],{"className":418,"code":101674,"language":420,"meta":395,"style":395},"pip install \"mujoco>=2.3\" numpy\n",[422,101676,101677],{"__ignoreMap":395},[425,101678,101679,101681,101683,101686],{"class":427,"line":428},[425,101680,24825],{"class":431},[425,101682,24828],{"class":435},[425,101684,101685],{"class":435}," \"mujoco>=2.3\"",[425,101687,101688],{"class":435}," numpy\n",[19,101690,101691],{},"安装完成后，先做最小检查：",[416,101693,101695],{"className":418,"code":101694,"language":420,"meta":395,"style":395},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[422,101696,101697],{"__ignoreMap":395},[425,101698,101699,101701,101703],{"class":427,"line":428},[425,101700,31135],{"class":431},[425,101702,31113],{"class":691},[425,101704,101705],{"class":435}," \"import mujoco; print(mujoco.__version__)\"\n",[19,101707,101708],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,101710,101711],{},"conda 安装:",[416,101713,101715],{"className":418,"code":101714,"language":420,"meta":395,"style":395},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[422,101716,101717,101737,101747],{"__ignoreMap":395},[425,101718,101719,101721,101723,101725,101728,101731,101734],{"class":427,"line":428},[425,101720,31085],{"class":431},[425,101722,29931],{"class":435},[425,101724,26106],{"class":691},[425,101726,101727],{"class":435}," mujoco-study",[425,101729,101730],{"class":435}," python=",[425,101732,101733],{"class":691},"3.10",[425,101735,101736],{"class":691}," -y\n",[425,101738,101739,101741,101744],{"class":427,"line":698},[425,101740,31085],{"class":431},[425,101742,101743],{"class":435}," activate",[425,101745,101746],{"class":435}," mujoco-study\n",[425,101748,101749,101751,101753,101755],{"class":427,"line":710},[425,101750,24825],{"class":431},[425,101752,24828],{"class":435},[425,101754,101685],{"class":435},[425,101756,101688],{"class":435},[19,101758,101759],{},"版本冲突说明:",[972,101761,101762,101768,101778,101787],{},[450,101763,101764,101765,998],{},"不要安装 ",[422,101766,101767],{},"mujoco-py",[450,101769,101770,101771,101773,101774,101777],{},"如果旧项目里同时安装了 ",[422,101772,101767],{}," 和 ",[422,101775,101776],{},"mujoco","，建议新建干净虚拟环境。",[450,101779,101780,101783,101784,998],{},[422,101781,101782],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[422,101785,101786],{},"~\u002F.mujoco\u002Fmujoco210",[450,101788,101789,101790,83294,101793,101796],{},"离屏渲染可能涉及 OpenGL 后端，",[422,101791,101792],{},"MUJOCO_GL=egl",[422,101794,101795],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[1099,101798,101800],{"id":101799},"_3核心概念解释","3.核心概念解释",[19,101802,101803],{},"MuJoCo 的基本执行流程:",[416,101805,101808],{"className":101806,"code":101807,"language":6187,"meta":395},[6185],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[422,101809,101807],{"__ignoreMap":395},[19,101811,101812,101814],{},[422,101813,101464],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,101816,101817,101819,101820,1362,101823,1362,101826,1362,101829,1362,101832,998],{},[422,101818,101474],{}," 存放仿真运行时状态，例如 ",[422,101821,101822],{},"data.time",[422,101824,101825],{},"data.qpos",[422,101827,101828],{},"data.qvel",[422,101830,101831],{},"data.ctrl",[422,101833,101834],{},"data.xpos",[14,101836,101838],{"id":101837},"xml-是什么","XML 是什么",[19,101840,101841],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[416,101843,101845],{"className":53822,"code":101844,"language":53824,"meta":395,"style":395},"\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",[422,101846,101847,101869,101900],{"__ignoreMap":395},[425,101848,101849,101851,101853,101855,101857,101859,101862,101864,101867],{"class":427,"line":428},[425,101850,2057],{"class":701},[425,101852,52555],{"class":52055},[425,101854,15917],{"class":431},[425,101856,1204],{"class":701},[425,101858,54246],{"class":435},[425,101860,101861],{"class":431}," pos",[425,101863,1204],{"class":701},[425,101865,101866],{"class":435},"\"0 0 1\"",[425,101868,52062],{"class":701},[425,101870,101871,101873,101876,101878,101880,101883,101885,101887,101889,101892,101894,101897],{"class":427,"line":698},[425,101872,52899],{"class":701},[425,101874,101875],{"class":52055},"geom",[425,101877,15917],{"class":431},[425,101879,1204],{"class":701},[425,101881,101882],{"class":435},"\"box_geom\"",[425,101884,54579],{"class":431},[425,101886,1204],{"class":701},[425,101888,54246],{"class":435},[425,101890,101891],{"class":431}," size",[425,101893,1204],{"class":701},[425,101895,101896],{"class":435},"\"0.1 0.1 0.1\"",[425,101898,101899],{"class":701},"\u002F>\n",[425,101901,101902,101904,101906],{"class":427,"line":710},[425,101903,52540],{"class":701},[425,101905,52555],{"class":52055},[425,101907,52062],{"class":701},[19,101909,101910],{},"这段意思是：",[972,101912,101913,101919,101926],{},[450,101914,101915,101916,101918],{},"创建一个叫 ",[422,101917,54469],{}," 的刚体。",[450,101920,101921,101922,101925],{},"它初始放在 ",[422,101923,101924],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[450,101927,101928],{},"它里面有一个盒子形状的几何体。",[14,101930,101932],{"id":101931},"timestep-是什么","timestep 是什么",[19,101934,101935],{},"XML 里的：",[416,101937,101939],{"className":53822,"code":101938,"language":53824,"meta":395,"style":395},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[422,101940,101941],{"__ignoreMap":395},[425,101942,101943,101945,101947,101950,101952,101955,101958,101960,101963],{"class":427,"line":428},[425,101944,2057],{"class":701},[425,101946,69921],{"class":52055},[425,101948,101949],{"class":431}," timestep",[425,101951,1204],{"class":701},[425,101953,101954],{"class":435},"\"0.01\"",[425,101956,101957],{"class":431}," gravity",[425,101959,1204],{"class":701},[425,101961,101962],{"class":435},"\"0 0 -9.81\"",[425,101964,101899],{"class":701},[19,101966,101967,101968,101971,101972,101974],{},"表示每调用一次 ",[422,101969,101970],{},"mj_step","，仿真时间前进 ",[422,101973,39741],{}," 秒。循环 100 次，大约就是 1 秒：",[416,101976,101979],{"className":101977,"code":101978,"language":6187,"meta":395},[6185],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[422,101980,101978],{"__ignoreMap":395},[14,101982,101984],{"id":101983},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,101986,101987],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[416,101989,101992],{"className":101990,"code":101991,"language":6187,"meta":395},[6185],"x y z qw qx qy qz\n",[422,101993,101991],{"__ignoreMap":395},[19,101995,101996,101997,102000,102001,102004],{},"表示一个自由刚体的位置和姿态。其中 ",[422,101998,101999],{},"x y z"," 是位置，",[422,102002,102003],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[1099,102006,102008],{"id":102007},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,102010,102011],{},"新建文件:",[416,102013,102015],{"className":418,"code":102014,"language":420,"meta":395,"style":395},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[422,102016,102017,102027,102034],{"__ignoreMap":395},[425,102018,102019,102022,102024],{"class":427,"line":428},[425,102020,102021],{"class":431},"mkdir",[425,102023,29971],{"class":691},[425,102025,102026],{"class":435}," mujoco_tutorial\n",[425,102028,102029,102032],{"class":427,"line":698},[425,102030,102031],{"class":691},"cd",[425,102033,102026],{"class":435},[425,102035,102036,102039],{"class":427,"line":710},[425,102037,102038],{"class":431},"touch",[425,102040,102041],{"class":435}," ch1_first_sim.py\n",[19,102043,102044],{},"写入:",[416,102046,102048],{"className":31133,"code":102047,"language":31135,"meta":395,"style":395},"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",[422,102049,102050,102057,102061,102065,102075,102080,102085,102089,102094,102099,102103,102108,102113,102118,102123,102128,102133,102137,102141,102145,102158,102172,102182,102186,102198,102210,102222,102234,102246,102250,102267,102272,102276,102287,102298,102302,102306,102320],{"__ignoreMap":395},[425,102051,102052,102054],{"class":427,"line":428},[425,102053,31147],{"class":1155},[425,102055,102056],{"class":701}," mujoco\n",[425,102058,102059],{"class":427,"line":698},[425,102060,3400],{"emptyLinePlaceholder":1084},[425,102062,102063],{"class":427,"line":710},[425,102064,3400],{"emptyLinePlaceholder":1084},[425,102066,102067,102070,102072],{"class":427,"line":721},[425,102068,102069],{"class":691},"XML",[425,102071,14563],{"class":1155},[425,102073,102074],{"class":435}," \"\"\"\n",[425,102076,102077],{"class":427,"line":735},[425,102078,102079],{"class":435},"\u003Cmujoco model=\"first_sim\">\n",[425,102081,102082],{"class":427,"line":743},[425,102083,102084],{"class":435},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[425,102086,102087],{"class":427,"line":751},[425,102088,3400],{"emptyLinePlaceholder":1084},[425,102090,102091],{"class":427,"line":759},[425,102092,102093],{"class":435},"  \u003Cworldbody>\n",[425,102095,102096],{"class":427,"line":770},[425,102097,102098],{"class":435},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[425,102100,102101],{"class":427,"line":780},[425,102102,3400],{"emptyLinePlaceholder":1084},[425,102104,102105],{"class":427,"line":790},[425,102106,102107],{"class":435},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[425,102109,102110],{"class":427,"line":805},[425,102111,102112],{"class":435},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[425,102114,102115],{"class":427,"line":818},[425,102116,102117],{"class":435},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[425,102119,102120],{"class":427,"line":831},[425,102121,102122],{"class":435},"    \u003C\u002Fbody>\n",[425,102124,102125],{"class":427,"line":841},[425,102126,102127],{"class":435},"  \u003C\u002Fworldbody>\n",[425,102129,102130],{"class":427,"line":852},[425,102131,102132],{"class":435},"\u003C\u002Fmujoco>\n",[425,102134,102135],{"class":427,"line":862},[425,102136,96453],{"class":435},[425,102138,102139],{"class":427,"line":878},[425,102140,3400],{"emptyLinePlaceholder":1084},[425,102142,102143],{"class":427,"line":914},[425,102144,3400],{"emptyLinePlaceholder":1084},[425,102146,102147,102149,102151,102154,102156],{"class":427,"line":943},[425,102148,32702],{"class":1155},[425,102150,2973],{"class":431},[425,102152,102153],{"class":701},"() -> ",[425,102155,96441],{"class":691},[425,102157,4739],{"class":701},[425,102159,102160,102163,102165,102168,102170],{"class":427,"line":956},[425,102161,102162],{"class":701},"    model ",[425,102164,1204],{"class":1155},[425,102166,102167],{"class":701}," mujoco.MjModel.from_xml_string(",[425,102169,102069],{"class":691},[425,102171,1165],{"class":701},[425,102173,102174,102177,102179],{"class":427,"line":964},[425,102175,102176],{"class":701},"    data ",[425,102178,1204],{"class":1155},[425,102180,102181],{"class":701}," mujoco.MjData(model)\n",[425,102183,102184],{"class":427,"line":2733},[425,102185,3400],{"emptyLinePlaceholder":1084},[425,102187,102188,102190,102192,102195],{"class":427,"line":2750},[425,102189,32054],{"class":691},[425,102191,1159],{"class":701},[425,102193,102194],{"class":435},"\"nq:\"",[425,102196,102197],{"class":701},", model.nq)\n",[425,102199,102200,102202,102204,102207],{"class":427,"line":2755},[425,102201,32054],{"class":691},[425,102203,1159],{"class":701},[425,102205,102206],{"class":435},"\"nv:\"",[425,102208,102209],{"class":701},", model.nv)\n",[425,102211,102212,102214,102216,102219],{"class":427,"line":2760},[425,102213,32054],{"class":691},[425,102215,1159],{"class":701},[425,102217,102218],{"class":435},"\"nu:\"",[425,102220,102221],{"class":701},", model.nu)\n",[425,102223,102224,102226,102228,102231],{"class":427,"line":2765},[425,102225,32054],{"class":691},[425,102227,1159],{"class":701},[425,102229,102230],{"class":435},"\"initial time:\"",[425,102232,102233],{"class":701},", data.time)\n",[425,102235,102236,102238,102240,102243],{"class":427,"line":2779},[425,102237,32054],{"class":691},[425,102239,1159],{"class":701},[425,102241,102242],{"class":435},"\"initial qpos:\"",[425,102244,102245],{"class":701},", data.qpos.copy())\n",[425,102247,102248],{"class":427,"line":2784},[425,102249,3400],{"emptyLinePlaceholder":1084},[425,102251,102252,102254,102257,102259,102261,102263,102265],{"class":427,"line":3577},[425,102253,4201],{"class":1155},[425,102255,102256],{"class":701}," _ ",[425,102258,27034],{"class":1155},[425,102260,33198],{"class":691},[425,102262,1159],{"class":701},[425,102264,1460],{"class":691},[425,102266,31541],{"class":701},[425,102268,102269],{"class":427,"line":3591},[425,102270,102271],{"class":701},"        mujoco.mj_step(model, data)\n",[425,102273,102274],{"class":427,"line":3599},[425,102275,3400],{"emptyLinePlaceholder":1084},[425,102277,102278,102280,102282,102285],{"class":427,"line":3604},[425,102279,32054],{"class":691},[425,102281,1159],{"class":701},[425,102283,102284],{"class":435},"\"final time:\"",[425,102286,102233],{"class":701},[425,102288,102289,102291,102293,102296],{"class":427,"line":3610},[425,102290,32054],{"class":691},[425,102292,1159],{"class":701},[425,102294,102295],{"class":435},"\"final qpos:\"",[425,102297,102245],{"class":701},[425,102299,102300],{"class":427,"line":3616},[425,102301,3400],{"emptyLinePlaceholder":1084},[425,102303,102304],{"class":427,"line":3621},[425,102305,3400],{"emptyLinePlaceholder":1084},[425,102307,102308,102310,102312,102315,102318],{"class":427,"line":8948},[425,102309,2544],{"class":1155},[425,102311,31975],{"class":691},[425,102313,102314],{"class":1155}," ==",[425,102316,102317],{"class":435}," \"__main__\"",[425,102319,4739],{"class":701},[425,102321,102322],{"class":427,"line":8972},[425,102323,102324],{"class":701},"    main()\n",[14,102326,102327],{"id":102327},"代码逐段解释",[19,102329,102330],{},"导入库：",[416,102332,102334],{"className":31133,"code":102333,"language":31135,"meta":395,"style":395},"import mujoco\n",[422,102335,102336],{"__ignoreMap":395},[425,102337,102338,102340],{"class":427,"line":428},[425,102339,31147],{"class":1155},[425,102341,102056],{"class":701},[19,102343,102344],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,102346,102347],{},"定义 XML：",[416,102349,102351],{"className":31133,"code":102350,"language":31135,"meta":395,"style":395},"XML = \"\"\"\n...\n\"\"\"\n",[422,102352,102353,102361,102366],{"__ignoreMap":395},[425,102354,102355,102357,102359],{"class":427,"line":428},[425,102356,102069],{"class":691},[425,102358,14563],{"class":1155},[425,102360,102074],{"class":435},[425,102362,102363],{"class":427,"line":698},[425,102364,102365],{"class":435},"...\n",[425,102367,102368],{"class":427,"line":710},[425,102369,96453],{"class":435},[19,102371,102372,102373,102376],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[422,102374,102375],{},"freejoint"," 的方块。",[19,102378,102379],{},"编译模型：",[416,102381,102383],{"className":31133,"code":102382,"language":31135,"meta":395,"style":395},"model = mujoco.MjModel.from_xml_string(XML)\n",[422,102384,102385],{"__ignoreMap":395},[425,102386,102387,102390,102392,102394,102396],{"class":427,"line":428},[425,102388,102389],{"class":701},"model ",[425,102391,1204],{"class":1155},[425,102393,102167],{"class":701},[425,102395,102069],{"class":691},[425,102397,1165],{"class":701},[19,102399,102400],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,102402,102403],{},"创建数据：",[416,102405,102407],{"className":31133,"code":102406,"language":31135,"meta":395,"style":395},"data = mujoco.MjData(model)\n",[422,102408,102409],{"__ignoreMap":395},[425,102410,102411,102414,102416],{"class":427,"line":428},[425,102412,102413],{"class":701},"data ",[425,102415,1204],{"class":1155},[425,102417,102181],{"class":701},[19,102419,102420,102422,102423,102425],{},[422,102421,34156],{}," 会保存仿真当前状态。刚创建时，时间是 ",[422,102424,1341],{},"，方块还在初始位置。",[19,102427,102428],{},"推进仿真：",[416,102430,102432],{"className":31133,"code":102431,"language":31135,"meta":395,"style":395},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[422,102433,102434,102450],{"__ignoreMap":395},[425,102435,102436,102438,102440,102442,102444,102446,102448],{"class":427,"line":428},[425,102437,4025],{"class":1155},[425,102439,102256],{"class":701},[425,102441,27034],{"class":1155},[425,102443,33198],{"class":691},[425,102445,1159],{"class":701},[425,102447,1460],{"class":691},[425,102449,31541],{"class":701},[425,102451,102452],{"class":427,"line":698},[425,102453,102454],{"class":701},"    mujoco.mj_step(model, data)\n",[19,102456,102457,102458,102460],{},"每次 ",[422,102459,101970],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[14,102462,102463],{"id":102463},"代码逐行细讲",[19,102465,102466],{},"下面把完整代码按新手视角拆开讲。",[416,102468,102469],{"className":31133,"code":102333,"language":31135,"meta":395,"style":395},[422,102470,102471],{"__ignoreMap":395},[425,102472,102473,102475],{"class":427,"line":428},[425,102474,31147],{"class":1155},[425,102476,102056],{"class":701},[19,102478,102479,102481,102482,1362,102484,1362,102486,998],{},[422,102480,31147],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[422,102483,101430],{},[422,102485,101435],{},[422,102487,102488],{},"mujoco.mj_step",[416,102490,102491],{"className":31133,"code":102350,"language":31135,"meta":395,"style":395},[422,102492,102493,102501,102505],{"__ignoreMap":395},[425,102494,102495,102497,102499],{"class":427,"line":428},[425,102496,102069],{"class":691},[425,102498,14563],{"class":1155},[425,102500,102074],{"class":435},[425,102502,102503],{"class":427,"line":698},[425,102504,102365],{"class":435},[425,102506,102507],{"class":427,"line":710},[425,102508,96453],{"class":435},[19,102510,102511,102513,102514,102517],{},[422,102512,102069],{}," 是一个变量名。右边的三引号 ",[422,102515,102516],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[416,102519,102520],{"className":53822,"code":102079,"language":53824,"meta":395,"style":395},[422,102521,102522],{"__ignoreMap":395},[425,102523,102524,102526,102528,102531,102533,102536],{"class":427,"line":428},[425,102525,2057],{"class":701},[425,102527,101776],{"class":52055},[425,102529,102530],{"class":431}," model",[425,102532,1204],{"class":701},[425,102534,102535],{"class":435},"\"first_sim\"",[425,102537,52062],{"class":701},[19,102539,102540,102541,102544,102545,998],{},"这是 XML 的根标签。",[422,102542,102543],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[422,102546,102547],{},"first_sim",[416,102549,102550],{"className":53822,"code":101938,"language":53824,"meta":395,"style":395},[422,102551,102552],{"__ignoreMap":395},[425,102553,102554,102556,102558,102560,102562,102564,102566,102568,102570],{"class":427,"line":428},[425,102555,2057],{"class":701},[425,102557,69921],{"class":52055},[425,102559,101949],{"class":431},[425,102561,1204],{"class":701},[425,102563,101954],{"class":435},[425,102565,101957],{"class":431},[425,102567,1204],{"class":701},[425,102569,101962],{"class":435},[425,102571,101899],{"class":701},[19,102573,102574,102576,102577,102580,102581,102584],{},[422,102575,69921],{}," 用来设置仿真参数。",[422,102578,102579],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[422,102582,102583],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[416,102586,102588],{"className":53822,"code":102587,"language":53824,"meta":395,"style":395},"\u003Cworldbody>\n",[422,102589,102590],{"__ignoreMap":395},[425,102591,102592,102594,102597],{"class":427,"line":428},[425,102593,2057],{"class":701},[425,102595,102596],{"class":52055},"worldbody",[425,102598,52062],{"class":701},[19,102600,102601,102603],{},[422,102602,102596],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[416,102605,102607],{"className":53822,"code":102606,"language":53824,"meta":395,"style":395},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[422,102608,102609],{"__ignoreMap":395},[425,102610,102611,102613,102615,102617,102619,102622,102624,102626,102629,102631,102633,102636,102638,102640,102643],{"class":427,"line":428},[425,102612,2057],{"class":701},[425,102614,101875],{"class":52055},[425,102616,15917],{"class":431},[425,102618,1204],{"class":701},[425,102620,102621],{"class":435},"\"floor\"",[425,102623,54579],{"class":431},[425,102625,1204],{"class":701},[425,102627,102628],{"class":435},"\"plane\"",[425,102630,101891],{"class":431},[425,102632,1204],{"class":701},[425,102634,102635],{"class":435},"\"2 2 0.1\"",[425,102637,79522],{"class":431},[425,102639,1204],{"class":701},[425,102641,102642],{"class":435},"\"0.8 0.8 0.8 1\"",[425,102644,101899],{"class":701},[19,102646,102647,102648,102650,102651,102654,102655,102658,102659,102661],{},"这行创建地面。",[422,102649,101875],{}," 是几何体。",[422,102652,102653],{},"name=\"floor\""," 是名字。",[422,102656,102657],{},"type=\"plane\""," 表示平面。",[422,102660,55865],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[416,102663,102665],{"className":53822,"code":102664,"language":53824,"meta":395,"style":395},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[422,102666,102667],{"__ignoreMap":395},[425,102668,102669,102671,102673,102675,102677,102679,102681,102683,102685],{"class":427,"line":428},[425,102670,2057],{"class":701},[425,102672,52555],{"class":52055},[425,102674,15917],{"class":431},[425,102676,1204],{"class":701},[425,102678,54246],{"class":435},[425,102680,101861],{"class":431},[425,102682,1204],{"class":701},[425,102684,101866],{"class":435},[425,102686,52062],{"class":701},[19,102688,102689,102690,998,102692,102695,102696,102698],{},"这行创建一个刚体，名字叫 ",[422,102691,54469],{},[422,102693,102694],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[422,102697,101924],{},"，也就是离地面 1 米高。",[416,102700,102702],{"className":53822,"code":102701,"language":53824,"meta":395,"style":395},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[422,102703,102704],{"__ignoreMap":395},[425,102705,102706,102708,102710,102712,102714,102717],{"class":427,"line":428},[425,102707,2057],{"class":701},[425,102709,102375],{"class":52055},[425,102711,15917],{"class":431},[425,102713,1204],{"class":701},[425,102715,102716],{"class":435},"\"box_free\"",[425,102718,101899],{"class":701},[19,102720,102721,102722,102724],{},"这行很重要。",[422,102723,102375],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[416,102726,102728],{"className":53822,"code":102727,"language":53824,"meta":395,"style":395},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[422,102729,102730],{"__ignoreMap":395},[425,102731,102732,102734,102736,102738,102740,102742,102744,102746,102748,102750,102752,102754,102757,102759,102761,102763,102765,102768],{"class":427,"line":428},[425,102733,2057],{"class":701},[425,102735,101875],{"class":52055},[425,102737,15917],{"class":431},[425,102739,1204],{"class":701},[425,102741,101882],{"class":435},[425,102743,54579],{"class":431},[425,102745,1204],{"class":701},[425,102747,54246],{"class":435},[425,102749,101891],{"class":431},[425,102751,1204],{"class":701},[425,102753,101896],{"class":435},[425,102755,102756],{"class":431}," mass",[425,102758,1204],{"class":701},[425,102760,4678],{"class":435},[425,102762,79522],{"class":431},[425,102764,1204],{"class":701},[425,102766,102767],{"class":435},"\"1 0 0 1\"",[425,102769,101899],{"class":701},[19,102771,102772,102773,102776,102777,102780,102781,102784,102785,102788],{},"这行给 box body 添加一个盒子形状。",[422,102774,102775],{},"type=\"box\""," 表示形状是盒子。",[422,102778,102779],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[422,102782,102783],{},"mass=\"1\""," 表示质量是 1。",[422,102786,102787],{},"rgba=\"1 0 0 1\""," 表示红色。",[416,102790,102792],{"className":31133,"code":102791,"language":31135,"meta":395,"style":395},"def main() -> None:\n",[422,102793,102794],{"__ignoreMap":395},[425,102795,102796,102798,102800,102802,102804],{"class":427,"line":428},[425,102797,32702],{"class":1155},[425,102799,2973],{"class":431},[425,102801,102153],{"class":701},[425,102803,96441],{"class":691},[425,102805,4739],{"class":701},[19,102807,102808,102810,102811,102814,102815,102818],{},[422,102809,32702],{}," 用来定义函数。这里定义了一个叫 ",[422,102812,102813],{},"main"," 的函数。",[422,102816,102817],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[416,102820,102821],{"className":31133,"code":102382,"language":31135,"meta":395,"style":395},[422,102822,102823],{"__ignoreMap":395},[425,102824,102825,102827,102829,102831,102833],{"class":427,"line":428},[425,102826,102389],{"class":701},[425,102828,1204],{"class":1155},[425,102830,102167],{"class":701},[425,102832,102069],{"class":691},[425,102834,1165],{"class":701},[19,102836,102837,102838,102841],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[422,102839,102840],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[416,102843,102844],{"className":31133,"code":102406,"language":31135,"meta":395,"style":395},[422,102845,102846],{"__ignoreMap":395},[425,102847,102848,102850,102852],{"class":427,"line":428},[425,102849,102413],{"class":701},[425,102851,1204],{"class":1155},[425,102853,102181],{"class":701},[19,102855,102856,102857,102859,102860,102862],{},"这行创建仿真数据。",[422,102858,34156],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[422,102861,34156],{}," 都会变化。",[416,102864,102866],{"className":31133,"code":102865,"language":31135,"meta":395,"style":395},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[422,102867,102868,102878,102888],{"__ignoreMap":395},[425,102869,102870,102872,102874,102876],{"class":427,"line":428},[425,102871,31170],{"class":691},[425,102873,1159],{"class":701},[425,102875,102194],{"class":435},[425,102877,102197],{"class":701},[425,102879,102880,102882,102884,102886],{"class":427,"line":698},[425,102881,31170],{"class":691},[425,102883,1159],{"class":701},[425,102885,102206],{"class":435},[425,102887,102209],{"class":701},[425,102889,102890,102892,102894,102896],{"class":427,"line":710},[425,102891,31170],{"class":691},[425,102893,1159],{"class":701},[425,102895,102218],{"class":435},[425,102897,102221],{"class":701},[19,102899,102900,102902,102903,102906,102907,102910,102911,102914,102915,102918],{},[422,102901,31170],{}," 用来输出信息。",[422,102904,102905],{},"model.nq"," 是位置变量数量，",[422,102908,102909],{},"model.nv"," 是速度变量数量，",[422,102912,102913],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[422,102916,102917],{},"nu"," 是 0。",[416,102920,102922],{"className":31133,"code":102921,"language":31135,"meta":395,"style":395},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[422,102923,102924,102934],{"__ignoreMap":395},[425,102925,102926,102928,102930,102932],{"class":427,"line":428},[425,102927,31170],{"class":691},[425,102929,1159],{"class":701},[425,102931,102230],{"class":435},[425,102933,102233],{"class":701},[425,102935,102936,102938,102940,102942],{"class":427,"line":698},[425,102937,31170],{"class":691},[425,102939,1159],{"class":701},[425,102941,102242],{"class":435},[425,102943,102245],{"class":701},[19,102945,102946,102947,102949,102950,102952,102953,102956],{},"这里打印初始时间和初始位置。",[422,102948,101822],{}," 一开始是 0。",[422,102951,101825],{}," 是位置数组。",[422,102954,102955],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[416,102958,102959],{"className":31133,"code":102431,"language":31135,"meta":395,"style":395},[422,102960,102961,102977],{"__ignoreMap":395},[425,102962,102963,102965,102967,102969,102971,102973,102975],{"class":427,"line":428},[425,102964,4025],{"class":1155},[425,102966,102256],{"class":701},[425,102968,27034],{"class":1155},[425,102970,33198],{"class":691},[425,102972,1159],{"class":701},[425,102974,1460],{"class":691},[425,102976,31541],{"class":701},[425,102978,102979],{"class":427,"line":698},[425,102980,102454],{"class":701},[19,102982,102983,102985,102986,102989,102990,102992,102993,102995],{},[422,102984,4025],{}," 是循环。",[422,102987,102988],{},"range(100)"," 表示循环 100 次。",[422,102991,2139],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[422,102994,101970],{},"，仿真就前进一步。",[416,102997,102999],{"className":31133,"code":102998,"language":31135,"meta":395,"style":395},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[422,103000,103001,103011],{"__ignoreMap":395},[425,103002,103003,103005,103007,103009],{"class":427,"line":428},[425,103004,31170],{"class":691},[425,103006,1159],{"class":701},[425,103008,102284],{"class":435},[425,103010,102233],{"class":701},[425,103012,103013,103015,103017,103019],{"class":427,"line":698},[425,103014,31170],{"class":691},[425,103016,1159],{"class":701},[425,103018,102295],{"class":435},[425,103020,102245],{"class":701},[19,103022,103023],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[416,103025,103027],{"className":31133,"code":103026,"language":31135,"meta":395,"style":395},"if __name__ == \"__main__\":\n    main()\n",[422,103028,103029,103041],{"__ignoreMap":395},[425,103030,103031,103033,103035,103037,103039],{"class":427,"line":428},[425,103032,2544],{"class":1155},[425,103034,31975],{"class":691},[425,103036,102314],{"class":1155},[425,103038,102317],{"class":435},[425,103040,4739],{"class":701},[425,103042,103043],{"class":427,"line":698},[425,103044,102324],{"class":701},[19,103046,103047,103048,103051,103052,998],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[422,103049,103050],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[422,103053,103050],{},[19,103055,103056],{},"运行:",[416,103058,103060],{"className":418,"code":103059,"language":420,"meta":395,"style":395},"python ch1_first_sim.py\n",[422,103061,103062],{"__ignoreMap":395},[425,103063,103064,103066],{"class":427,"line":428},[425,103065,31135],{"class":431},[425,103067,102041],{"class":435},[1099,103069,103071],{"id":103070},"_5运行结果说明","5.运行结果说明",[19,103073,103074],{},"你应该看到类似输出:",[416,103076,103079],{"className":103077,"code":103078,"language":6187,"meta":395},[6185],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[422,103080,103078],{"__ignoreMap":395},[19,103082,103083,103085,103086,103089,103090,998],{},[422,103084,102375],{}," 有 7 个位置变量: ",[422,103087,103088],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[422,103091,103092],{},"vx vy vz wx wy wz",[19,103094,103095,103096,103099],{},"你还会看到 ",[422,103097,103098],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[1099,103101,103103],{"id":103102},"_6验证步骤","6.验证步骤",[19,103105,103106],{},"确认版本:",[416,103108,103109],{"className":418,"code":101694,"language":420,"meta":395,"style":395},[422,103110,103111],{"__ignoreMap":395},[425,103112,103113,103115,103117],{"class":427,"line":428},[425,103114,31135],{"class":431},[425,103116,31113],{"class":691},[425,103118,101705],{"class":435},[19,103120,103121],{},"确认导入的是官方 bindings:",[416,103123,103125],{"className":418,"code":103124,"language":420,"meta":395,"style":395},"python -c \"import mujoco; print(mujoco)\"\n",[422,103126,103127],{"__ignoreMap":395},[425,103128,103129,103131,103133],{"class":427,"line":428},[425,103130,31135],{"class":431},[425,103132,31113],{"class":691},[425,103134,103135],{"class":435}," \"import mujoco; print(mujoco)\"\n",[19,103137,103138],{},"运行程序:",[416,103140,103141],{"className":418,"code":103059,"language":420,"meta":395,"style":395},[422,103142,103143],{"__ignoreMap":395},[425,103144,103145,103147],{"class":427,"line":428},[425,103146,31135],{"class":431},[425,103148,102041],{"class":435},[19,103150,103151,103152,103155,103156,998],{},"检查 ",[422,103153,103154],{},"final time"," 是否约等于 ",[422,103157,103158],{},"1.0",[19,103160,103161],{},"再做几个小实验：",[972,103163,103164,103174,103182,103195],{},[450,103165,103166,103167,103169,103170,103173],{},"把 ",[422,103168,102694],{}," 改成 ",[422,103171,103172],{},"pos=\"0 0 2\"","，观察初始高度变化。",[450,103175,103166,103176,103169,103178,103181],{},[422,103177,102583],{},[422,103179,103180],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[450,103183,103166,103184,103169,103186,103189,103190,103192,103193,998],{},[422,103185,102579],{},[422,103187,103188],{},"timestep=\"0.005\"","，观察 100 步后的 ",[422,103191,103154],{}," 是否变成约 ",[422,103194,36084],{},[450,103196,103197,103198,103201],{},"删除 ",[422,103199,103200],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,103203,103204],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[1099,103206,103208],{"id":103207},"_7常见错误与解决方案","7.常见错误与解决方案",[14,103210,103212],{"id":103211},"modulenotfounderror-no-module-named-mujoco",[422,103213,103214],{},"ModuleNotFoundError: No module named 'mujoco'",[19,103216,103217],{},"解决:",[416,103219,103221],{"className":418,"code":103220,"language":420,"meta":395,"style":395},"pip install \"mujoco>=2.3\"\n",[422,103222,103223],{"__ignoreMap":395},[425,103224,103225,103227,103229],{"class":427,"line":428},[425,103226,24825],{"class":431},[425,103228,24828],{"class":435},[425,103230,103231],{"class":435}," \"mujoco>=2.3\"\n",[14,103233,103235],{"id":103234},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,103237,103238],{},"先安装系统依赖:",[416,103240,103242],{"className":418,"code":103241,"language":420,"meta":395,"style":395},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[422,103243,103244],{"__ignoreMap":395},[425,103245,103246,103248,103250,103252,103254,103257,103259,103262,103264,103267,103269],{"class":427,"line":428},[425,103247,652],{"class":431},[425,103249,27305],{"class":435},[425,103251,24828],{"class":435},[425,103253,27389],{"class":691},[425,103255,103256],{"class":435}," mesa-libGL",[425,103258,101569],{"class":435},[425,103260,103261],{"class":435}," glfw",[425,103263,101589],{"class":435},[425,103265,103266],{"class":435}," libX11",[425,103268,101602],{"class":435},[425,103270,103271],{"class":435}," libXrandr\n",[14,103273,103275],{"id":103274},"xml-解析失败","XML 解析失败",[19,103277,103278],{},"检查:",[972,103280,103281,103284,103287,103293],{},[450,103282,103283],{},"标签是否闭合",[450,103285,103286],{},"属性是否带引号",[450,103288,103289,103290],{},"根节点是否是 ",[422,103291,103292],{},"\u003Cmujoco>",[450,103294,103295,103297,103298,103301],{},[422,103296,52555],{}," 是否放在 ",[422,103299,103300],{},"\u003Cworldbody>"," 内部",[14,103303,103305,103307,103308],{"id":103304},"final-time-不是严格等于-10",[422,103306,103154],{}," 不是严格等于 ",[422,103309,103158],{},[19,103311,103312],{},"这通常不是错误。浮点数计算可能得到：",[416,103314,103317],{"className":103315,"code":103316,"language":6187,"meta":395},[6185],"1.0000000000000007\n",[422,103318,103316],{"__ignoreMap":395},[19,103320,103321,103322,103324],{},"只要接近 ",[422,103323,103158],{}," 就正常。",[14,103326,103327],{"id":103327},"方块没有掉下来",[19,103329,103330],{},"检查：",[972,103332,103333,103339,103345,103350],{},[450,103334,103335,103336],{},"方块 body 里是否有 ",[422,103337,103338],{},"\u003Cfreejoint\u002F>",[450,103340,103341,103342],{},"重力是否是 ",[422,103343,103344],{},"0 0 -9.81",[450,103346,103347,103348],{},"是否真的调用了 ",[422,103349,101440],{},[450,103351,103352,103353,103355,103356],{},"你看的是否是 ",[422,103354,103098],{},"，不是 ",[422,103357,103358],{},"initial qpos",[1099,103360,103362],{"id":103361},"_8本章小结","8.本章小结",[19,103364,103365],{},"本章你已经完成了 MuJoCo 的最小闭环：",[416,103367,103370],{"className":103368,"code":103369,"language":6187,"meta":395},[6185],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[422,103371,103369],{"__ignoreMap":395},[19,103373,103374],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[1074,103376,103377],{},"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":395,"searchDepth":698,"depth":698,"links":103379},[103380,103381,103382,103387,103391,103392,103393,103401],{"id":101401,"depth":698,"text":101402},{"id":101524,"depth":698,"text":101525},{"id":101799,"depth":698,"text":101800,"children":103383},[103384,103385,103386],{"id":101837,"depth":710,"text":101838},{"id":101931,"depth":710,"text":101932},{"id":101983,"depth":710,"text":101984},{"id":102007,"depth":698,"text":102008,"children":103388},[103389,103390],{"id":102327,"depth":710,"text":102327},{"id":102463,"depth":710,"text":102463},{"id":103070,"depth":698,"text":103071},{"id":103102,"depth":698,"text":103103},{"id":103207,"depth":698,"text":103208,"children":103394},[103395,103396,103397,103398,103400],{"id":103211,"depth":710,"text":103214},{"id":103234,"depth":710,"text":103235},{"id":103274,"depth":710,"text":103275},{"id":103304,"depth":710,"text":103399},"final time 不是严格等于 1.0",{"id":103327,"depth":710,"text":103327},{"id":103361,"depth":698,"text":103362},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101393,"description":395},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103408,"title":103409,"body":103410,"description":395,"extension":1082,"meta":105066,"navigation":1084,"path":105067,"seo":105068,"stem":105069,"__hash__":105070},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103411,"toc":105042},[103412,103415,103417,103420,103423,103440,103535,103538,103544,103546,103548,103572,103575,103589,103592,103633,103635,103648,103650,103653,103701,103713,103716,103719,103725,103738,103805,103808,103827,103830,103833,103839,103841,103850,103853,103857,103866,103948,103957,103961,103967,103981,103991,103993,104323,104326,104338,104340,104351,104353,104356,104374,104377,104380,104398,104409,104412,104427,104437,104439,104460,104477,104497,104503,104543,104559,104575,104581,104584,104608,104624,104629,104659,104676,104701,104704,104719,104728,104743,104752,104767,104774,104776,104786,104799,104806,104809,104848,104855,104857,104909,104911,104917,104920,104927,104934,104937,104939,104957,104960,104963,104997,105009,105011,105014,105036,105039],[10,103413,103409],{"id":103414},"_2xml-与-mjcf-物理建模基础",[1099,103416,101402],{"id":101401},[19,103418,103419],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,103421,103422],{},"本章结束后，你应该能看懂一个简单模型里：",[972,103424,103425,103428,103431,103434,103437],{},[450,103426,103427],{},"地面在哪里。",[450,103429,103430],{},"物体初始位置在哪里。",[450,103432,103433],{},"几何体是什么形状。",[450,103435,103436],{},"哪些 body 可以自由运动。",[450,103438,103439],{},"如何用名字在 Python 里找到 XML 中的对象。",[35,103441,103442,103452],{},[38,103443,103444],{},[41,103445,103446,103449],{},[44,103447,103448],{"align":46},"标签",[44,103450,103451],{"align":46},"作用",[55,103453,103454,103463,103473,103482,103492,103502,103515,103525],{},[41,103455,103456,103460],{},[60,103457,103458],{"align":46},[422,103459,103292],{},[60,103461,103462],{"align":46},"根节点",[41,103464,103465,103470],{},[60,103466,103467],{"align":46},[422,103468,103469],{},"\u003Coption>",[60,103471,103472],{"align":46},"仿真参数",[41,103474,103475,103479],{},[60,103476,103477],{"align":46},[422,103478,103300],{},[60,103480,103481],{"align":46},"世界中的物体",[41,103483,103484,103489],{},[60,103485,103486],{"align":46},[422,103487,103488],{},"\u003Cbody>",[60,103490,103491],{"align":46},"刚体",[41,103493,103494,103499],{},[60,103495,103496],{"align":46},[422,103497,103498],{},"\u003Cgeom>",[60,103500,103501],{"align":46},"几何体、碰撞体、可视体",[41,103503,103504,103512],{},[60,103505,103506,25970,103509],{"align":46},[422,103507,103508],{},"\u003Cjoint>",[422,103510,103511],{},"\u003Cfreejoint>",[60,103513,103514],{"align":46},"关节",[41,103516,103517,103522],{},[60,103518,103519],{"align":46},[422,103520,103521],{},"\u003Csite>",[60,103523,103524],{"align":46},"标记点",[41,103526,103527,103532],{},[60,103528,103529],{"align":46},[422,103530,103531],{},"\u003Cactuator>",[60,103533,103534],{"align":46},"控制器",[19,103536,103537],{},"初学时可以先记住：",[416,103539,103542],{"className":103540,"code":103541,"language":6187,"meta":395},[6185],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[422,103543,103541],{"__ignoreMap":395},[1099,103545,101525],{"id":101524},[19,103547,101528],{},[416,103549,103551],{"className":418,"code":103550,"language":420,"meta":395,"style":395},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[422,103552,103553],{"__ignoreMap":395},[425,103554,103555,103557,103559,103561,103563,103565,103567,103569],{"class":427,"line":428},[425,103556,652],{"class":431},[425,103558,27305],{"class":435},[425,103560,24828],{"class":435},[425,103562,27389],{"class":691},[425,103564,103256],{"class":435},[425,103566,101569],{"class":435},[425,103568,103261],{"class":435},[425,103570,103571],{"class":435}," glfw-devel\n",[19,103573,103574],{},"pip:",[416,103576,103577],{"className":418,"code":101674,"language":420,"meta":395,"style":395},[422,103578,103579],{"__ignoreMap":395},[425,103580,103581,103583,103585,103587],{"class":427,"line":428},[425,103582,24825],{"class":431},[425,103584,24828],{"class":435},[425,103586,101685],{"class":435},[425,103588,101688],{"class":435},[19,103590,103591],{},"conda:",[416,103593,103595],{"className":418,"code":103594,"language":420,"meta":395,"style":395},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[422,103596,103597,103614,103623],{"__ignoreMap":395},[425,103598,103599,103601,103603,103605,103608,103610,103612],{"class":427,"line":428},[425,103600,31085],{"class":431},[425,103602,29931],{"class":435},[425,103604,26106],{"class":691},[425,103606,103607],{"class":435}," mujoco-xml",[425,103609,101730],{"class":435},[425,103611,101733],{"class":691},[425,103613,101736],{"class":691},[425,103615,103616,103618,103620],{"class":427,"line":698},[425,103617,31085],{"class":431},[425,103619,101743],{"class":435},[425,103621,103622],{"class":435}," mujoco-xml\n",[425,103624,103625,103627,103629,103631],{"class":427,"line":710},[425,103626,24825],{"class":431},[425,103628,24828],{"class":435},[425,103630,101685],{"class":435},[425,103632,101688],{"class":435},[19,103634,101759],{},[972,103636,103637,103640,103645],{},[450,103638,103639],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[450,103641,103642,103643,998],{},"本章使用基础标签，适用于 ",[422,103644,101782],{},[450,103646,103647],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[1099,103649,101800],{"id":101799},[19,103651,103652],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[416,103654,103656],{"className":53822,"code":103655,"language":53824,"meta":395,"style":395},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[422,103657,103658,103672,103680,103685,103693],{"__ignoreMap":395},[425,103659,103660,103662,103664,103666,103668,103670],{"class":427,"line":428},[425,103661,2057],{"class":701},[425,103663,101776],{"class":52055},[425,103665,102530],{"class":431},[425,103667,1204],{"class":701},[425,103669,63434],{"class":435},[425,103671,52062],{"class":701},[425,103673,103674,103676,103678],{"class":427,"line":698},[425,103675,52899],{"class":701},[425,103677,102596],{"class":52055},[425,103679,52062],{"class":701},[425,103681,103682],{"class":427,"line":710},[425,103683,103684],{"class":701},"    ...\n",[425,103686,103687,103689,103691],{"class":427,"line":721},[425,103688,53172],{"class":701},[425,103690,102596],{"class":52055},[425,103692,52062],{"class":701},[425,103694,103695,103697,103699],{"class":427,"line":735},[425,103696,52540],{"class":701},[425,103698,101776],{"class":52055},[425,103700,52062],{"class":701},[19,103702,103703,103705,103706,103708,103709,103712],{},[422,103704,52555],{}," 表示刚体。",[422,103707,101875],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[422,103710,103711],{},"joint"," 表示刚体相对父刚体如何运动。",[14,103714,103715],{"id":103715},"层级结构非常重要",[19,103717,103718],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[416,103720,103723],{"className":103721,"code":103722,"language":6187,"meta":395},[6185],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[422,103724,103722],{"__ignoreMap":395},[19,103726,103727,101773,103730,103733,103734,103737],{},[422,103728,103729],{},"red_box_geom",[422,103731,103732],{},"box_center"," 都属于 ",[422,103735,103736],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[416,103739,103741],{"className":53822,"code":103740,"language":53824,"meta":395,"style":395},"\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",[422,103742,103743,103763,103777,103797],{"__ignoreMap":395},[425,103744,103745,103747,103749,103751,103753,103755,103757,103759,103761],{"class":427,"line":428},[425,103746,2057],{"class":701},[425,103748,52555],{"class":52055},[425,103750,15917],{"class":431},[425,103752,1204],{"class":701},[425,103754,54246],{"class":435},[425,103756,101861],{"class":431},[425,103758,1204],{"class":701},[425,103760,101866],{"class":435},[425,103762,52062],{"class":701},[425,103764,103765,103767,103769,103771,103773,103775],{"class":427,"line":698},[425,103766,52899],{"class":701},[425,103768,102375],{"class":52055},[425,103770,15917],{"class":431},[425,103772,1204],{"class":701},[425,103774,102716],{"class":435},[425,103776,101899],{"class":701},[425,103778,103779,103781,103783,103785,103787,103789,103791,103793,103795],{"class":427,"line":710},[425,103780,52899],{"class":701},[425,103782,101875],{"class":52055},[425,103784,54579],{"class":431},[425,103786,1204],{"class":701},[425,103788,54246],{"class":435},[425,103790,101891],{"class":431},[425,103792,1204],{"class":701},[425,103794,101896],{"class":435},[425,103796,101899],{"class":701},[425,103798,103799,103801,103803],{"class":427,"line":721},[425,103800,52540],{"class":701},[425,103802,52555],{"class":52055},[425,103804,52062],{"class":701},[19,103806,103807],{},"含义:",[972,103809,103810,103816,103821,103824],{},[450,103811,103812,103813,103815],{},"创建名为 ",[422,103814,54469],{}," 的刚体",[450,103817,103818,103819],{},"初始位置在世界坐标 ",[422,103820,101924],{},[450,103822,103823],{},"它有一个自由关节",[450,103825,103826],{},"它有一个盒子几何体",[14,103828,103829],{"id":103829},"坐标怎么理解",[19,103831,103832],{},"MuJoCo 默认使用三维坐标：",[416,103834,103837],{"className":103835,"code":103836,"language":6187,"meta":395},[6185],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[422,103838,103836],{"__ignoreMap":395},[19,103840,15630],{},[416,103842,103844],{"className":53822,"code":103843,"language":53824,"meta":395,"style":395},"pos=\"0 0 1\"\n",[422,103845,103846],{"__ignoreMap":395},[425,103847,103848],{"class":427,"line":428},[425,103849,103843],{"class":701},[19,103851,103852],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[14,103854,103856],{"id":103855},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,103858,103859,103860,83285,103863,103865],{},"不同 ",[422,103861,103862],{},"type",[422,103864,32251],{}," 含义不同：",[35,103867,103868,103883],{},[38,103869,103870],{},[41,103871,103872,103876,103881],{},[44,103873,103874],{"align":46},[422,103875,103862],{},[44,103877,103878,103880],{"align":46},[422,103879,32251],{}," 示例",[44,103882,101455],{"align":46},[55,103884,103885,103899,103914,103933],{},[41,103886,103887,103891,103896],{},[60,103888,103889],{"align":46},[422,103890,54469],{},[60,103892,103893],{"align":46},[422,103894,103895],{},"size=\"0.1 0.2 0.3\"",[60,103897,103898],{"align":46},"x\u002Fy\u002Fz 半边长，不是完整长度",[41,103900,103901,103906,103911],{},[60,103902,103903],{"align":46},[422,103904,103905],{},"sphere",[60,103907,103908],{"align":46},[422,103909,103910],{},"size=\"0.1\"",[60,103912,103913],{"align":46},"球半径",[41,103915,103916,103921,103926],{},[60,103917,103918],{"align":46},[422,103919,103920],{},"capsule",[60,103922,103923],{"align":46},[422,103924,103925],{},"size=\"0.03\"",[60,103927,103928,103929,103932],{"align":46},"胶囊半径，长度常用 ",[422,103930,103931],{},"fromto"," 指定",[41,103934,103935,103940,103945],{},[60,103936,103937],{"align":46},[422,103938,103939],{},"plane",[60,103941,103942],{"align":46},[422,103943,103944],{},"size=\"3 3 0.1\"",[60,103946,103947],{"align":46},"可视平面大小，通常当地面",[19,103949,103950,103951,103953,103954,103956],{},"最容易踩坑的是 box：",[422,103952,102779],{}," 表示边长大约是 ",[422,103955,32792],{},"，因为 MuJoCo 用的是半边长。",[14,103958,103960],{"id":103959},"site-是什么","site 是什么",[19,103962,103963,103966],{},[422,103964,103965],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[972,103968,103969,103972,103975,103978],{},[450,103970,103971],{},"标记机械臂末端。",[450,103973,103974],{},"标记目标位置。",[450,103976,103977],{},"放传感器或相机参考点。",[450,103979,103980],{},"在 Python 中读取某个关键点的世界坐标。",[19,103982,103983,103984,101773,103987,103990],{},"在后面的 Reacher 任务中，",[422,103985,103986],{},"tip",[422,103988,103989],{},"target"," 就会用 site 表示。",[1099,103992,102008],{"id":102007},[416,103994,103996],{"className":31133,"code":103995,"language":31135,"meta":395,"style":395},"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",[422,103997,103998,104004,104014,104018,104022,104030,104035,104039,104043,104047,104052,104056,104061,104066,104071,104076,104080,104084,104088,104092,104096,104100,104112,104124,104132,104136,104151,104166,104170,104183,104198,104211,104224,104228,104244,104248,104252,104263,104275,104287,104299,104303,104307,104319],{"__ignoreMap":395},[425,103999,104000,104002],{"class":427,"line":428},[425,104001,31147],{"class":1155},[425,104003,102056],{"class":701},[425,104005,104006,104008,104010,104012],{"class":427,"line":698},[425,104007,31147],{"class":1155},[425,104009,32135],{"class":701},[425,104011,32138],{"class":1155},[425,104013,32141],{"class":701},[425,104015,104016],{"class":427,"line":710},[425,104017,3400],{"emptyLinePlaceholder":1084},[425,104019,104020],{"class":427,"line":721},[425,104021,3400],{"emptyLinePlaceholder":1084},[425,104023,104024,104026,104028],{"class":427,"line":735},[425,104025,102069],{"class":691},[425,104027,14563],{"class":1155},[425,104029,102074],{"class":435},[425,104031,104032],{"class":427,"line":743},[425,104033,104034],{"class":435},"\u003Cmujoco model=\"xml_basic\">\n",[425,104036,104037],{"class":427,"line":751},[425,104038,102084],{"class":435},[425,104040,104041],{"class":427,"line":759},[425,104042,3400],{"emptyLinePlaceholder":1084},[425,104044,104045],{"class":427,"line":770},[425,104046,102093],{"class":435},[425,104048,104049],{"class":427,"line":780},[425,104050,104051],{"class":435},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[425,104053,104054],{"class":427,"line":790},[425,104055,3400],{"emptyLinePlaceholder":1084},[425,104057,104058],{"class":427,"line":805},[425,104059,104060],{"class":435},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[425,104062,104063],{"class":427,"line":818},[425,104064,104065],{"class":435},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[425,104067,104068],{"class":427,"line":831},[425,104069,104070],{"class":435},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[425,104072,104073],{"class":427,"line":841},[425,104074,104075],{"class":435},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[425,104077,104078],{"class":427,"line":852},[425,104079,102122],{"class":435},[425,104081,104082],{"class":427,"line":862},[425,104083,102127],{"class":435},[425,104085,104086],{"class":427,"line":878},[425,104087,102132],{"class":435},[425,104089,104090],{"class":427,"line":914},[425,104091,96453],{"class":435},[425,104093,104094],{"class":427,"line":943},[425,104095,3400],{"emptyLinePlaceholder":1084},[425,104097,104098],{"class":427,"line":956},[425,104099,3400],{"emptyLinePlaceholder":1084},[425,104101,104102,104104,104106,104108,104110],{"class":427,"line":964},[425,104103,32702],{"class":1155},[425,104105,2973],{"class":431},[425,104107,102153],{"class":701},[425,104109,96441],{"class":691},[425,104111,4739],{"class":701},[425,104113,104114,104116,104118,104120,104122],{"class":427,"line":2733},[425,104115,102162],{"class":701},[425,104117,1204],{"class":1155},[425,104119,102167],{"class":701},[425,104121,102069],{"class":691},[425,104123,1165],{"class":701},[425,104125,104126,104128,104130],{"class":427,"line":2750},[425,104127,102176],{"class":701},[425,104129,1204],{"class":1155},[425,104131,102181],{"class":701},[425,104133,104134],{"class":427,"line":2755},[425,104135,3400],{"emptyLinePlaceholder":1084},[425,104137,104138,104141,104143,104146,104149],{"class":427,"line":2760},[425,104139,104140],{"class":701},"    box_body_id ",[425,104142,1204],{"class":1155},[425,104144,104145],{"class":701}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[425,104147,104148],{"class":435},"\"red_box\"",[425,104150,1165],{"class":701},[425,104152,104153,104156,104158,104161,104164],{"class":427,"line":2765},[425,104154,104155],{"class":701},"    site_id ",[425,104157,1204],{"class":1155},[425,104159,104160],{"class":701}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[425,104162,104163],{"class":435},"\"box_center\"",[425,104165,1165],{"class":701},[425,104167,104168],{"class":427,"line":2779},[425,104169,3400],{"emptyLinePlaceholder":1084},[425,104171,104172,104174,104177,104179,104181],{"class":427,"line":2784},[425,104173,4101],{"class":1155},[425,104175,104176],{"class":701}," box_body_id ",[425,104178,2057],{"class":1155},[425,104180,5093],{"class":691},[425,104182,4739],{"class":701},[425,104184,104185,104188,104191,104193,104196],{"class":427,"line":3577},[425,104186,104187],{"class":1155},"        raise",[425,104189,104190],{"class":691}," RuntimeError",[425,104192,1159],{"class":701},[425,104194,104195],{"class":435},"\"body red_box not found\"",[425,104197,1165],{"class":701},[425,104199,104200,104202,104205,104207,104209],{"class":427,"line":3591},[425,104201,4101],{"class":1155},[425,104203,104204],{"class":701}," site_id ",[425,104206,2057],{"class":1155},[425,104208,5093],{"class":691},[425,104210,4739],{"class":701},[425,104212,104213,104215,104217,104219,104222],{"class":427,"line":3599},[425,104214,104187],{"class":1155},[425,104216,104190],{"class":691},[425,104218,1159],{"class":701},[425,104220,104221],{"class":435},"\"site box_center not found\"",[425,104223,1165],{"class":701},[425,104225,104226],{"class":427,"line":3604},[425,104227,3400],{"emptyLinePlaceholder":1084},[425,104229,104230,104232,104234,104236,104238,104240,104242],{"class":427,"line":3610},[425,104231,4201],{"class":1155},[425,104233,102256],{"class":701},[425,104235,27034],{"class":1155},[425,104237,33198],{"class":691},[425,104239,1159],{"class":701},[425,104241,2724],{"class":691},[425,104243,31541],{"class":701},[425,104245,104246],{"class":427,"line":3616},[425,104247,102271],{"class":701},[425,104249,104250],{"class":427,"line":3621},[425,104251,3400],{"emptyLinePlaceholder":1084},[425,104253,104254,104256,104258,104261],{"class":427,"line":8948},[425,104255,32054],{"class":691},[425,104257,1159],{"class":701},[425,104259,104260],{"class":435},"\"simulation time:\"",[425,104262,102233],{"class":701},[425,104264,104265,104267,104269,104272],{"class":427,"line":8972},[425,104266,32054],{"class":691},[425,104268,1159],{"class":701},[425,104270,104271],{"class":435},"\"box body position:\"",[425,104273,104274],{"class":701},", data.xpos[box_body_id].copy())\n",[425,104276,104277,104279,104281,104284],{"class":427,"line":8977},[425,104278,32054],{"class":691},[425,104280,1159],{"class":701},[425,104282,104283],{"class":435},"\"site position:\"",[425,104285,104286],{"class":701},", data.site_xpos[site_id].copy())\n",[425,104288,104289,104291,104293,104296],{"class":427,"line":8983},[425,104290,32054],{"class":691},[425,104292,1159],{"class":701},[425,104294,104295],{"class":435},"\"box qpos:\"",[425,104297,104298],{"class":701},", np.array(data.qpos))\n",[425,104300,104301],{"class":427,"line":9010},[425,104302,3400],{"emptyLinePlaceholder":1084},[425,104304,104305],{"class":427,"line":9015},[425,104306,3400],{"emptyLinePlaceholder":1084},[425,104308,104309,104311,104313,104315,104317],{"class":427,"line":9021},[425,104310,2544],{"class":1155},[425,104312,31975],{"class":691},[425,104314,102314],{"class":1155},[425,104316,102317],{"class":435},[425,104318,4739],{"class":701},[425,104320,104321],{"class":427,"line":9033},[425,104322,102324],{"class":701},[19,104324,104325],{},"保存为：",[416,104327,104329],{"className":418,"code":104328,"language":420,"meta":395,"style":395},"touch ch2_xml_basic.py\n",[422,104330,104331],{"__ignoreMap":395},[425,104332,104333,104335],{"class":427,"line":428},[425,104334,102038],{"class":431},[425,104336,104337],{"class":435}," ch2_xml_basic.py\n",[19,104339,103056],{},[416,104341,104343],{"className":418,"code":104342,"language":420,"meta":395,"style":395},"python ch2_xml_basic.py\n",[422,104344,104345],{"__ignoreMap":395},[425,104346,104347,104349],{"class":427,"line":428},[425,104348,31135],{"class":431},[425,104350,104337],{"class":435},[14,104352,102327],{"id":102327},[19,104354,104355],{},"用名字查找 body：",[416,104357,104359],{"className":31133,"code":104358,"language":31135,"meta":395,"style":395},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[422,104360,104361],{"__ignoreMap":395},[425,104362,104363,104366,104368,104370,104372],{"class":427,"line":428},[425,104364,104365],{"class":701},"box_body_id ",[425,104367,1204],{"class":1155},[425,104369,104145],{"class":701},[425,104371,104148],{"class":435},[425,104373,1165],{"class":701},[19,104375,104376],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,104378,104379],{},"用名字查找 site：",[416,104381,104383],{"className":31133,"code":104382,"language":31135,"meta":395,"style":395},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[422,104384,104385],{"__ignoreMap":395},[425,104386,104387,104390,104392,104394,104396],{"class":427,"line":428},[425,104388,104389],{"class":701},"site_id ",[425,104391,1204],{"class":1155},[425,104393,104160],{"class":701},[425,104395,104163],{"class":435},[425,104397,1165],{"class":701},[19,104399,104400,104401,104404,104405,104408],{},"注意第二个参数是对象类型。查 body 就用 ",[422,104402,104403],{},"mjOBJ_BODY","，查 site 就用 ",[422,104406,104407],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,104410,104411],{},"读取世界坐标：",[416,104413,104415],{"className":31133,"code":104414,"language":31135,"meta":395,"style":395},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[422,104416,104417,104422],{"__ignoreMap":395},[425,104418,104419],{"class":427,"line":428},[425,104420,104421],{"class":701},"data.xpos[box_body_id]\n",[425,104423,104424],{"class":427,"line":698},[425,104425,104426],{"class":701},"data.site_xpos[site_id]\n",[19,104428,104429,104432,104433,104436],{},[422,104430,104431],{},"xpos"," 是 body 的世界坐标，",[422,104434,104435],{},"site_xpos"," 是 site 的世界坐标。",[14,104438,102463],{"id":102463},[416,104440,104442],{"className":31133,"code":104441,"language":31135,"meta":395,"style":395},"import mujoco\nimport numpy as np\n",[422,104443,104444,104450],{"__ignoreMap":395},[425,104445,104446,104448],{"class":427,"line":428},[425,104447,31147],{"class":1155},[425,104449,102056],{"class":701},[425,104451,104452,104454,104456,104458],{"class":427,"line":698},[425,104453,31147],{"class":1155},[425,104455,32135],{"class":701},[425,104457,32138],{"class":1155},[425,104459,32141],{"class":701},[19,104461,104462,104463,104466,104467,104470,104471,1362,104474,998],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[422,104464,104465],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[422,104468,104469],{},"as np"," 是习惯写法，后面就可以写 ",[422,104472,104473],{},"np.array(...)",[422,104475,104476],{},"np.round(...)",[416,104478,104479],{"className":31133,"code":102350,"language":31135,"meta":395,"style":395},[422,104480,104481,104489,104493],{"__ignoreMap":395},[425,104482,104483,104485,104487],{"class":427,"line":428},[425,104484,102069],{"class":691},[425,104486,14563],{"class":1155},[425,104488,102074],{"class":435},[425,104490,104491],{"class":427,"line":698},[425,104492,102365],{"class":435},[425,104494,104495],{"class":427,"line":710},[425,104496,96453],{"class":435},[19,104498,104499,104500,998],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[422,104501,104502],{},"mujoco.MjModel.from_xml_string(XML)",[416,104504,104506],{"className":53822,"code":104505,"language":53824,"meta":395,"style":395},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[422,104507,104508],{"__ignoreMap":395},[425,104509,104510,104512,104514,104516,104518,104520,104522,104524,104527,104529,104531,104534,104536,104538,104541],{"class":427,"line":428},[425,104511,2057],{"class":701},[425,104513,103965],{"class":52055},[425,104515,15917],{"class":431},[425,104517,1204],{"class":701},[425,104519,104163],{"class":435},[425,104521,101861],{"class":431},[425,104523,1204],{"class":701},[425,104525,104526],{"class":435},"\"0 0 0\"",[425,104528,101891],{"class":431},[425,104530,1204],{"class":701},[425,104532,104533],{"class":435},"\"0.03\"",[425,104535,79522],{"class":431},[425,104537,1204],{"class":701},[425,104539,104540],{"class":435},"\"0 1 0 1\"",[425,104542,101899],{"class":701},[19,104544,104545,104547,104548,104551,104552,104554,104555,104558],{},[422,104546,103965],{}," 是标记点。",[422,104549,104550],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[422,104553,103925],{}," 表示显示出来的小球大小。",[422,104556,104557],{},"rgba=\"0 1 0 1\""," 表示绿色。",[416,104560,104561],{"className":31133,"code":104358,"language":31135,"meta":395,"style":395},[422,104562,104563],{"__ignoreMap":395},[425,104564,104565,104567,104569,104571,104573],{"class":427,"line":428},[425,104566,104365],{"class":701},[425,104568,1204],{"class":1155},[425,104570,104145],{"class":701},[425,104572,104148],{"class":435},[425,104574,1165],{"class":701},[19,104576,104577,104578,104580],{},"这行的作用是：根据名字 ",[422,104579,104148],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,104582,104583],{},"拆开看：",[972,104585,104586,104592,104597,104603],{},[450,104587,104588,104591],{},[422,104589,104590],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[450,104593,104594,104596],{},[422,104595,102840],{}," 是被查询的模型。",[450,104598,104599,104602],{},[422,104600,104601],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[450,104604,104605,104607],{},[422,104606,104148],{}," 是 XML 里写的名字。",[416,104609,104610],{"className":31133,"code":104382,"language":31135,"meta":395,"style":395},[422,104611,104612],{"__ignoreMap":395},[425,104613,104614,104616,104618,104620,104622],{"class":427,"line":428},[425,104615,104389],{"class":701},[425,104617,1204],{"class":1155},[425,104619,104160],{"class":701},[425,104621,104163],{"class":435},[425,104623,1165],{"class":701},[19,104625,104626,104627,998],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[422,104628,104163],{},[416,104630,104632],{"className":31133,"code":104631,"language":31135,"meta":395,"style":395},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[422,104633,104634,104646],{"__ignoreMap":395},[425,104635,104636,104638,104640,104642,104644],{"class":427,"line":428},[425,104637,2544],{"class":1155},[425,104639,104176],{"class":701},[425,104641,2057],{"class":1155},[425,104643,5093],{"class":691},[425,104645,4739],{"class":701},[425,104647,104648,104651,104653,104655,104657],{"class":427,"line":698},[425,104649,104650],{"class":1155},"    raise",[425,104652,104190],{"class":691},[425,104654,1159],{"class":701},[425,104656,104195],{"class":435},[425,104658,1165],{"class":701},[19,104660,104661,104663,104664,104667,104668,104671,104672,104675],{},[422,104662,2544],{}," 是条件判断。",[422,104665,104666],{},"mj_name2id"," 找不到对象时会返回 ",[422,104669,104670],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[422,104673,104674],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[416,104677,104679],{"className":31133,"code":104678,"language":31135,"meta":395,"style":395},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[422,104680,104681,104697],{"__ignoreMap":395},[425,104682,104683,104685,104687,104689,104691,104693,104695],{"class":427,"line":428},[425,104684,4025],{"class":1155},[425,104686,102256],{"class":701},[425,104688,27034],{"class":1155},[425,104690,33198],{"class":691},[425,104692,1159],{"class":701},[425,104694,2724],{"class":691},[425,104696,31541],{"class":701},[425,104698,104699],{"class":427,"line":698},[425,104700,102454],{"class":701},[19,104702,104703],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[416,104705,104707],{"className":31133,"code":104706,"language":31135,"meta":395,"style":395},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[422,104708,104709],{"__ignoreMap":395},[425,104710,104711,104713,104715,104717],{"class":427,"line":428},[425,104712,31170],{"class":691},[425,104714,1159],{"class":701},[425,104716,104271],{"class":435},[425,104718,104274],{"class":701},[19,104720,104721,104723,104724,104727],{},[422,104722,101834],{}," 保存所有 body 的世界坐标。",[422,104725,104726],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[416,104729,104731],{"className":31133,"code":104730,"language":31135,"meta":395,"style":395},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[422,104732,104733],{"__ignoreMap":395},[425,104734,104735,104737,104739,104741],{"class":427,"line":428},[425,104736,31170],{"class":691},[425,104738,1159],{"class":701},[425,104740,104283],{"class":435},[425,104742,104286],{"class":701},[19,104744,104745,104748,104749,104751],{},[422,104746,104747],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[422,104750,103732],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[416,104753,104755],{"className":31133,"code":104754,"language":31135,"meta":395,"style":395},"print(\"box qpos:\", np.array(data.qpos))\n",[422,104756,104757],{"__ignoreMap":395},[425,104758,104759,104761,104763,104765],{"class":427,"line":428},[425,104760,31170],{"class":691},[425,104762,1159],{"class":701},[425,104764,104295],{"class":435},[425,104766,104298],{"class":701},[19,104768,104769,104770,104773],{},"这里打印广义位置数组。",[422,104771,104772],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[1099,104775,103071],{"id":103070},[19,104777,104778,104779,104782,104783,998],{},"程序会输出 ",[422,104780,104781],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[422,104784,104785],{},"qpos",[19,104787,104788,104790,104791,104794,104795,104798],{},[422,104789,104726],{}," 是 body 的世界坐标位置。",[422,104792,104793],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[422,104796,104797],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,104800,82977,104801,83285,104803,104805],{},[422,104802,103732],{},[422,104804,104550],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,104807,104808],{},"如果你把 site 改成：",[416,104810,104812],{"className":53822,"code":104811,"language":53824,"meta":395,"style":395},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[422,104813,104814],{"__ignoreMap":395},[425,104815,104816,104818,104820,104822,104824,104827,104829,104831,104834,104836,104838,104840,104842,104844,104846],{"class":427,"line":428},[425,104817,2057],{"class":701},[425,104819,103965],{"class":52055},[425,104821,15917],{"class":431},[425,104823,1204],{"class":701},[425,104825,104826],{"class":435},"\"box_top\"",[425,104828,101861],{"class":431},[425,104830,1204],{"class":701},[425,104832,104833],{"class":435},"\"0 0 0.15\"",[425,104835,101891],{"class":431},[425,104837,1204],{"class":701},[425,104839,104533],{"class":435},[425,104841,79522],{"class":431},[425,104843,1204],{"class":701},[425,104845,104540],{"class":435},[425,104847,101899],{"class":701},[19,104849,104850,104851,104854],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[422,104852,104853],{},"site position"," 就会比 body position 的 z 坐标更高。",[1099,104856,103103],{"id":103102},[972,104858,104859,104868,104871,104878,104884,104895],{},[450,104860,103166,104861,104863,104864,103169,104866,998],{},[422,104862,103736],{}," 的初始高度从 ",[422,104865,1367],{},[422,104867,1235],{},[450,104869,104870],{},"重新运行程序。",[450,104872,104873,104874,104877],{},"观察 ",[422,104875,104876],{},"box qpos"," 和最终位置是否变化。",[450,104879,104880,104881,104883],{},"故意把 ",[422,104882,103965],{}," 名称改错，确认程序能报错。",[450,104885,103166,104886,104888,104889,103169,104891,104894],{},[422,104887,101875],{}," 的颜色 ",[422,104890,102787],{},[422,104892,104893],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[450,104896,103166,104897,83285,104899,103169,104902,104905,104906,104908],{},[422,104898,103732],{},[422,104900,104901],{},"pos",[422,104903,104904],{},"0 0 0.2","，观察 ",[422,104907,104853],{}," 如何变化。",[1099,104910,103208],{"id":103207},[14,104912,104914],{"id":104913},"xml-error-schema-violation",[422,104915,104916],{},"XML Error: Schema violation",[19,104918,104919],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[14,104921,104923,82045,104925],{"id":104922},"mj_name2id-返回-1",[422,104924,104666],{},[422,104926,104670],{},[19,104928,104929,104930,104933],{},"说明名字没有找到。检查 XML 中 ",[422,104931,104932],{},"name=\"...\"","，并确认对象类型正确。",[14,104935,104936],{"id":104936},"物体不下落",[19,104938,103278],{},[972,104940,104941,104946,104951],{},[450,104942,104943,104944],{},"body 是否有 ",[422,104945,102375],{},[450,104947,104948,104949],{},"gravity 是否为 ",[422,104950,103344],{},[450,104952,104953,104954,104956],{},"body 是否被固定在 ",[422,104955,102596],{}," 中",[14,104958,104959],{"id":104959},"坐标看起来不符合预期",[19,104961,104962],{},"先区分两种坐标：",[35,104964,104965,104974],{},[38,104966,104967],{},[41,104968,104969,104972],{},[44,104970,104971],{"align":46},"坐标",[44,104973,101455],{"align":46},[55,104975,104976,104986],{},[41,104977,104978,104983],{},[60,104979,104980,104981],{"align":46},"XML 里的 ",[422,104982,104901],{},[60,104984,104985],{"align":46},"相对父 body 的局部坐标",[41,104987,104988,104994],{},[60,104989,104990,25970,104992],{"align":46},[422,104991,101834],{},[422,104993,104747],{},[60,104995,104996],{"align":46},"仿真更新后的世界坐标",[19,104998,104999,105000,105002,105003,83294,105006,105008],{},"如果你修改了 ",[422,105001,101825],{},"，但还没调用 ",[422,105004,105005],{},"mj_forward",[422,105007,101970],{},"，世界坐标可能还没有更新。",[1099,105010,103362],{"id":103361},[19,105012,105013],{},"MJCF 建模先掌握四件事：",[972,105015,105016,105021,105026,105031],{},[450,105017,105018,105020],{},[422,105019,52555],{}," 表示刚体层级。",[450,105022,105023,105025],{},[422,105024,101875],{}," 表示形状、碰撞和质量。",[450,105027,105028,105030],{},[422,105029,103711],{}," 决定 body 能不能动、怎么动。",[450,105032,105033,105035],{},[422,105034,103965],{}," 用来标记关键点，方便 Python 读取位置。",[19,105037,105038],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[1074,105040,105041],{},"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":395,"searchDepth":698,"depth":698,"links":105043},[105044,105045,105046,105052,105056,105057,105058,105065],{"id":101401,"depth":698,"text":101402},{"id":101524,"depth":698,"text":101525},{"id":101799,"depth":698,"text":101800,"children":105047},[105048,105049,105050,105051],{"id":103715,"depth":710,"text":103715},{"id":103829,"depth":710,"text":103829},{"id":103855,"depth":710,"text":103856},{"id":103959,"depth":710,"text":103960},{"id":102007,"depth":698,"text":102008,"children":105053},[105054,105055],{"id":102327,"depth":710,"text":102327},{"id":102463,"depth":710,"text":102463},{"id":103070,"depth":698,"text":103071},{"id":103102,"depth":698,"text":103103},{"id":103207,"depth":698,"text":103208,"children":105059},[105060,105061,105063,105064],{"id":104913,"depth":710,"text":104916},{"id":104922,"depth":710,"text":105062},"mj_name2id 返回 -1",{"id":104936,"depth":710,"text":104936},{"id":104959,"depth":710,"text":104959},{"id":103361,"depth":698,"text":103362},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103409,"description":395},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":105072,"title":105073,"body":105074,"description":395,"extension":1082,"meta":106569,"navigation":1084,"path":106570,"seo":106571,"stem":106572,"__hash__":106573},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":105075,"toc":106541},[105076,105079,105081,105084,105087,105125,105128,105134,105137,105139,105141,105168,105170,105184,105186,105227,105229,105253,105255,105258,105267,105276,105279,105288,105296,105305,105308,105318,105321,105373,105380,105386,105394,105442,105445,105464,105467,105475,105479,105488,105521,105523,105871,105873,105885,105887,105898,105900,105903,105924,105930,105933,105958,105968,105971,105979,105982,105985,106006,106017,106019,106039,106042,106063,106072,106091,106097,106122,106125,106139,106146,106170,106173,106181,106190,106206,106218,106226,106235,106237,106240,106264,106269,106272,106294,106296,106335,106337,106344,106346,106354,106357,106360,106372,106413,106420,106431,106438,106441,106490,106493,106496,106502,106504,106509,106535,106538],[10,105077,105073],{"id":105078},"_3python-控制接口读取状态与推进仿真",[1099,105080,101402],{"id":101401},[19,105082,105083],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,105085,105086],{},"你将学习:",[972,105088,105089,105094,105099,105103,105108,105119],{},[450,105090,105091],{},[422,105092,105093],{},"MjModel.from_xml_string",[450,105095,105096],{},[422,105097,105098],{},"MjData(model)",[450,105100,105101],{},[422,105102,101970],{},[450,105104,105105],{},[422,105106,105107],{},"mj_resetData",[450,105109,105110,105111,1362,105113,1362,105116],{},"读取 ",[422,105112,104785],{},[422,105114,105115],{},"qvel",[422,105117,105118],{},"ctrl",[450,105120,105121,105122],{},"使用 ",[422,105123,105124],{},"model.opt.timestep",[19,105126,105127],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[416,105129,105132],{"className":105130,"code":105131,"language":6187,"meta":395},[6185],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[422,105133,105131],{"__ignoreMap":395},[19,105135,105136],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[1099,105138,101525],{"id":101524},[19,105140,101528],{},[416,105142,105144],{"className":418,"code":105143,"language":420,"meta":395,"style":395},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[422,105145,105146],{"__ignoreMap":395},[425,105147,105148,105150,105152,105154,105156,105159,105161,105163,105165],{"class":427,"line":428},[425,105149,652],{"class":431},[425,105151,27305],{"class":435},[425,105153,24828],{"class":435},[425,105155,27389],{"class":691},[425,105157,105158],{"class":435}," python3",[425,105160,101553],{"class":435},[425,105162,103256],{"class":435},[425,105164,101569],{"class":435},[425,105166,105167],{"class":435}," glfw\n",[19,105169,103574],{},[416,105171,105172],{"className":418,"code":101674,"language":420,"meta":395,"style":395},[422,105173,105174],{"__ignoreMap":395},[425,105175,105176,105178,105180,105182],{"class":427,"line":428},[425,105177,24825],{"class":431},[425,105179,24828],{"class":435},[425,105181,101685],{"class":435},[425,105183,101688],{"class":435},[19,105185,103591],{},[416,105187,105189],{"className":418,"code":105188,"language":420,"meta":395,"style":395},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[422,105190,105191,105208,105217],{"__ignoreMap":395},[425,105192,105193,105195,105197,105199,105202,105204,105206],{"class":427,"line":428},[425,105194,31085],{"class":431},[425,105196,29931],{"class":435},[425,105198,26106],{"class":691},[425,105200,105201],{"class":435}," mujoco-python-api",[425,105203,101730],{"class":435},[425,105205,101733],{"class":691},[425,105207,101736],{"class":691},[425,105209,105210,105212,105214],{"class":427,"line":698},[425,105211,31085],{"class":431},[425,105213,101743],{"class":435},[425,105215,105216],{"class":435}," mujoco-python-api\n",[425,105218,105219,105221,105223,105225],{"class":427,"line":710},[425,105220,24825],{"class":431},[425,105222,24828],{"class":435},[425,105224,101685],{"class":435},[425,105226,101688],{"class":435},[19,105228,101759],{},[972,105230,105231,105238,105247],{},[450,105232,105233,101773,105235,105237],{},[422,105234,101430],{},[422,105236,101435],{}," 是官方 Python bindings 的类名。",[450,105239,105240,105241,105244,105245,998],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[422,105242,105243],{},"mjModel"," 在 Python 中是 ",[422,105246,101464],{},[450,105248,105249,105250,998],{},"不要使用 ",[422,105251,105252],{},"sim = mujoco_py.MjSim(...)",[1099,105254,101800],{"id":101799},[19,105256,105257],{},"仿真推进核心代码:",[416,105259,105261],{"className":31133,"code":105260,"language":31135,"meta":395,"style":395},"mujoco.mj_step(model, data)\n",[422,105262,105263],{"__ignoreMap":395},[425,105264,105265],{"class":427,"line":428},[425,105266,105260],{"class":701},[19,105268,105269,105270,1362,105272,1362,105274,998],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[422,105271,101825],{},[422,105273,101828],{},[422,105275,101822],{},[19,105277,105278],{},"重置仿真:",[416,105280,105282],{"className":31133,"code":105281,"language":31135,"meta":395,"style":395},"mujoco.mj_resetData(model, data)\n",[422,105283,105284],{"__ignoreMap":395},[425,105285,105286],{"class":427,"line":428},[425,105287,105281],{"class":701},[19,105289,105290,105291,83294,105293,105295],{},"如果手动修改了 ",[422,105292,101825],{},[422,105294,101828],{},"，通常应调用:",[416,105297,105299],{"className":31133,"code":105298,"language":31135,"meta":395,"style":395},"mujoco.mj_forward(model, data)\n",[422,105300,105301],{"__ignoreMap":395},[425,105302,105303],{"class":427,"line":428},[425,105304,105298],{"class":701},[19,105306,105307],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[14,105309,105311,1362,105313,1362,105315,105317],{"id":105310},"qposqvelctrl-是什么",[422,105312,104785],{},[422,105314,105115],{},[422,105316,105118],{}," 是什么",[19,105319,105320],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[35,105322,105323,105335],{},[38,105324,105325],{},[41,105326,105327,105330,105332],{},[44,105328,105329],{"align":46},"字段",[44,105331,101455],{"align":46},[44,105333,105334],{"align":46},"谁来修改",[55,105336,105337,105349,105361],{},[41,105338,105339,105343,105346],{},[60,105340,105341],{"align":46},[422,105342,101825],{},[60,105344,105345],{"align":46},"广义位置，例如小车位置、关节角、自由物体位置姿态",[60,105347,105348],{"align":46},"MuJoCo 更新，也可以手动设置初始状态",[41,105350,105351,105355,105358],{},[60,105352,105353],{"align":46},[422,105354,101828],{},[60,105356,105357],{"align":46},"广义速度，例如小车速度、关节角速度",[60,105359,105360],{"align":46},"MuJoCo 更新，也可以手动清零",[41,105362,105363,105367,105370],{},[60,105364,105365],{"align":46},[422,105366,101831],{},[60,105368,105369],{"align":46},"actuator 的控制输入",[60,105371,105372],{"align":46},"主要由你的控制代码写入",[19,105374,970,105375,101773,105377,105379],{},[422,105376,104785],{},[422,105378,105115],{}," 不一定同维。自由刚体就是典型例子：",[416,105381,105384],{"className":105382,"code":105383,"language":6187,"meta":395},[6185],"freejoint: qpos 7 维，qvel 6 维\n",[422,105385,105383],{"__ignoreMap":395},[14,105387,105389,101773,105391,105393],{"id":105388},"mj_step-和-mj_forward-的区别",[422,105390,101970],{},[422,105392,105005],{}," 的区别",[35,105395,105396,105409],{},[38,105397,105398],{},[41,105399,105400,105403,105406],{},[44,105401,105402],{"align":46},"函数",[44,105404,105405],{"align":46},"是否推进时间",[44,105407,105408],{"align":46},"什么时候用",[55,105410,105411,105424],{},[41,105412,105413,105418,105421],{},[60,105414,105415],{"align":46},[422,105416,105417],{},"mj_step(model, data)",[60,105419,105420],{"align":46},"是",[60,105422,105423],{"align":46},"正常仿真循环，每调用一次前进一步",[41,105425,105426,105431,105434],{},[60,105427,105428],{"align":46},[422,105429,105430],{},"mj_forward(model, data)",[60,105432,105433],{"align":46},"否",[60,105435,105436,105437,1362,105439,105441],{"align":46},"手动改了 ",[422,105438,104785],{},[422,105440,105115],{}," 后，刷新派生量",[19,105443,105444],{},"例如你写：",[416,105446,105448],{"className":31133,"code":105447,"language":31135,"meta":395,"style":395},"data.qpos[2] = 2.0\n",[422,105449,105450],{"__ignoreMap":395},[425,105451,105452,105455,105457,105459,105461],{"class":427,"line":428},[425,105453,105454],{"class":701},"data.qpos[",[425,105456,1235],{"class":691},[425,105458,5443],{"class":701},[425,105460,1204],{"class":1155},[425,105462,105463],{"class":691}," 2.0\n",[19,105465,105466],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[416,105468,105469],{"className":31133,"code":105298,"language":31135,"meta":395,"style":395},[422,105470,105471],{"__ignoreMap":395},[425,105472,105473],{"class":427,"line":428},[425,105474,105298],{"class":701},[14,105476,105478],{"id":105477},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,105480,105481,105484,105485,105487],{},[422,105482,105483],{},"mujoco.mj_resetData(model, data)"," 会把 ",[422,105486,34156],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[416,105489,105491],{"className":31133,"code":105490,"language":31135,"meta":395,"style":395},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[422,105492,105493,105497,105507,105517],{"__ignoreMap":395},[425,105494,105495],{"class":427,"line":428},[425,105496,105281],{"class":701},[425,105498,105499,105502,105504],{"class":427,"line":698},[425,105500,105501],{"class":701},"data.qpos[:] ",[425,105503,1204],{"class":1155},[425,105505,105506],{"class":701}," random_qpos\n",[425,105508,105509,105512,105514],{"class":427,"line":710},[425,105510,105511],{"class":701},"data.qvel[:] ",[425,105513,1204],{"class":1155},[425,105515,105516],{"class":691}," 0.0\n",[425,105518,105519],{"class":427,"line":721},[425,105520,105298],{"class":701},[1099,105522,102008],{"id":102007},[416,105524,105526],{"className":31133,"code":105525,"language":31135,"meta":395,"style":395},"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",[422,105527,105528,105534,105544,105548,105552,105560,105565,105569,105573,105577,105582,105586,105591,105596,105601,105605,105609,105613,105617,105621,105625,105644,105651,105663,105674,105690,105706,105710,105714,105726,105738,105746,105750,105761,105765,105781,105785,105789,105798,105802,105807,105816,105820,105833,105838,105847,105851,105855,105867],{"__ignoreMap":395},[425,105529,105530,105532],{"class":427,"line":428},[425,105531,31147],{"class":1155},[425,105533,102056],{"class":701},[425,105535,105536,105538,105540,105542],{"class":427,"line":698},[425,105537,31147],{"class":1155},[425,105539,32135],{"class":701},[425,105541,32138],{"class":1155},[425,105543,32141],{"class":701},[425,105545,105546],{"class":427,"line":710},[425,105547,3400],{"emptyLinePlaceholder":1084},[425,105549,105550],{"class":427,"line":721},[425,105551,3400],{"emptyLinePlaceholder":1084},[425,105553,105554,105556,105558],{"class":427,"line":735},[425,105555,102069],{"class":691},[425,105557,14563],{"class":1155},[425,105559,102074],{"class":435},[425,105561,105562],{"class":427,"line":743},[425,105563,105564],{"class":435},"\u003Cmujoco model=\"state_api\">\n",[425,105566,105567],{"class":427,"line":751},[425,105568,102084],{"class":435},[425,105570,105571],{"class":427,"line":759},[425,105572,3400],{"emptyLinePlaceholder":1084},[425,105574,105575],{"class":427,"line":770},[425,105576,102093],{"class":435},[425,105578,105579],{"class":427,"line":780},[425,105580,105581],{"class":435},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[425,105583,105584],{"class":427,"line":790},[425,105585,3400],{"emptyLinePlaceholder":1084},[425,105587,105588],{"class":427,"line":805},[425,105589,105590],{"class":435},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[425,105592,105593],{"class":427,"line":818},[425,105594,105595],{"class":435},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[425,105597,105598],{"class":427,"line":831},[425,105599,105600],{"class":435},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[425,105602,105603],{"class":427,"line":841},[425,105604,102122],{"class":435},[425,105606,105607],{"class":427,"line":852},[425,105608,102127],{"class":435},[425,105610,105611],{"class":427,"line":862},[425,105612,102132],{"class":435},[425,105614,105615],{"class":427,"line":878},[425,105616,96453],{"class":435},[425,105618,105619],{"class":427,"line":914},[425,105620,3400],{"emptyLinePlaceholder":1084},[425,105622,105623],{"class":427,"line":943},[425,105624,3400],{"emptyLinePlaceholder":1084},[425,105626,105627,105629,105632,105635,105637,105640,105642],{"class":427,"line":956},[425,105628,32702],{"class":1155},[425,105630,105631],{"class":431}," print_state",[425,105633,105634],{"class":701},"(prefix: ",[425,105636,2316],{"class":691},[425,105638,105639],{"class":701},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[425,105641,96441],{"class":691},[425,105643,4739],{"class":701},[425,105645,105646,105648],{"class":427,"line":964},[425,105647,32054],{"class":691},[425,105649,105650],{"class":701},"(prefix)\n",[425,105652,105653,105655,105657,105660],{"class":427,"line":2733},[425,105654,32054],{"class":691},[425,105656,1159],{"class":701},[425,105658,105659],{"class":435},"\"  timestep:\"",[425,105661,105662],{"class":701},", model.opt.timestep)\n",[425,105664,105665,105667,105669,105672],{"class":427,"line":2750},[425,105666,32054],{"class":691},[425,105668,1159],{"class":701},[425,105670,105671],{"class":435},"\"  time:\"",[425,105673,102233],{"class":701},[425,105675,105676,105678,105680,105683,105686,105688],{"class":427,"line":2755},[425,105677,32054],{"class":691},[425,105679,1159],{"class":701},[425,105681,105682],{"class":435},"\"  qpos:\"",[425,105684,105685],{"class":701},", np.round(data.qpos.copy(), ",[425,105687,1442],{"class":691},[425,105689,31252],{"class":701},[425,105691,105692,105694,105696,105699,105702,105704],{"class":427,"line":2760},[425,105693,32054],{"class":691},[425,105695,1159],{"class":701},[425,105697,105698],{"class":435},"\"  qvel:\"",[425,105700,105701],{"class":701},", np.round(data.qvel.copy(), ",[425,105703,1442],{"class":691},[425,105705,31252],{"class":701},[425,105707,105708],{"class":427,"line":2765},[425,105709,3400],{"emptyLinePlaceholder":1084},[425,105711,105712],{"class":427,"line":2779},[425,105713,3400],{"emptyLinePlaceholder":1084},[425,105715,105716,105718,105720,105722,105724],{"class":427,"line":2784},[425,105717,32702],{"class":1155},[425,105719,2973],{"class":431},[425,105721,102153],{"class":701},[425,105723,96441],{"class":691},[425,105725,4739],{"class":701},[425,105727,105728,105730,105732,105734,105736],{"class":427,"line":3577},[425,105729,102162],{"class":701},[425,105731,1204],{"class":1155},[425,105733,102167],{"class":701},[425,105735,102069],{"class":691},[425,105737,1165],{"class":701},[425,105739,105740,105742,105744],{"class":427,"line":3591},[425,105741,102176],{"class":701},[425,105743,1204],{"class":1155},[425,105745,102181],{"class":701},[425,105747,105748],{"class":427,"line":3599},[425,105749,3400],{"emptyLinePlaceholder":1084},[425,105751,105752,105755,105758],{"class":427,"line":3604},[425,105753,105754],{"class":701},"    print_state(",[425,105756,105757],{"class":435},"\"initial\"",[425,105759,105760],{"class":701},", model, data)\n",[425,105762,105763],{"class":427,"line":3610},[425,105764,3400],{"emptyLinePlaceholder":1084},[425,105766,105767,105769,105771,105773,105775,105777,105779],{"class":427,"line":3616},[425,105768,4201],{"class":1155},[425,105770,102256],{"class":701},[425,105772,27034],{"class":1155},[425,105774,33198],{"class":691},[425,105776,1159],{"class":701},[425,105778,1804],{"class":691},[425,105780,31541],{"class":701},[425,105782,105783],{"class":427,"line":3621},[425,105784,102271],{"class":701},[425,105786,105787],{"class":427,"line":8948},[425,105788,3400],{"emptyLinePlaceholder":1084},[425,105790,105791,105793,105796],{"class":427,"line":8972},[425,105792,105754],{"class":701},[425,105794,105795],{"class":435},"\"after 50 steps\"",[425,105797,105760],{"class":701},[425,105799,105800],{"class":427,"line":8977},[425,105801,3400],{"emptyLinePlaceholder":1084},[425,105803,105804],{"class":427,"line":8983},[425,105805,105806],{"class":701},"    mujoco.mj_resetData(model, data)\n",[425,105808,105809,105811,105814],{"class":427,"line":9010},[425,105810,105754],{"class":701},[425,105812,105813],{"class":435},"\"after reset\"",[425,105815,105760],{"class":701},[425,105817,105818],{"class":427,"line":9015},[425,105819,3400],{"emptyLinePlaceholder":1084},[425,105821,105822,105825,105827,105829,105831],{"class":427,"line":9021},[425,105823,105824],{"class":701},"    data.qpos[",[425,105826,1235],{"class":691},[425,105828,5443],{"class":701},[425,105830,1204],{"class":1155},[425,105832,105463],{"class":691},[425,105834,105835],{"class":427,"line":9033},[425,105836,105837],{"class":701},"    mujoco.mj_forward(model, data)\n",[425,105839,105840,105842,105845],{"class":427,"line":9045},[425,105841,105754],{"class":701},[425,105843,105844],{"class":435},"\"after manual qpos edit\"",[425,105846,105760],{"class":701},[425,105848,105849],{"class":427,"line":9057},[425,105850,3400],{"emptyLinePlaceholder":1084},[425,105852,105853],{"class":427,"line":10715},[425,105854,3400],{"emptyLinePlaceholder":1084},[425,105856,105857,105859,105861,105863,105865],{"class":427,"line":10740},[425,105858,2544],{"class":1155},[425,105860,31975],{"class":691},[425,105862,102314],{"class":1155},[425,105864,102317],{"class":435},[425,105866,4739],{"class":701},[425,105868,105869],{"class":427,"line":10763},[425,105870,102324],{"class":701},[19,105872,104325],{},[416,105874,105876],{"className":418,"code":105875,"language":420,"meta":395,"style":395},"touch ch3_python_state.py\n",[422,105877,105878],{"__ignoreMap":395},[425,105879,105880,105882],{"class":427,"line":428},[425,105881,102038],{"class":431},[425,105883,105884],{"class":435}," ch3_python_state.py\n",[19,105886,103056],{},[416,105888,105890],{"className":418,"code":105889,"language":420,"meta":395,"style":395},"python ch3_python_state.py\n",[422,105891,105892],{"__ignoreMap":395},[425,105893,105894,105896],{"class":427,"line":428},[425,105895,31135],{"class":431},[425,105897,105884],{"class":435},[14,105899,102327],{"id":102327},[19,105901,105902],{},"打印状态的函数：",[416,105904,105906],{"className":31133,"code":105905,"language":31135,"meta":395,"style":395},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[422,105907,105908],{"__ignoreMap":395},[425,105909,105910,105912,105914,105916,105918,105920,105922],{"class":427,"line":428},[425,105911,32702],{"class":1155},[425,105913,105631],{"class":431},[425,105915,105634],{"class":701},[425,105917,2316],{"class":691},[425,105919,105639],{"class":701},[425,105921,96441],{"class":691},[425,105923,4739],{"class":701},[19,105925,105926,105927,105929],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[422,105928,34156],{}," 里发生了什么。",[19,105931,105932],{},"推进 50 步：",[416,105934,105936],{"className":31133,"code":105935,"language":31135,"meta":395,"style":395},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[422,105937,105938,105954],{"__ignoreMap":395},[425,105939,105940,105942,105944,105946,105948,105950,105952],{"class":427,"line":428},[425,105941,4025],{"class":1155},[425,105943,102256],{"class":701},[425,105945,27034],{"class":1155},[425,105947,33198],{"class":691},[425,105949,1159],{"class":701},[425,105951,1804],{"class":691},[425,105953,31541],{"class":701},[425,105955,105956],{"class":427,"line":698},[425,105957,102454],{"class":701},[19,105959,105960,105961,105964,105965,105967],{},"由于 ",[422,105962,105963],{},"timestep=0.01","，所以 50 步后时间约为 ",[422,105966,36084],{}," 秒。",[19,105969,105970],{},"重置：",[416,105972,105973],{"className":31133,"code":105281,"language":31135,"meta":395,"style":395},[422,105974,105975],{"__ignoreMap":395},[425,105976,105977],{"class":427,"line":428},[425,105978,105281],{"class":701},[19,105980,105981],{},"这会把时间、位置、速度恢复到初始状态。",[19,105983,105984],{},"手动改高度：",[416,105986,105988],{"className":31133,"code":105987,"language":31135,"meta":395,"style":395},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[422,105989,105990,106002],{"__ignoreMap":395},[425,105991,105992,105994,105996,105998,106000],{"class":427,"line":428},[425,105993,105454],{"class":701},[425,105995,1235],{"class":691},[425,105997,5443],{"class":701},[425,105999,1204],{"class":1155},[425,106001,105463],{"class":691},[425,106003,106004],{"class":427,"line":698},[425,106005,105298],{"class":701},[19,106007,106008,106009,106012,106013,106016],{},"这个例子里 ",[422,106010,106011],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[422,106014,106015],{},"2.0"," 表示把小球放到更高的位置。",[14,106018,102463],{"id":102463},[416,106020,106021],{"className":31133,"code":105905,"language":31135,"meta":395,"style":395},[422,106022,106023],{"__ignoreMap":395},[425,106024,106025,106027,106029,106031,106033,106035,106037],{"class":427,"line":428},[425,106026,32702],{"class":1155},[425,106028,105631],{"class":431},[425,106030,105634],{"class":701},[425,106032,2316],{"class":691},[425,106034,105639],{"class":701},[425,106036,96441],{"class":691},[425,106038,4739],{"class":701},[19,106040,106041],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[972,106043,106044,106053,106058],{},[450,106045,106046,106049,106050,106052],{},[422,106047,106048],{},"prefix","：一段文字，比如 ",[422,106051,105757],{},"，用来说明现在打印的是哪个阶段。",[450,106054,106055,106057],{},[422,106056,102840],{},"：MuJoCo 模型。",[450,106059,106060,106062],{},[422,106061,34156],{},"：MuJoCo 当前状态。",[19,106064,106065,1362,106068,106071],{},[422,106066,106067],{},"prefix: str",[422,106069,106070],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[416,106073,106075],{"className":31133,"code":106074,"language":31135,"meta":395,"style":395},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[422,106076,106077],{"__ignoreMap":395},[425,106078,106079,106081,106083,106085,106087,106089],{"class":427,"line":428},[425,106080,31170],{"class":691},[425,106082,1159],{"class":701},[425,106084,105682],{"class":435},[425,106086,105685],{"class":701},[425,106088,1442],{"class":691},[425,106090,31252],{"class":701},[19,106092,106093,106096],{},[422,106094,106095],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[416,106098,106100],{"className":31133,"code":106099,"language":31135,"meta":395,"style":395},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[422,106101,106102,106114],{"__ignoreMap":395},[425,106103,106104,106106,106108,106110,106112],{"class":427,"line":428},[425,106105,102389],{"class":701},[425,106107,1204],{"class":1155},[425,106109,102167],{"class":701},[425,106111,102069],{"class":691},[425,106113,1165],{"class":701},[425,106115,106116,106118,106120],{"class":427,"line":698},[425,106117,102413],{"class":701},[425,106119,1204],{"class":1155},[425,106121,102181],{"class":701},[19,106123,106124],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[416,106126,106128],{"className":31133,"code":106127,"language":31135,"meta":395,"style":395},"print_state(\"initial\", model, data)\n",[422,106129,106130],{"__ignoreMap":395},[425,106131,106132,106135,106137],{"class":427,"line":428},[425,106133,106134],{"class":701},"print_state(",[425,106136,105757],{"class":435},[425,106138,105760],{"class":701},[19,106140,106141,106142,106145],{},"调用刚才定义的 ",[422,106143,106144],{},"print_state"," 函数，打印初始状态。",[416,106147,106148],{"className":31133,"code":105935,"language":31135,"meta":395,"style":395},[422,106149,106150,106166],{"__ignoreMap":395},[425,106151,106152,106154,106156,106158,106160,106162,106164],{"class":427,"line":428},[425,106153,4025],{"class":1155},[425,106155,102256],{"class":701},[425,106157,27034],{"class":1155},[425,106159,33198],{"class":691},[425,106161,1159],{"class":701},[425,106163,1804],{"class":691},[425,106165,31541],{"class":701},[425,106167,106168],{"class":427,"line":698},[425,106169,102454],{"class":701},[19,106171,106172],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[416,106174,106175],{"className":31133,"code":105281,"language":31135,"meta":395,"style":395},[422,106176,106177],{"__ignoreMap":395},[425,106178,106179],{"class":427,"line":428},[425,106180,105281],{"class":701},[19,106182,106183,106184,106186,106187,106189],{},"重置 ",[422,106185,34156],{},"。注意它不会重新创建 ",[422,106188,102840],{},"，因为模型结构没有变，只是状态回到初始值。",[416,106191,106192],{"className":31133,"code":105447,"language":31135,"meta":395,"style":395},[422,106193,106194],{"__ignoreMap":395},[425,106195,106196,106198,106200,106202,106204],{"class":427,"line":428},[425,106197,105454],{"class":701},[425,106199,1235],{"class":691},[425,106201,5443],{"class":701},[425,106203,1204],{"class":1155},[425,106205,105463],{"class":691},[19,106207,106208,106209,1362,106212,1362,106215,106217],{},"这行是“手动改状态”。在 freejoint 中，",[422,106210,106211],{},"qpos[0]",[422,106213,106214],{},"qpos[1]",[422,106216,106011],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[416,106219,106220],{"className":31133,"code":105298,"language":31135,"meta":395,"style":395},[422,106221,106222],{"__ignoreMap":395},[425,106223,106224],{"class":427,"line":428},[425,106225,105298],{"class":701},[19,106227,106228,106229,106231,106232,106234],{},"手动改完 ",[422,106230,104785],{}," 后，调用 ",[422,106233,105005],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[1099,106236,103071],{"id":103070},[19,106238,106239],{},"你会看到:",[972,106241,106242,106247,106252,106255],{},[450,106243,106244,106245],{},"初始时间为 ",[422,106246,1341],{},[450,106248,106249,106250],{},"50 步后时间约为 ",[422,106251,36084],{},[450,106253,106254],{},"reset 后状态恢复",[450,106256,106257,106258,106261,106262],{},"手动修改 ",[422,106259,106260],{},"data.qpos[2]"," 后，小球高度变为 ",[422,106263,106015],{},[19,106265,106266,106268],{},[422,106267,106011],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,106270,106271],{},"输出里可以重点看三件事：",[972,106273,106274,106282,106287],{},[450,106275,106276,106278,106279,106281],{},[422,106277,3387],{}," 是否随着 ",[422,106280,101970],{}," 增加。",[450,106283,106284,106286],{},[422,106285,104785],{}," 的 z 坐标是否因为下落而变化。",[450,106288,106289,106291,106292,998],{},[422,106290,105107],{}," 后时间是否回到 ",[422,106293,1341],{},[1099,106295,103103],{"id":103102},[972,106297,106298,106304,106310,106316,106319,106328],{},[450,106299,106300,106301,998],{},"修改 timestep 为 ",[422,106302,106303],{},"0.005",[450,106305,106306,106307,998],{},"重新运行，检查 50 步后时间是否约为 ",[422,106308,106309],{},"0.25",[450,106311,106312,106313,998],{},"修改重力为 ",[422,106314,106315],{},"0 0 -1.0",[450,106317,106318],{},"观察小球下降速度是否变慢。",[450,106320,103166,106321,103169,106324,106327],{},[422,106322,106323],{},"data.qpos[2] = 2.0",[422,106325,106326],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[450,106329,106330,106331,106334],{},"注释掉 ",[422,106332,106333],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[1099,106336,103208],{"id":103207},[14,106338,106340,106341,106343],{"id":106339},"修改-dataqpos-后位置没有更新","修改 ",[422,106342,101825],{}," 后位置没有更新",[19,106345,103217],{},[416,106347,106348],{"className":31133,"code":105298,"language":31135,"meta":395,"style":395},[422,106349,106350],{"__ignoreMap":395},[425,106351,106352],{"class":427,"line":428},[425,106353,105298],{"class":701},[14,106355,106356],{"id":106356},"数组维度看不懂",[19,106358,106359],{},"打印模型维度:",[416,106361,106363],{"className":31133,"code":106362,"language":31135,"meta":395,"style":395},"print(model.nq, model.nv, model.nu)\n",[422,106364,106365],{"__ignoreMap":395},[425,106366,106367,106369],{"class":427,"line":428},[425,106368,31170],{"class":691},[425,106370,106371],{"class":701},"(model.nq, model.nv, model.nu)\n",[35,106373,106374,106382],{},[38,106375,106376],{},[41,106377,106378,106380],{},[44,106379,105329],{"align":46},[44,106381,101455],{"align":46},[55,106383,106384,106394,106404],{},[41,106385,106386,106391],{},[60,106387,106388],{"align":46},[422,106389,106390],{},"nq",[60,106392,106393],{"align":46},"位置变量数量",[41,106395,106396,106401],{},[60,106397,106398],{"align":46},[422,106399,106400],{},"nv",[60,106402,106403],{"align":46},"速度变量数量",[41,106405,106406,106410],{},[60,106407,106408],{"align":46},[422,106409,102917],{},[60,106411,106412],{"align":46},"控制输入数量",[14,106414,106416,106417,106419],{"id":106415},"误以为-qpos-一定等于关节数","误以为 ",[422,106418,104785],{}," 一定等于关节数",[19,106421,106422,106423,83285,106425,106427,106428,106430],{},"不是。例如 ",[422,106424,102375],{},[422,106426,104785],{}," 是 7 维，但 ",[422,106429,105115],{}," 是 6 维。",[14,106432,106434,106435,106437],{"id":106433},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[422,106436,104785],{}," 的第几位",[19,106439,106440],{},"初学时可以先打印：",[416,106442,106444],{"className":31133,"code":106443,"language":31135,"meta":395,"style":395},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[422,106445,106446,106456,106466,106478],{"__ignoreMap":395},[425,106447,106448,106450,106452,106454],{"class":427,"line":428},[425,106449,31170],{"class":691},[425,106451,1159],{"class":701},[425,106453,102194],{"class":435},[425,106455,102197],{"class":701},[425,106457,106458,106460,106462,106464],{"class":427,"line":698},[425,106459,31170],{"class":691},[425,106461,1159],{"class":701},[425,106463,102206],{"class":435},[425,106465,102209],{"class":701},[425,106467,106468,106470,106472,106475],{"class":427,"line":710},[425,106469,31170],{"class":691},[425,106471,1159],{"class":701},[425,106473,106474],{"class":435},"\"qpos:\"",[425,106476,106477],{"class":701},", data.qpos)\n",[425,106479,106480,106482,106484,106487],{"class":427,"line":721},[425,106481,31170],{"class":691},[425,106483,1159],{"class":701},[425,106485,106486],{"class":435},"\"qvel:\"",[425,106488,106489],{"class":701},", data.qvel)\n",[19,106491,106492],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[14,106494,106495],{"id":106495},"仿真结果每次都一样",[19,106497,106498,106499,106501],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[422,106500,104785],{},"、目标点或控制输入。",[1099,106503,103362],{"id":103361},[19,106505,106506,106507,25611],{},"Python 控制 MuJoCo 的核心就是读写 ",[422,106508,34156],{},[972,106510,106511,106519,106524,106529],{},[450,106512,106513,106514,101773,106516,106518],{},"用 ",[422,106515,101825],{},[422,106517,101828],{}," 读取状态。",[450,106520,106513,106521,106523],{},[422,106522,101831],{}," 写入控制。",[450,106525,106513,106526,106528],{},[422,106527,101970],{}," 推进时间。",[450,106530,106531,106532,106534],{},"手动改状态后用 ",[422,106533,105005],{}," 刷新派生量。",[19,106536,106537],{},"理解这一章后，就可以进入关节和 actuator 控制。",[1074,106539,106540],{},"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":395,"searchDepth":698,"depth":698,"links":106542},[106543,106544,106545,106552,106556,106557,106558,106568],{"id":101401,"depth":698,"text":101402},{"id":101524,"depth":698,"text":101525},{"id":101799,"depth":698,"text":101800,"children":106546},[106547,106549,106551],{"id":105310,"depth":710,"text":106548},"qpos、qvel、ctrl 是什么",{"id":105388,"depth":710,"text":106550},"mj_step 和 mj_forward 的区别",{"id":105477,"depth":710,"text":105478},{"id":102007,"depth":698,"text":102008,"children":106553},[106554,106555],{"id":102327,"depth":710,"text":102327},{"id":102463,"depth":710,"text":102463},{"id":103070,"depth":698,"text":103071},{"id":103102,"depth":698,"text":103103},{"id":103207,"depth":698,"text":103208,"children":106559},[106560,106562,106563,106565,106567],{"id":106339,"depth":710,"text":106561},"修改 data.qpos 后位置没有更新",{"id":106356,"depth":710,"text":106356},{"id":106415,"depth":710,"text":106564},"误以为 qpos 一定等于关节数",{"id":106433,"depth":710,"text":106566},"不知道某个元素在 qpos 的第几位",{"id":106495,"depth":710,"text":106495},{"id":103361,"depth":698,"text":103362},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":105073,"description":395},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106575,"title":106576,"body":106577,"description":395,"extension":1082,"meta":108267,"navigation":1084,"path":108268,"seo":108269,"stem":108270,"__hash__":108271},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106578,"toc":108243},[106579,106582,106584,106587,106589,106614,106617,106636,106639,106641,106643,106667,106669,106683,106685,106726,106728,106752,106754,106757,106791,106793,106806,106809,106877,106886,106890,106893,106927,106933,106936,106940,106979,106982,107002,107006,107049,107051,107080,107083,107089,107092,107094,107488,107490,107502,107504,107515,107517,107520,107549,107557,107560,107595,107598,107600,107608,107611,107613,107624,107634,107654,107657,107693,107705,107753,107772,107814,107827,107855,107860,107881,107891,107909,107912,107946,107949,107969,107972,107991,107997,107999,108002,108008,108014,108024,108027,108033,108042,108044,108090,108092,108098,108104,108107,108110,108130,108133,108139,108145,108147,108170,108173,108176,108185,108188,108226,108228,108231,108237,108240],[10,106580,106576],{"id":106581},"_4关节actuator-与力控制",[1099,106583,101402],{"id":101401},[19,106585,106586],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,106588,105086],{},[972,106590,106591,106597,106602,106606,106611],{},[450,106592,106593,106596],{},[422,106594,106595],{},"hinge"," 关节",[450,106598,106599],{},[422,106600,106601],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[450,106603,106604],{},[422,106605,101831],{},[450,106607,106608],{},[422,106609,106610],{},"ctrlrange",[450,106612,106613],{},"读取关节角和角速度",[19,106615,106616],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[416,106618,106620],{"className":31133,"code":106619,"language":31135,"meta":395,"style":395},"data.ctrl[0] = ...\n",[422,106621,106622],{"__ignoreMap":395},[425,106623,106624,106627,106629,106631,106633],{"class":427,"line":428},[425,106625,106626],{"class":701},"data.ctrl[",[425,106628,1341],{"class":691},[425,106630,5443],{"class":701},[425,106632,1204],{"class":1155},[425,106634,106635],{"class":691}," ...\n",[19,106637,106638],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[1099,106640,101525],{"id":101524},[19,106642,101528],{},[416,106644,106645],{"className":418,"code":105143,"language":420,"meta":395,"style":395},[422,106646,106647],{"__ignoreMap":395},[425,106648,106649,106651,106653,106655,106657,106659,106661,106663,106665],{"class":427,"line":428},[425,106650,652],{"class":431},[425,106652,27305],{"class":435},[425,106654,24828],{"class":435},[425,106656,27389],{"class":691},[425,106658,105158],{"class":435},[425,106660,101553],{"class":435},[425,106662,103256],{"class":435},[425,106664,101569],{"class":435},[425,106666,105167],{"class":435},[19,106668,103574],{},[416,106670,106671],{"className":418,"code":101674,"language":420,"meta":395,"style":395},[422,106672,106673],{"__ignoreMap":395},[425,106674,106675,106677,106679,106681],{"class":427,"line":428},[425,106676,24825],{"class":431},[425,106678,24828],{"class":435},[425,106680,101685],{"class":435},[425,106682,101688],{"class":435},[19,106684,103591],{},[416,106686,106688],{"className":418,"code":106687,"language":420,"meta":395,"style":395},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[422,106689,106690,106707,106716],{"__ignoreMap":395},[425,106691,106692,106694,106696,106698,106701,106703,106705],{"class":427,"line":428},[425,106693,31085],{"class":431},[425,106695,29931],{"class":435},[425,106697,26106],{"class":691},[425,106699,106700],{"class":435}," mujoco-control",[425,106702,101730],{"class":435},[425,106704,101733],{"class":691},[425,106706,101736],{"class":691},[425,106708,106709,106711,106713],{"class":427,"line":698},[425,106710,31085],{"class":431},[425,106712,101743],{"class":435},[425,106714,106715],{"class":435}," mujoco-control\n",[425,106717,106718,106720,106722,106724],{"class":427,"line":710},[425,106719,24825],{"class":431},[425,106721,24828],{"class":435},[425,106723,101685],{"class":435},[425,106725,101688],{"class":435},[19,106727,101759],{},[972,106729,106730,106736,106743,106749],{},[450,106731,106732,106735],{},[422,106733,106734],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[450,106737,106738,106740,106741,998],{},[422,106739,101831],{}," 长度等于 ",[422,106742,102913],{},[450,106744,82977,106745,106748],{},[422,106746,106747],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[450,106750,106751],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[1099,106753,101800],{"id":101799},[19,106755,106756],{},"关节决定 body 如何运动:",[416,106758,106760],{"className":53822,"code":106759,"language":53824,"meta":395,"style":395},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[422,106761,106762],{"__ignoreMap":395},[425,106763,106764,106766,106768,106770,106772,106775,106777,106779,106781,106784,106786,106789],{"class":427,"line":428},[425,106765,2057],{"class":701},[425,106767,103711],{"class":52055},[425,106769,15917],{"class":431},[425,106771,1204],{"class":701},[425,106773,106774],{"class":435},"\"hinge\"",[425,106776,54579],{"class":431},[425,106778,1204],{"class":701},[425,106780,106774],{"class":435},[425,106782,106783],{"class":431}," axis",[425,106785,1204],{"class":701},[425,106787,106788],{"class":435},"\"0 1 0\"",[425,106790,101899],{"class":701},[19,106792,103807],{},[972,106794,106795,106800,106803],{},[450,106796,106797,106798],{},"名字是 ",[422,106799,106595],{},[450,106801,106802],{},"类型是旋转关节",[450,106804,106805],{},"绕 y 轴旋转",[19,106807,106808],{},"actuator 决定如何施加控制:",[416,106810,106812],{"className":53822,"code":106811,"language":53824,"meta":395,"style":395},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[422,106813,106814,106823,106869],{"__ignoreMap":395},[425,106815,106816,106818,106821],{"class":427,"line":428},[425,106817,2057],{"class":701},[425,106819,106820],{"class":52055},"actuator",[425,106822,52062],{"class":701},[425,106824,106825,106827,106830,106832,106834,106837,106840,106842,106844,106847,106849,106851,106854,106856,106859,106862,106864,106867],{"class":427,"line":698},[425,106826,52899],{"class":701},[425,106828,106829],{"class":52055},"motor",[425,106831,15917],{"class":431},[425,106833,1204],{"class":701},[425,106835,106836],{"class":435},"\"hinge_motor\"",[425,106838,106839],{"class":431}," joint",[425,106841,1204],{"class":701},[425,106843,106774],{"class":435},[425,106845,106846],{"class":431}," gear",[425,106848,1204],{"class":701},[425,106850,4678],{"class":435},[425,106852,106853],{"class":431}," ctrlrange",[425,106855,1204],{"class":701},[425,106857,106858],{"class":435},"\"-2 2\"",[425,106860,106861],{"class":431}," ctrllimited",[425,106863,1204],{"class":701},[425,106865,106866],{"class":435},"\"true\"",[425,106868,101899],{"class":701},[425,106870,106871,106873,106875],{"class":427,"line":710},[425,106872,52540],{"class":701},[425,106874,106820],{"class":52055},[425,106876,52062],{"class":701},[19,106878,106879,106882,106883,998],{},[422,106880,106881],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[422,106884,106885],{},"[-2, 2]",[14,106887,106889],{"id":106888},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,106891,106892],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[35,106894,106895,106905],{},[38,106896,106897],{},[41,106898,106899,106901,106903],{},[44,106900,26744],{"align":46},[44,106902,103451],{"align":46},[44,106904,101489],{"align":46},[55,106906,106907,106917],{},[41,106908,106909,106911,106914],{},[60,106910,103711],{"align":46},[60,106912,106913],{"align":46},"定义能怎么动",[60,106915,106916],{"align":46},"门轴允许门旋转",[41,106918,106919,106921,106924],{},[60,106920,106820],{"align":46},[60,106922,106923],{"align":46},"定义怎么施力或控制",[60,106925,106926],{"align":46},"人推门、马达带动门",[19,106928,106929,106930,106932],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[422,106931,101831],{}," 主动控制它。",[19,106934,106935],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[14,106937,106939],{"id":106938},"hinge-joint","hinge joint",[416,106941,106943],{"className":53822,"code":106942,"language":53824,"meta":395,"style":395},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[422,106944,106945],{"__ignoreMap":395},[425,106946,106947,106949,106951,106953,106955,106957,106959,106961,106963,106965,106967,106969,106972,106974,106977],{"class":427,"line":428},[425,106948,2057],{"class":701},[425,106950,103711],{"class":52055},[425,106952,15917],{"class":431},[425,106954,1204],{"class":701},[425,106956,106774],{"class":435},[425,106958,54579],{"class":431},[425,106960,1204],{"class":701},[425,106962,106774],{"class":435},[425,106964,106783],{"class":431},[425,106966,1204],{"class":701},[425,106968,106788],{"class":435},[425,106970,106971],{"class":431}," damping",[425,106973,1204],{"class":701},[425,106975,106976],{"class":435},"\"0.1\"",[425,106978,101899],{"class":701},[19,106980,106981],{},"含义：",[972,106983,106984,106990,106996],{},[450,106985,106986,106989],{},[422,106987,106988],{},"type=\"hinge\"","：只能绕一个轴旋转。",[450,106991,106992,106995],{},[422,106993,106994],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[450,106997,106998,107001],{},[422,106999,107000],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[14,107003,107005],{"id":107004},"motor-actuator","motor actuator",[416,107007,107009],{"className":53822,"code":107008,"language":53824,"meta":395,"style":395},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[422,107010,107011],{"__ignoreMap":395},[425,107012,107013,107015,107017,107019,107021,107023,107025,107027,107029,107031,107033,107035,107037,107039,107041,107043,107045,107047],{"class":427,"line":428},[425,107014,2057],{"class":701},[425,107016,106829],{"class":52055},[425,107018,15917],{"class":431},[425,107020,1204],{"class":701},[425,107022,106836],{"class":435},[425,107024,106839],{"class":431},[425,107026,1204],{"class":701},[425,107028,106774],{"class":435},[425,107030,106846],{"class":431},[425,107032,1204],{"class":701},[425,107034,4678],{"class":435},[425,107036,106853],{"class":431},[425,107038,1204],{"class":701},[425,107040,106858],{"class":435},[425,107042,106861],{"class":431},[425,107044,1204],{"class":701},[425,107046,106866],{"class":435},[425,107048,101899],{"class":701},[19,107050,106981],{},[972,107052,107053,107062,107068,107074],{},[450,107054,107055,107058,107059,107061],{},[422,107056,107057],{},"joint=\"hinge\"","：这个电机作用在名为 ",[422,107060,106595],{}," 的关节上。",[450,107063,107064,107067],{},[422,107065,107066],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[450,107069,107070,107073],{},[422,107071,107072],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[450,107075,107076,107079],{},[422,107077,107078],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,107081,107082],{},"简单理解：",[416,107084,107087],{"className":107085,"code":107086,"language":6187,"meta":395},[6185],"实际施加效果 ≈ data.ctrl[0] * gear\n",[422,107088,107086],{"__ignoreMap":395},[19,107090,107091],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[1099,107093,102008],{"id":102007},[416,107095,107097],{"className":31133,"code":107096,"language":31135,"meta":395,"style":395},"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",[422,107098,107099,107106,107110,107116,107126,107130,107134,107142,107147,107152,107156,107160,107165,107170,107174,107179,107184,107189,107194,107198,107202,107206,107211,107216,107221,107225,107229,107233,107237,107249,107261,107269,107273,107283,107293,107303,107307,107320,107333,107337,107354,107368,107403,107407,107411,107422,107437,107452,107464,107468,107472,107484],{"__ignoreMap":395},[425,107100,107101,107103],{"class":427,"line":428},[425,107102,31147],{"class":1155},[425,107104,107105],{"class":701}," math\n",[425,107107,107108],{"class":427,"line":698},[425,107109,3400],{"emptyLinePlaceholder":1084},[425,107111,107112,107114],{"class":427,"line":710},[425,107113,31147],{"class":1155},[425,107115,102056],{"class":701},[425,107117,107118,107120,107122,107124],{"class":427,"line":721},[425,107119,31147],{"class":1155},[425,107121,32135],{"class":701},[425,107123,32138],{"class":1155},[425,107125,32141],{"class":701},[425,107127,107128],{"class":427,"line":735},[425,107129,3400],{"emptyLinePlaceholder":1084},[425,107131,107132],{"class":427,"line":743},[425,107133,3400],{"emptyLinePlaceholder":1084},[425,107135,107136,107138,107140],{"class":427,"line":751},[425,107137,102069],{"class":691},[425,107139,14563],{"class":1155},[425,107141,102074],{"class":435},[425,107143,107144],{"class":427,"line":759},[425,107145,107146],{"class":435},"\u003Cmujoco model=\"one_link_motor\">\n",[425,107148,107149],{"class":427,"line":770},[425,107150,107151],{"class":435},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[425,107153,107154],{"class":427,"line":780},[425,107155,3400],{"emptyLinePlaceholder":1084},[425,107157,107158],{"class":427,"line":790},[425,107159,102093],{"class":435},[425,107161,107162],{"class":427,"line":805},[425,107163,107164],{"class":435},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[425,107166,107167],{"class":427,"line":818},[425,107168,107169],{"class":435},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[425,107171,107172],{"class":427,"line":831},[425,107173,3400],{"emptyLinePlaceholder":1084},[425,107175,107176],{"class":427,"line":841},[425,107177,107178],{"class":435},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[425,107180,107181],{"class":427,"line":852},[425,107182,107183],{"class":435},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[425,107185,107186],{"class":427,"line":862},[425,107187,107188],{"class":435},"        \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",[425,107190,107191],{"class":427,"line":878},[425,107192,107193],{"class":435},"      \u003C\u002Fbody>\n",[425,107195,107196],{"class":427,"line":914},[425,107197,102122],{"class":435},[425,107199,107200],{"class":427,"line":943},[425,107201,102127],{"class":435},[425,107203,107204],{"class":427,"line":956},[425,107205,3400],{"emptyLinePlaceholder":1084},[425,107207,107208],{"class":427,"line":964},[425,107209,107210],{"class":435},"  \u003Cactuator>\n",[425,107212,107213],{"class":427,"line":2733},[425,107214,107215],{"class":435},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[425,107217,107218],{"class":427,"line":2750},[425,107219,107220],{"class":435},"  \u003C\u002Factuator>\n",[425,107222,107223],{"class":427,"line":2755},[425,107224,102132],{"class":435},[425,107226,107227],{"class":427,"line":2760},[425,107228,96453],{"class":435},[425,107230,107231],{"class":427,"line":2765},[425,107232,3400],{"emptyLinePlaceholder":1084},[425,107234,107235],{"class":427,"line":2779},[425,107236,3400],{"emptyLinePlaceholder":1084},[425,107238,107239,107241,107243,107245,107247],{"class":427,"line":2784},[425,107240,32702],{"class":1155},[425,107242,2973],{"class":431},[425,107244,102153],{"class":701},[425,107246,96441],{"class":691},[425,107248,4739],{"class":701},[425,107250,107251,107253,107255,107257,107259],{"class":427,"line":3577},[425,107252,102162],{"class":701},[425,107254,1204],{"class":1155},[425,107256,102167],{"class":701},[425,107258,102069],{"class":691},[425,107260,1165],{"class":701},[425,107262,107263,107265,107267],{"class":427,"line":3591},[425,107264,102176],{"class":701},[425,107266,1204],{"class":1155},[425,107268,102181],{"class":701},[425,107270,107271],{"class":427,"line":3599},[425,107272,3400],{"emptyLinePlaceholder":1084},[425,107274,107275,107277,107279,107281],{"class":427,"line":3604},[425,107276,32054],{"class":691},[425,107278,1159],{"class":701},[425,107280,102194],{"class":435},[425,107282,102197],{"class":701},[425,107284,107285,107287,107289,107291],{"class":427,"line":3610},[425,107286,32054],{"class":691},[425,107288,1159],{"class":701},[425,107290,102206],{"class":435},[425,107292,102209],{"class":701},[425,107294,107295,107297,107299,107301],{"class":427,"line":3616},[425,107296,32054],{"class":691},[425,107298,1159],{"class":701},[425,107300,102218],{"class":435},[425,107302,102221],{"class":701},[425,107304,107305],{"class":427,"line":3621},[425,107306,3400],{"emptyLinePlaceholder":1084},[425,107308,107309,107311,107314,107316,107318],{"class":427,"line":8948},[425,107310,4101],{"class":1155},[425,107312,107313],{"class":701}," model.nu ",[425,107315,21945],{"class":1155},[425,107317,26109],{"class":691},[425,107319,4739],{"class":701},[425,107321,107322,107324,107326,107328,107331],{"class":427,"line":8972},[425,107323,104187],{"class":1155},[425,107325,104190],{"class":691},[425,107327,1159],{"class":701},[425,107329,107330],{"class":435},"\"expected exactly one actuator\"",[425,107332,1165],{"class":701},[425,107334,107335],{"class":427,"line":8977},[425,107336,3400],{"emptyLinePlaceholder":1084},[425,107338,107339,107341,107343,107345,107347,107349,107352],{"class":427,"line":8983},[425,107340,4201],{"class":1155},[425,107342,32371],{"class":701},[425,107344,27034],{"class":1155},[425,107346,33198],{"class":691},[425,107348,1159],{"class":701},[425,107350,107351],{"class":691},"2000",[425,107353,31541],{"class":701},[425,107355,107356,107359,107361,107363,107365],{"class":427,"line":9010},[425,107357,107358],{"class":701},"        t ",[425,107360,1204],{"class":1155},[425,107362,32371],{"class":701},[425,107364,1603],{"class":1155},[425,107366,107367],{"class":701}," model.opt.timestep\n",[425,107369,107370,107373,107375,107377,107379,107382,107384,107387,107389,107391,107394,107396,107398,107400],{"class":427,"line":9015},[425,107371,107372],{"class":701},"        data.ctrl[",[425,107374,1341],{"class":691},[425,107376,5443],{"class":701},[425,107378,1204],{"class":1155},[425,107380,107381],{"class":691}," 1.5",[425,107383,7518],{"class":1155},[425,107385,107386],{"class":701}," math.sin(",[425,107388,106015],{"class":691},[425,107390,7518],{"class":1155},[425,107392,107393],{"class":701}," math.pi ",[425,107395,1603],{"class":1155},[425,107397,62622],{"class":691},[425,107399,7518],{"class":1155},[425,107401,107402],{"class":701}," t)\n",[425,107404,107405],{"class":427,"line":9021},[425,107406,102271],{"class":701},[425,107408,107409],{"class":427,"line":9033},[425,107410,3400],{"emptyLinePlaceholder":1084},[425,107412,107413,107415,107417,107420],{"class":427,"line":9045},[425,107414,32054],{"class":691},[425,107416,1159],{"class":701},[425,107418,107419],{"class":435},"\"time:\"",[425,107421,102233],{"class":701},[425,107423,107424,107426,107428,107431,107433,107435],{"class":427,"line":9057},[425,107425,32054],{"class":691},[425,107427,1159],{"class":701},[425,107429,107430],{"class":435},"\"joint qpos:\"",[425,107432,105685],{"class":701},[425,107434,1442],{"class":691},[425,107436,31252],{"class":701},[425,107438,107439,107441,107443,107446,107448,107450],{"class":427,"line":10715},[425,107440,32054],{"class":691},[425,107442,1159],{"class":701},[425,107444,107445],{"class":435},"\"joint qvel:\"",[425,107447,105701],{"class":701},[425,107449,1442],{"class":691},[425,107451,31252],{"class":701},[425,107453,107454,107456,107458,107461],{"class":427,"line":10740},[425,107455,32054],{"class":691},[425,107457,1159],{"class":701},[425,107459,107460],{"class":435},"\"last ctrl:\"",[425,107462,107463],{"class":701},", data.ctrl.copy())\n",[425,107465,107466],{"class":427,"line":10763},[425,107467,3400],{"emptyLinePlaceholder":1084},[425,107469,107470],{"class":427,"line":10787},[425,107471,3400],{"emptyLinePlaceholder":1084},[425,107473,107474,107476,107478,107480,107482],{"class":427,"line":10792},[425,107475,2544],{"class":1155},[425,107477,31975],{"class":691},[425,107479,102314],{"class":1155},[425,107481,102317],{"class":435},[425,107483,4739],{"class":701},[425,107485,107486],{"class":427,"line":10797},[425,107487,102324],{"class":701},[19,107489,104325],{},[416,107491,107493],{"className":418,"code":107492,"language":420,"meta":395,"style":395},"touch ch4_joint_motor.py\n",[422,107494,107495],{"__ignoreMap":395},[425,107496,107497,107499],{"class":427,"line":428},[425,107498,102038],{"class":431},[425,107500,107501],{"class":435}," ch4_joint_motor.py\n",[19,107503,103056],{},[416,107505,107507],{"className":418,"code":107506,"language":420,"meta":395,"style":395},"python ch4_joint_motor.py\n",[422,107508,107509],{"__ignoreMap":395},[425,107510,107511,107513],{"class":427,"line":428},[425,107512,31135],{"class":431},[425,107514,107501],{"class":435},[14,107516,102327],{"id":102327},[19,107518,107519],{},"检查 actuator 数量：",[416,107521,107523],{"className":31133,"code":107522,"language":31135,"meta":395,"style":395},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[422,107524,107525,107537],{"__ignoreMap":395},[425,107526,107527,107529,107531,107533,107535],{"class":427,"line":428},[425,107528,2544],{"class":1155},[425,107530,107313],{"class":701},[425,107532,21945],{"class":1155},[425,107534,26109],{"class":691},[425,107536,4739],{"class":701},[425,107538,107539,107541,107543,107545,107547],{"class":427,"line":698},[425,107540,104650],{"class":1155},[425,107542,104190],{"class":691},[425,107544,1159],{"class":701},[425,107546,107330],{"class":435},[425,107548,1165],{"class":701},[19,107550,107551,107553,107554,107556],{},[422,107552,102913],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[422,107555,101831],{}," 长度应该是 1。",[19,107558,107559],{},"产生正弦控制信号：",[416,107561,107563],{"className":31133,"code":107562,"language":31135,"meta":395,"style":395},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[422,107564,107565],{"__ignoreMap":395},[425,107566,107567,107569,107571,107573,107575,107577,107579,107581,107583,107585,107587,107589,107591,107593],{"class":427,"line":428},[425,107568,106626],{"class":701},[425,107570,1341],{"class":691},[425,107572,5443],{"class":701},[425,107574,1204],{"class":1155},[425,107576,107381],{"class":691},[425,107578,7518],{"class":1155},[425,107580,107386],{"class":701},[425,107582,106015],{"class":691},[425,107584,7518],{"class":1155},[425,107586,107393],{"class":701},[425,107588,1603],{"class":1155},[425,107590,62622],{"class":691},[425,107592,7518],{"class":1155},[425,107594,107402],{"class":701},[19,107596,107597],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,107599,102428],{},[416,107601,107602],{"className":31133,"code":105260,"language":31135,"meta":395,"style":395},[422,107603,107604],{"__ignoreMap":395},[425,107605,107606],{"class":427,"line":428},[425,107607,105260],{"class":701},[19,107609,107610],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[14,107612,102463],{"id":102463},[416,107614,107616],{"className":31133,"code":107615,"language":31135,"meta":395,"style":395},"import math\n",[422,107617,107618],{"__ignoreMap":395},[425,107619,107620,107622],{"class":427,"line":428},[425,107621,31147],{"class":1155},[425,107623,107105],{"class":701},[19,107625,107626,107627,101773,107630,107633],{},"导入 Python 标准库里的数学模块。后面要用 ",[422,107628,107629],{},"math.sin",[422,107631,107632],{},"math.pi"," 生成周期变化的控制信号。",[416,107635,107636],{"className":31133,"code":104441,"language":31135,"meta":395,"style":395},[422,107637,107638,107644],{"__ignoreMap":395},[425,107639,107640,107642],{"class":427,"line":428},[425,107641,31147],{"class":1155},[425,107643,102056],{"class":701},[425,107645,107646,107648,107650,107652],{"class":427,"line":698},[425,107647,31147],{"class":1155},[425,107649,32135],{"class":701},[425,107651,32138],{"class":1155},[425,107653,32141],{"class":701},[19,107655,107656],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[416,107658,107659],{"className":53822,"code":106942,"language":53824,"meta":395,"style":395},[422,107660,107661],{"__ignoreMap":395},[425,107662,107663,107665,107667,107669,107671,107673,107675,107677,107679,107681,107683,107685,107687,107689,107691],{"class":427,"line":428},[425,107664,2057],{"class":701},[425,107666,103711],{"class":52055},[425,107668,15917],{"class":431},[425,107670,1204],{"class":701},[425,107672,106774],{"class":435},[425,107674,54579],{"class":431},[425,107676,1204],{"class":701},[425,107678,106774],{"class":435},[425,107680,106783],{"class":431},[425,107682,1204],{"class":701},[425,107684,106788],{"class":435},[425,107686,106971],{"class":431},[425,107688,1204],{"class":701},[425,107690,106976],{"class":435},[425,107692,101899],{"class":701},[19,107694,107695,107696,107698,107699,107701,107702,107704],{},"这行定义关节。",[422,107697,106595],{}," 表示旋转关节。",[422,107700,106994],{}," 表示绕 y 轴旋转。",[422,107703,107000],{}," 表示有一点阻尼，运动不会完全无损耗。",[416,107706,107708],{"className":53822,"code":107707,"language":53824,"meta":395,"style":395},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[422,107709,107710],{"__ignoreMap":395},[425,107711,107712,107714,107716,107718,107720,107723,107725,107727,107730,107733,107735,107738,107740,107742,107744,107746,107748,107751],{"class":427,"line":428},[425,107713,2057],{"class":701},[425,107715,101875],{"class":52055},[425,107717,15917],{"class":431},[425,107719,1204],{"class":701},[425,107721,107722],{"class":435},"\"link_geom\"",[425,107724,54579],{"class":431},[425,107726,1204],{"class":701},[425,107728,107729],{"class":435},"\"capsule\"",[425,107731,107732],{"class":431}," fromto",[425,107734,1204],{"class":701},[425,107736,107737],{"class":435},"\"0 0 0 0 0 0.5\"",[425,107739,101891],{"class":431},[425,107741,1204],{"class":701},[425,107743,104533],{"class":435},[425,107745,102756],{"class":431},[425,107747,1204],{"class":701},[425,107749,107750],{"class":435},"\"0.5\"",[425,107752,101899],{"class":701},[19,107754,107755,107756,107758,107759,107761,107762,107765,107766,998,107769,107771],{},"这行定义摆杆的形状。",[422,107757,103920],{}," 是胶囊体，适合表示杆子。",[422,107760,103931],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[422,107763,107764],{},"(0,0,0)"," 延伸到 ",[422,107767,107768],{},"(0,0,0.5)",[422,107770,103925],{}," 是半径。",[416,107773,107774],{"className":53822,"code":107008,"language":53824,"meta":395,"style":395},[422,107775,107776],{"__ignoreMap":395},[425,107777,107778,107780,107782,107784,107786,107788,107790,107792,107794,107796,107798,107800,107802,107804,107806,107808,107810,107812],{"class":427,"line":428},[425,107779,2057],{"class":701},[425,107781,106829],{"class":52055},[425,107783,15917],{"class":431},[425,107785,1204],{"class":701},[425,107787,106836],{"class":435},[425,107789,106839],{"class":431},[425,107791,1204],{"class":701},[425,107793,106774],{"class":435},[425,107795,106846],{"class":431},[425,107797,1204],{"class":701},[425,107799,4678],{"class":435},[425,107801,106853],{"class":431},[425,107803,1204],{"class":701},[425,107805,106858],{"class":435},[425,107807,106861],{"class":431},[425,107809,1204],{"class":701},[425,107811,106866],{"class":435},[425,107813,101899],{"class":701},[19,107815,107816,107817,107819,107820,107823,107824,107826],{},"这行定义电机。它作用在 ",[422,107818,106595],{}," 关节上。",[422,107821,107822],{},"gear"," 可以理解成放大倍数。",[422,107825,106610],{}," 限制控制输入范围。",[416,107828,107829],{"className":31133,"code":107522,"language":31135,"meta":395,"style":395},[422,107830,107831,107843],{"__ignoreMap":395},[425,107832,107833,107835,107837,107839,107841],{"class":427,"line":428},[425,107834,2544],{"class":1155},[425,107836,107313],{"class":701},[425,107838,21945],{"class":1155},[425,107840,26109],{"class":691},[425,107842,4739],{"class":701},[425,107844,107845,107847,107849,107851,107853],{"class":427,"line":698},[425,107846,104650],{"class":1155},[425,107848,104190],{"class":691},[425,107850,1159],{"class":701},[425,107852,107330],{"class":435},[425,107854,1165],{"class":701},[19,107856,107857,107859],{},[422,107858,102913],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[416,107861,107863],{"className":31133,"code":107862,"language":31135,"meta":395,"style":395},"for step in range(2000):\n",[422,107864,107865],{"__ignoreMap":395},[425,107866,107867,107869,107871,107873,107875,107877,107879],{"class":427,"line":428},[425,107868,4025],{"class":1155},[425,107870,32371],{"class":701},[425,107872,27034],{"class":1155},[425,107874,33198],{"class":691},[425,107876,1159],{"class":701},[425,107878,107351],{"class":691},[425,107880,31541],{"class":701},[19,107882,107883,107884,107886,107887,107890],{},"循环 2000 步。这里没有用 ",[422,107885,2139],{},"，而是用 ",[422,107888,107889],{},"step","，因为后面要用当前步数计算时间。",[416,107892,107894],{"className":31133,"code":107893,"language":31135,"meta":395,"style":395},"t = step * model.opt.timestep\n",[422,107895,107896],{"__ignoreMap":395},[425,107897,107898,107901,107903,107905,107907],{"class":427,"line":428},[425,107899,107900],{"class":701},"t ",[425,107902,1204],{"class":1155},[425,107904,32371],{"class":701},[425,107906,1603],{"class":1155},[425,107908,107367],{"class":701},[19,107910,107911],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[416,107913,107914],{"className":31133,"code":107562,"language":31135,"meta":395,"style":395},[422,107915,107916],{"__ignoreMap":395},[425,107917,107918,107920,107922,107924,107926,107928,107930,107932,107934,107936,107938,107940,107942,107944],{"class":427,"line":428},[425,107919,106626],{"class":701},[425,107921,1341],{"class":691},[425,107923,5443],{"class":701},[425,107925,1204],{"class":1155},[425,107927,107381],{"class":691},[425,107929,7518],{"class":1155},[425,107931,107386],{"class":701},[425,107933,106015],{"class":691},[425,107935,7518],{"class":1155},[425,107937,107393],{"class":701},[425,107939,1603],{"class":1155},[425,107941,62622],{"class":691},[425,107943,7518],{"class":1155},[425,107945,107402],{"class":701},[19,107947,107948],{},"这行给电机输入一个正弦波。拆开看：",[972,107950,107951,107957,107963],{},[450,107952,107953,107956],{},[422,107954,107955],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[450,107958,107959,107962],{},[422,107960,107961],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[450,107964,107965,107968],{},[422,107966,107967],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,107970,107971],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[416,107973,107975],{"className":31133,"code":107974,"language":31135,"meta":395,"style":395},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[422,107976,107977],{"__ignoreMap":395},[425,107978,107979,107981,107983,107985,107987,107989],{"class":427,"line":428},[425,107980,31170],{"class":691},[425,107982,1159],{"class":701},[425,107984,107430],{"class":435},[425,107986,105685],{"class":701},[425,107988,1442],{"class":691},[425,107990,31252],{"class":701},[19,107992,107993,107994,107996],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[422,107995,101825],{}," 只有一个数。",[1099,107998,103071],{"id":103070},[19,108000,108001],{},"输出类似:",[416,108003,108006],{"className":108004,"code":108005,"language":6187,"meta":395},[6185],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[422,108007,108005],{"__ignoreMap":395},[19,108009,108010,108011,108013],{},"这里 ",[422,108012,106881],{}," 是电机输入。",[19,108015,108016,108019,108020,108023],{},[422,108017,108018],{},"joint qpos"," 是关节角度，单位通常是弧度。",[422,108021,108022],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,108025,108026],{},"角度单位提示：",[416,108028,108031],{"className":108029,"code":108030,"language":6187,"meta":395},[6185],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[422,108032,108030],{"__ignoreMap":395},[19,108034,108035,108036,108038,108039,108041],{},"如果你看到 ",[422,108037,104785],{}," 是 ",[422,108040,36084],{},"，大约就是 28.6 度。",[1099,108043,103103],{"id":103102},[972,108045,108046,108053,108056,108063,108066,108074,108082],{},[450,108047,103166,108048,103169,108050,998],{},[422,108049,107066],{},[422,108051,108052],{},"gear=\"5\"",[450,108054,108055],{},"重新运行，观察关节运动是否更剧烈。",[450,108057,103166,108058,103169,108060,998],{},[422,108059,106610],{},[422,108061,108062],{},"-0.2 0.2",[450,108064,108065],{},"重新运行，观察控制能力是否变弱。",[450,108067,108068,108069,108071,108072,998],{},"去掉 actuator，确认 ",[422,108070,102913],{}," 变成 ",[422,108073,1341],{},[450,108075,103166,108076,103169,108078,108081],{},[422,108077,107000],{},[422,108079,108080],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[450,108083,103166,108084,103169,108086,108089],{},[422,108085,106994],{},[422,108087,108088],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[1099,108091,103208],{"id":103207},[14,108093,108095],{"id":108094},"indexerror-index-0-is-out-of-bounds",[422,108096,108097],{},"IndexError: index 0 is out of bounds",[19,108099,108100,108101,108103],{},"原因是 ",[422,108102,106747],{},"，没有 actuator。",[14,108105,108106],{"id":108106},"关节几乎不动",[19,108108,108109],{},"可能原因:",[972,108111,108112,108117,108121,108127],{},[450,108113,108114,108116],{},[422,108115,107822],{}," 太小",[450,108118,108119,108116],{},[422,108120,106610],{},[450,108122,108123,108126],{},[422,108124,108125],{},"damping"," 太大",[450,108128,108129],{},"重力方向导致运动不明显",[14,108131,108132],{"id":108132},"模型编译失败",[19,108134,108135,108136,108138],{},"检查 actuator 引用的 ",[422,108137,107057],{}," 是否存在，joint 名称是否拼写一致。",[14,108140,108142,108144],{"id":108141},"datactrl0-写了但没有效果",[422,108143,106881],{}," 写了但没有效果",[19,108146,103330],{},[972,108148,108149,108154,108157,108162,108167],{},[450,108150,108151,108153],{},[422,108152,102913],{}," 是否大于 0。",[450,108155,108156],{},"motor 是否引用了正确 joint。",[450,108158,108159,108161],{},[422,108160,107822],{}," 是否太小。",[450,108163,108164,108166],{},[422,108165,106610],{}," 是否把输入限制得太小。",[450,108168,108169],{},"body 是否真的有可动 joint。",[14,108171,108172],{"id":108172},"控制输入超过范围会怎样",[19,108174,108175],{},"如果设置了：",[416,108177,108179],{"className":53822,"code":108178,"language":53824,"meta":395,"style":395},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[422,108180,108181],{"__ignoreMap":395},[425,108182,108183],{"class":427,"line":428},[425,108184,108178],{"class":701},[19,108186,108187],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[416,108189,108191],{"className":31133,"code":108190,"language":31135,"meta":395,"style":395},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[422,108192,108193,108213],{"__ignoreMap":395},[425,108194,108195,108198,108200,108203,108205,108207,108209,108211],{"class":427,"line":428},[425,108196,108197],{"class":701},"action ",[425,108199,1204],{"class":1155},[425,108201,108202],{"class":701}," np.clip(action, ",[425,108204,1680],{"class":1155},[425,108206,106015],{"class":691},[425,108208,13434],{"class":701},[425,108210,106015],{"class":691},[425,108212,1165],{"class":701},[425,108214,108215,108217,108219,108221,108223],{"class":427,"line":698},[425,108216,106626],{"class":701},[425,108218,1341],{"class":691},[425,108220,5443],{"class":701},[425,108222,1204],{"class":1155},[425,108224,108225],{"class":701}," action\n",[1099,108227,103362],{"id":103361},[19,108229,108230],{},"这一章建立了控制任务的基本形式：",[416,108232,108235],{"className":108233,"code":108234,"language":6187,"meta":395},[6185],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[422,108236,108234],{"__ignoreMap":395},[19,108238,108239],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[1074,108241,108242],{},"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":395,"searchDepth":698,"depth":698,"links":108244},[108245,108246,108247,108252,108256,108257,108258,108266],{"id":101401,"depth":698,"text":101402},{"id":101524,"depth":698,"text":101525},{"id":101799,"depth":698,"text":101800,"children":108248},[108249,108250,108251],{"id":106888,"depth":710,"text":106889},{"id":106938,"depth":710,"text":106939},{"id":107004,"depth":710,"text":107005},{"id":102007,"depth":698,"text":102008,"children":108253},[108254,108255],{"id":102327,"depth":710,"text":102327},{"id":102463,"depth":710,"text":102463},{"id":103070,"depth":698,"text":103071},{"id":103102,"depth":698,"text":103103},{"id":103207,"depth":698,"text":103208,"children":108259},[108260,108261,108262,108263,108265],{"id":108094,"depth":710,"text":108097},{"id":108106,"depth":710,"text":108106},{"id":108132,"depth":710,"text":108132},{"id":108141,"depth":710,"text":108264},"data.ctrl[0] 写了但没有效果",{"id":108172,"depth":710,"text":108172},{"id":103361,"depth":698,"text":103362},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106576,"description":395},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":108273,"title":108274,"body":108275,"description":395,"extension":1082,"meta":110184,"navigation":1084,"path":110185,"seo":110186,"stem":110187,"__hash__":110188},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108276,"toc":110160},[108277,108280,108282,108285,108293,108296,108313,108316,108341,108344,108390,108392,108394,108449,108451,108470,108472,108515,108518,108535,108538,108554,108564,108571,108573,108576,108579,108613,108616,108664,108668,108671,108685,108694,108698,108701,108726,108729,108733,108746,108749,108755,108758,108773,108775,108778,109038,109040,109052,109055,109367,109369,109381,109383,109386,109401,109406,109409,109431,109434,109437,109471,109474,109478,109489,109492,109509,109512,109526,109533,109553,109560,109574,109577,109589,109604,109624,109627,109649,109652,109656,109671,109682,109697,109700,109730,109746,109775,109783,109807,109810,109828,109838,109850,109857,109866,109872,109881,109884,109886,109895,109898,109913,109915,109918,109929,109932,109943,109946,109964,109966,109983,109986,110014,110016,110020,110023,110053,110059,110062,110066,110074,110077,110079,110100,110103,110106,110122,110125,110141,110143,110146,110157],[10,108278,108274],{"id":108279},"_5viewer-可视化与-renderer-离屏渲染",[1099,108281,101402],{"id":101401},[19,108283,108284],{},"本章掌握两类可视化方式:",[972,108286,108287,108290],{},[450,108288,108289],{},"交互式 viewer: 适合人工观察仿真",[450,108291,108292],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,108294,108295],{},"使用官方接口:",[416,108297,108299],{"className":31133,"code":108298,"language":31135,"meta":395,"style":395},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[422,108300,108301,108308],{"__ignoreMap":395},[425,108302,108303,108305],{"class":427,"line":428},[425,108304,31147],{"class":1155},[425,108306,108307],{"class":701}," mujoco.viewer\n",[425,108309,108310],{"class":427,"line":698},[425,108311,108312],{"class":701},"mujoco.viewer.launch_passive(model, data)\n",[19,108314,108315],{},"以及:",[416,108317,108319],{"className":31133,"code":108318,"language":31135,"meta":395,"style":395},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[422,108320,108321,108331],{"__ignoreMap":395},[425,108322,108323,108326,108328],{"class":427,"line":428},[425,108324,108325],{"class":701},"renderer ",[425,108327,1204],{"class":1155},[425,108329,108330],{"class":701}," mujoco.Renderer(model)\n",[425,108332,108333,108336,108338],{"class":427,"line":698},[425,108334,108335],{"class":701},"image ",[425,108337,1204],{"class":1155},[425,108339,108340],{"class":701}," renderer.render()\n",[19,108342,108343],{},"新手建议先理解二者区别：",[35,108345,108346,108362],{},[38,108347,108348],{},[41,108349,108350,108353,108356,108359],{},[44,108351,108352],{"align":46},"工具",[44,108354,108355],{"align":46},"用途",[44,108357,108358],{"align":46},"是否打开窗口",[44,108360,108361],{"align":46},"常见场景",[55,108363,108364,108377],{},[41,108365,108366,108369,108372,108374],{},[60,108367,108368],{"align":46},"Viewer",[60,108370,108371],{"align":46},"人眼实时观察仿真",[60,108373,105420],{"align":46},[60,108375,108376],{"align":46},"调试模型、看控制效果",[41,108378,108379,108382,108385,108387],{},[60,108380,108381],{"align":46},"Renderer",[60,108383,108384],{"align":46},"生成图像数组",[60,108386,105433],{"align":46},[60,108388,108389],{"align":46},"保存图片、训练视觉策略、服务器批量采集",[1099,108391,101525],{"id":101524},[19,108393,101528],{},[416,108395,108397],{"className":418,"code":108396,"language":420,"meta":395,"style":395},"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",[422,108398,108399,108411,108421,108429,108437],{"__ignoreMap":395},[425,108400,108401,108403,108405,108407,108409],{"class":427,"line":428},[425,108402,652],{"class":431},[425,108404,27305],{"class":435},[425,108406,24828],{"class":435},[425,108408,27389],{"class":691},[425,108410,695],{"class":691},[425,108412,108413,108415,108417,108419],{"class":427,"line":698},[425,108414,101563],{"class":435},[425,108416,101566],{"class":435},[425,108418,101569],{"class":435},[425,108420,695],{"class":691},[425,108422,108423,108425,108427],{"class":427,"line":710},[425,108424,101576],{"class":435},[425,108426,101579],{"class":435},[425,108428,695],{"class":691},[425,108430,108431,108433,108435],{"class":427,"line":721},[425,108432,101586],{"class":435},[425,108434,101589],{"class":435},[425,108436,695],{"class":691},[425,108438,108439,108441,108443,108445,108447],{"class":427,"line":735},[425,108440,101596],{"class":435},[425,108442,101599],{"class":435},[425,108444,101602],{"class":435},[425,108446,101605],{"class":435},[425,108448,103271],{"class":435},[19,108450,103574],{},[416,108452,108454],{"className":418,"code":108453,"language":420,"meta":395,"style":395},"pip install \"mujoco>=2.3\" numpy pillow\n",[422,108455,108456],{"__ignoreMap":395},[425,108457,108458,108460,108462,108464,108467],{"class":427,"line":428},[425,108459,24825],{"class":431},[425,108461,24828],{"class":435},[425,108463,101685],{"class":435},[425,108465,108466],{"class":435}," numpy",[425,108468,108469],{"class":435}," pillow\n",[19,108471,103591],{},[416,108473,108475],{"className":418,"code":108474,"language":420,"meta":395,"style":395},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[422,108476,108477,108494,108503],{"__ignoreMap":395},[425,108478,108479,108481,108483,108485,108488,108490,108492],{"class":427,"line":428},[425,108480,31085],{"class":431},[425,108482,29931],{"class":435},[425,108484,26106],{"class":691},[425,108486,108487],{"class":435}," mujoco-render",[425,108489,101730],{"class":435},[425,108491,101733],{"class":691},[425,108493,101736],{"class":691},[425,108495,108496,108498,108500],{"class":427,"line":698},[425,108497,31085],{"class":431},[425,108499,101743],{"class":435},[425,108501,108502],{"class":435}," mujoco-render\n",[425,108504,108505,108507,108509,108511,108513],{"class":427,"line":710},[425,108506,24825],{"class":431},[425,108508,24828],{"class":435},[425,108510,101685],{"class":435},[425,108512,108466],{"class":435},[425,108514,108469],{"class":435},[19,108516,108517],{},"离屏渲染后端:",[416,108519,108521],{"className":418,"code":108520,"language":420,"meta":395,"style":395},"export MUJOCO_GL=egl\n",[422,108522,108523],{"__ignoreMap":395},[425,108524,108525,108527,108530,108532],{"class":427,"line":428},[425,108526,26034],{"class":1155},[425,108528,108529],{"class":701}," MUJOCO_GL",[425,108531,1204],{"class":1155},[425,108533,108534],{"class":701},"egl\n",[19,108536,108537],{},"或:",[416,108539,108541],{"className":418,"code":108540,"language":420,"meta":395,"style":395},"export MUJOCO_GL=osmesa\n",[422,108542,108543],{"__ignoreMap":395},[425,108544,108545,108547,108549,108551],{"class":427,"line":428},[425,108546,26034],{"class":1155},[425,108548,108529],{"class":701},[425,108550,1204],{"class":1155},[425,108552,108553],{"class":701},"osmesa\n",[19,108555,108556,108557,108560,108561,998],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[422,108558,108559],{},"egl"," 失败，再尝试 ",[422,108562,108563],{},"osmesa",[19,108565,108566,108567,108570],{},"如果你在本机桌面环境运行，通常先不要设置 ",[422,108568,108569],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[1099,108572,101800],{"id":101799},[19,108574,108575],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,108577,108578],{},"典型 viewer 流程:",[416,108580,108582],{"className":31133,"code":108581,"language":31135,"meta":395,"style":395},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[422,108583,108584,108597,108604,108608],{"__ignoreMap":395},[425,108585,108586,108589,108592,108594],{"class":427,"line":428},[425,108587,108588],{"class":1155},"with",[425,108590,108591],{"class":701}," mujoco.viewer.launch_passive(model, data) ",[425,108593,32138],{"class":1155},[425,108595,108596],{"class":701}," viewer:\n",[425,108598,108599,108601],{"class":427,"line":698},[425,108600,3251],{"class":1155},[425,108602,108603],{"class":701}," viewer.is_running():\n",[425,108605,108606],{"class":427,"line":710},[425,108607,102271],{"class":701},[425,108609,108610],{"class":427,"line":721},[425,108611,108612],{"class":701},"        viewer.sync()\n",[19,108614,108615],{},"典型 renderer 流程:",[416,108617,108619],{"className":31133,"code":108618,"language":31135,"meta":395,"style":395},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[422,108620,108621,108647,108651,108656],{"__ignoreMap":395},[425,108622,108623,108625,108627,108630,108632,108634,108636,108638,108640,108642,108645],{"class":427,"line":428},[425,108624,108325],{"class":701},[425,108626,1204],{"class":1155},[425,108628,108629],{"class":701}," mujoco.Renderer(model, ",[425,108631,25973],{"class":6216},[425,108633,1204],{"class":1155},[425,108635,43097],{"class":691},[425,108637,13434],{"class":701},[425,108639,25969],{"class":6216},[425,108641,1204],{"class":1155},[425,108643,108644],{"class":691},"640",[425,108646,1165],{"class":701},[425,108648,108649],{"class":427,"line":698},[425,108650,105260],{"class":701},[425,108652,108653],{"class":427,"line":710},[425,108654,108655],{"class":701},"renderer.update_scene(data)\n",[425,108657,108658,108660,108662],{"class":427,"line":721},[425,108659,108335],{"class":701},[425,108661,1204],{"class":1155},[425,108663,108340],{"class":701},[14,108665,108667],{"id":108666},"viewer-的同步逻辑","viewer 的同步逻辑",[19,108669,108670],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[416,108672,108674],{"className":31133,"code":108673,"language":31135,"meta":395,"style":395},"mujoco.mj_step(model, data)\nviewer.sync()\n",[422,108675,108676,108680],{"__ignoreMap":395},[425,108677,108678],{"class":427,"line":428},[425,108679,105260],{"class":701},[425,108681,108682],{"class":427,"line":698},[425,108683,108684],{"class":701},"viewer.sync()\n",[19,108686,108687,108689,108690,108693],{},[422,108688,101970],{}," 负责算物理，",[422,108691,108692],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[14,108695,108697],{"id":108696},"为什么要-sleep","为什么要 sleep",[19,108699,108700],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[416,108702,108704],{"className":31133,"code":108703,"language":31135,"meta":395,"style":395},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[422,108705,108706],{"__ignoreMap":395},[425,108707,108708,108711,108713,108716,108718,108721,108723],{"class":427,"line":428},[425,108709,108710],{"class":701},"sleep_time ",[425,108712,1204],{"class":1155},[425,108714,108715],{"class":701}," model.opt.timestep ",[425,108717,1680],{"class":1155},[425,108719,108720],{"class":701}," (time.time() ",[425,108722,1680],{"class":1155},[425,108724,108725],{"class":701}," step_start)\n",[19,108727,108728],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[14,108730,108732],{"id":108731},"renderer-输出是什么","renderer 输出是什么",[416,108734,108736],{"className":31133,"code":108735,"language":31135,"meta":395,"style":395},"image = renderer.render()\n",[422,108737,108738],{"__ignoreMap":395},[425,108739,108740,108742,108744],{"class":427,"line":428},[425,108741,108335],{"class":701},[425,108743,1204],{"class":1155},[425,108745,108340],{"class":701},[19,108747,108748],{},"得到的是 NumPy 数组，形状通常是：",[416,108750,108753],{"className":108751,"code":108752,"language":6187,"meta":395},[6185],"(height, width, 3)\n",[422,108754,108752],{"__ignoreMap":395},[19,108756,108757],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[416,108759,108761],{"className":31133,"code":108760,"language":31135,"meta":395,"style":395},"Image.fromarray(image).save(\"render_output.png\")\n",[422,108762,108763],{"__ignoreMap":395},[425,108764,108765,108768,108771],{"class":427,"line":428},[425,108766,108767],{"class":701},"Image.fromarray(image).save(",[425,108769,108770],{"class":435},"\"render_output.png\"",[425,108772,1165],{"class":701},[1099,108774,102008],{"id":102007},[19,108776,108777],{},"交互式 Viewer:",[416,108779,108781],{"className":31133,"code":108780,"language":31135,"meta":395,"style":395},"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",[422,108782,108783,108789,108793,108799,108805,108809,108813,108821,108826,108830,108834,108838,108843,108848,108852,108856,108860,108865,108869,108873,108877,108881,108885,108889,108901,108913,108921,108925,108935,108955,108965,108970,108975,108979,108996,109009,109014,109018,109022,109034],{"__ignoreMap":395},[425,108784,108785,108787],{"class":427,"line":428},[425,108786,31147],{"class":1155},[425,108788,32584],{"class":701},[425,108790,108791],{"class":427,"line":698},[425,108792,3400],{"emptyLinePlaceholder":1084},[425,108794,108795,108797],{"class":427,"line":710},[425,108796,31147],{"class":1155},[425,108798,102056],{"class":701},[425,108800,108801,108803],{"class":427,"line":721},[425,108802,31147],{"class":1155},[425,108804,108307],{"class":701},[425,108806,108807],{"class":427,"line":735},[425,108808,3400],{"emptyLinePlaceholder":1084},[425,108810,108811],{"class":427,"line":743},[425,108812,3400],{"emptyLinePlaceholder":1084},[425,108814,108815,108817,108819],{"class":427,"line":751},[425,108816,102069],{"class":691},[425,108818,14563],{"class":1155},[425,108820,102074],{"class":435},[425,108822,108823],{"class":427,"line":759},[425,108824,108825],{"class":435},"\u003Cmujoco model=\"viewer_demo\">\n",[425,108827,108828],{"class":427,"line":770},[425,108829,102084],{"class":435},[425,108831,108832],{"class":427,"line":780},[425,108833,3400],{"emptyLinePlaceholder":1084},[425,108835,108836],{"class":427,"line":790},[425,108837,102093],{"class":435},[425,108839,108840],{"class":427,"line":805},[425,108841,108842],{"class":435},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[425,108844,108845],{"class":427,"line":818},[425,108846,108847],{"class":435},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[425,108849,108850],{"class":427,"line":831},[425,108851,3400],{"emptyLinePlaceholder":1084},[425,108853,108854],{"class":427,"line":841},[425,108855,102107],{"class":435},[425,108857,108858],{"class":427,"line":852},[425,108859,102112],{"class":435},[425,108861,108862],{"class":427,"line":862},[425,108863,108864],{"class":435},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[425,108866,108867],{"class":427,"line":878},[425,108868,102122],{"class":435},[425,108870,108871],{"class":427,"line":914},[425,108872,102127],{"class":435},[425,108874,108875],{"class":427,"line":943},[425,108876,102132],{"class":435},[425,108878,108879],{"class":427,"line":956},[425,108880,96453],{"class":435},[425,108882,108883],{"class":427,"line":964},[425,108884,3400],{"emptyLinePlaceholder":1084},[425,108886,108887],{"class":427,"line":2733},[425,108888,3400],{"emptyLinePlaceholder":1084},[425,108890,108891,108893,108895,108897,108899],{"class":427,"line":2750},[425,108892,32702],{"class":1155},[425,108894,2973],{"class":431},[425,108896,102153],{"class":701},[425,108898,96441],{"class":691},[425,108900,4739],{"class":701},[425,108902,108903,108905,108907,108909,108911],{"class":427,"line":2755},[425,108904,102162],{"class":701},[425,108906,1204],{"class":1155},[425,108908,102167],{"class":701},[425,108910,102069],{"class":691},[425,108912,1165],{"class":701},[425,108914,108915,108917,108919],{"class":427,"line":2760},[425,108916,102176],{"class":701},[425,108918,1204],{"class":1155},[425,108920,102181],{"class":701},[425,108922,108923],{"class":427,"line":2765},[425,108924,3400],{"emptyLinePlaceholder":1084},[425,108926,108927,108929,108931,108933],{"class":427,"line":2779},[425,108928,34933],{"class":1155},[425,108930,108591],{"class":701},[425,108932,32138],{"class":1155},[425,108934,108596],{"class":701},[425,108936,108937,108940,108943,108945,108948,108950,108953],{"class":427,"line":2784},[425,108938,108939],{"class":1155},"        while",[425,108941,108942],{"class":701}," viewer.is_running() ",[425,108944,31217],{"class":1155},[425,108946,108947],{"class":701}," data.time ",[425,108949,2057],{"class":1155},[425,108951,108952],{"class":691}," 5.0",[425,108954,4739],{"class":701},[425,108956,108957,108960,108962],{"class":427,"line":3577},[425,108958,108959],{"class":701},"            step_start ",[425,108961,1204],{"class":1155},[425,108963,108964],{"class":701}," time.time()\n",[425,108966,108967],{"class":427,"line":3591},[425,108968,108969],{"class":701},"            mujoco.mj_step(model, data)\n",[425,108971,108972],{"class":427,"line":3599},[425,108973,108974],{"class":701},"            viewer.sync()\n",[425,108976,108977],{"class":427,"line":3604},[425,108978,3400],{"emptyLinePlaceholder":1084},[425,108980,108981,108984,108986,108988,108990,108992,108994],{"class":427,"line":3610},[425,108982,108983],{"class":701},"            sleep_time ",[425,108985,1204],{"class":1155},[425,108987,108715],{"class":701},[425,108989,1680],{"class":1155},[425,108991,108720],{"class":701},[425,108993,1680],{"class":1155},[425,108995,108725],{"class":701},[425,108997,108998,109000,109003,109005,109007],{"class":427,"line":3616},[425,108999,5642],{"class":1155},[425,109001,109002],{"class":701}," sleep_time ",[425,109004,2107],{"class":1155},[425,109006,5093],{"class":691},[425,109008,4739],{"class":701},[425,109010,109011],{"class":427,"line":3621},[425,109012,109013],{"class":701},"                time.sleep(sleep_time)\n",[425,109015,109016],{"class":427,"line":8948},[425,109017,3400],{"emptyLinePlaceholder":1084},[425,109019,109020],{"class":427,"line":8972},[425,109021,3400],{"emptyLinePlaceholder":1084},[425,109023,109024,109026,109028,109030,109032],{"class":427,"line":8977},[425,109025,2544],{"class":1155},[425,109027,31975],{"class":691},[425,109029,102314],{"class":1155},[425,109031,102317],{"class":435},[425,109033,4739],{"class":701},[425,109035,109036],{"class":427,"line":8983},[425,109037,102324],{"class":701},[19,109039,104325],{},[416,109041,109043],{"className":418,"code":109042,"language":420,"meta":395,"style":395},"touch ch5_viewer.py\n",[422,109044,109045],{"__ignoreMap":395},[425,109046,109047,109049],{"class":427,"line":428},[425,109048,102038],{"class":431},[425,109050,109051],{"class":435}," ch5_viewer.py\n",[19,109053,109054],{},"离屏 Renderer 保存图片:",[416,109056,109058],{"className":31133,"code":109057,"language":31135,"meta":395,"style":395},"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",[422,109059,109060,109072,109076,109082,109092,109096,109100,109108,109113,109117,109121,109125,109129,109134,109138,109142,109146,109150,109154,109158,109162,109166,109170,109174,109178,109190,109202,109210,109235,109239,109255,109259,109263,109278,109287,109291,109305,109310,109315,109319,109331,109343,109347,109351,109363],{"__ignoreMap":395},[425,109061,109062,109064,109067,109069],{"class":427,"line":428},[425,109063,31492],{"class":1155},[425,109065,109066],{"class":701}," pathlib ",[425,109068,31147],{"class":1155},[425,109070,109071],{"class":701}," Path\n",[425,109073,109074],{"class":427,"line":698},[425,109075,3400],{"emptyLinePlaceholder":1084},[425,109077,109078,109080],{"class":427,"line":710},[425,109079,31147],{"class":1155},[425,109081,102056],{"class":701},[425,109083,109084,109086,109088,109090],{"class":427,"line":721},[425,109085,31492],{"class":1155},[425,109087,48018],{"class":691},[425,109089,48021],{"class":1155},[425,109091,48024],{"class":701},[425,109093,109094],{"class":427,"line":735},[425,109095,3400],{"emptyLinePlaceholder":1084},[425,109097,109098],{"class":427,"line":743},[425,109099,3400],{"emptyLinePlaceholder":1084},[425,109101,109102,109104,109106],{"class":427,"line":751},[425,109103,102069],{"class":691},[425,109105,14563],{"class":1155},[425,109107,102074],{"class":435},[425,109109,109110],{"class":427,"line":759},[425,109111,109112],{"class":435},"\u003Cmujoco model=\"renderer_demo\">\n",[425,109114,109115],{"class":427,"line":770},[425,109116,102084],{"class":435},[425,109118,109119],{"class":427,"line":780},[425,109120,3400],{"emptyLinePlaceholder":1084},[425,109122,109123],{"class":427,"line":790},[425,109124,102093],{"class":435},[425,109126,109127],{"class":427,"line":805},[425,109128,108842],{"class":435},[425,109130,109131],{"class":427,"line":818},[425,109132,109133],{"class":435},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[425,109135,109136],{"class":427,"line":831},[425,109137,108847],{"class":435},[425,109139,109140],{"class":427,"line":841},[425,109141,3400],{"emptyLinePlaceholder":1084},[425,109143,109144],{"class":427,"line":852},[425,109145,102107],{"class":435},[425,109147,109148],{"class":427,"line":862},[425,109149,102112],{"class":435},[425,109151,109152],{"class":427,"line":878},[425,109153,108864],{"class":435},[425,109155,109156],{"class":427,"line":914},[425,109157,102122],{"class":435},[425,109159,109160],{"class":427,"line":943},[425,109161,102127],{"class":435},[425,109163,109164],{"class":427,"line":956},[425,109165,102132],{"class":435},[425,109167,109168],{"class":427,"line":964},[425,109169,96453],{"class":435},[425,109171,109172],{"class":427,"line":2733},[425,109173,3400],{"emptyLinePlaceholder":1084},[425,109175,109176],{"class":427,"line":2750},[425,109177,3400],{"emptyLinePlaceholder":1084},[425,109179,109180,109182,109184,109186,109188],{"class":427,"line":2755},[425,109181,32702],{"class":1155},[425,109183,2973],{"class":431},[425,109185,102153],{"class":701},[425,109187,96441],{"class":691},[425,109189,4739],{"class":701},[425,109191,109192,109194,109196,109198,109200],{"class":427,"line":2760},[425,109193,102162],{"class":701},[425,109195,1204],{"class":1155},[425,109197,102167],{"class":701},[425,109199,102069],{"class":691},[425,109201,1165],{"class":701},[425,109203,109204,109206,109208],{"class":427,"line":2765},[425,109205,102176],{"class":701},[425,109207,1204],{"class":1155},[425,109209,102181],{"class":701},[425,109211,109212,109215,109217,109219,109221,109223,109225,109227,109229,109231,109233],{"class":427,"line":2779},[425,109213,109214],{"class":701},"    renderer ",[425,109216,1204],{"class":1155},[425,109218,108629],{"class":701},[425,109220,25973],{"class":6216},[425,109222,1204],{"class":1155},[425,109224,43097],{"class":691},[425,109226,13434],{"class":701},[425,109228,25969],{"class":6216},[425,109230,1204],{"class":1155},[425,109232,108644],{"class":691},[425,109234,1165],{"class":701},[425,109236,109237],{"class":427,"line":2784},[425,109238,3400],{"emptyLinePlaceholder":1084},[425,109240,109241,109243,109245,109247,109249,109251,109253],{"class":427,"line":3577},[425,109242,4201],{"class":1155},[425,109244,102256],{"class":701},[425,109246,27034],{"class":1155},[425,109248,33198],{"class":691},[425,109250,1159],{"class":701},[425,109252,1460],{"class":691},[425,109254,31541],{"class":701},[425,109256,109257],{"class":427,"line":3591},[425,109258,102271],{"class":701},[425,109260,109261],{"class":427,"line":3599},[425,109262,3400],{"emptyLinePlaceholder":1084},[425,109264,109265,109268,109271,109273,109276],{"class":427,"line":3604},[425,109266,109267],{"class":701},"    renderer.update_scene(data, ",[425,109269,109270],{"class":6216},"camera",[425,109272,1204],{"class":1155},[425,109274,109275],{"class":435},"\"fixed_camera\"",[425,109277,1165],{"class":701},[425,109279,109280,109283,109285],{"class":427,"line":3610},[425,109281,109282],{"class":701},"    image ",[425,109284,1204],{"class":1155},[425,109286,108340],{"class":701},[425,109288,109289],{"class":427,"line":3616},[425,109290,3400],{"emptyLinePlaceholder":1084},[425,109292,109293,109296,109298,109301,109303],{"class":427,"line":3621},[425,109294,109295],{"class":701},"    output_path ",[425,109297,1204],{"class":1155},[425,109299,109300],{"class":701}," Path(",[425,109302,108770],{"class":435},[425,109304,1165],{"class":701},[425,109306,109307],{"class":427,"line":8948},[425,109308,109309],{"class":701},"    Image.fromarray(image).save(output_path)\n",[425,109311,109312],{"class":427,"line":8972},[425,109313,109314],{"class":701},"    renderer.close()\n",[425,109316,109317],{"class":427,"line":8977},[425,109318,3400],{"emptyLinePlaceholder":1084},[425,109320,109321,109323,109325,109328],{"class":427,"line":8983},[425,109322,32054],{"class":691},[425,109324,1159],{"class":701},[425,109326,109327],{"class":435},"\"saved:\"",[425,109329,109330],{"class":701},", output_path.resolve())\n",[425,109332,109333,109335,109337,109340],{"class":427,"line":9010},[425,109334,32054],{"class":691},[425,109336,1159],{"class":701},[425,109338,109339],{"class":435},"\"image shape:\"",[425,109341,109342],{"class":701},", image.shape)\n",[425,109344,109345],{"class":427,"line":9015},[425,109346,3400],{"emptyLinePlaceholder":1084},[425,109348,109349],{"class":427,"line":9021},[425,109350,3400],{"emptyLinePlaceholder":1084},[425,109352,109353,109355,109357,109359,109361],{"class":427,"line":9033},[425,109354,2544],{"class":1155},[425,109356,31975],{"class":691},[425,109358,102314],{"class":1155},[425,109360,102317],{"class":435},[425,109362,4739],{"class":701},[425,109364,109365],{"class":427,"line":9045},[425,109366,102324],{"class":701},[19,109368,104325],{},[416,109370,109372],{"className":418,"code":109371,"language":420,"meta":395,"style":395},"touch ch5_renderer.py\n",[422,109373,109374],{"__ignoreMap":395},[425,109375,109376,109378],{"class":427,"line":428},[425,109377,102038],{"class":431},[425,109379,109380],{"class":435}," ch5_renderer.py\n",[14,109382,102327],{"id":102327},[19,109384,109385],{},"viewer 上下文：",[416,109387,109389],{"className":31133,"code":109388,"language":31135,"meta":395,"style":395},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[422,109390,109391],{"__ignoreMap":395},[425,109392,109393,109395,109397,109399],{"class":427,"line":428},[425,109394,108588],{"class":1155},[425,109396,108591],{"class":701},[425,109398,32138],{"class":1155},[425,109400,108596],{"class":701},[19,109402,109403,109405],{},[422,109404,108588],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,109407,109408],{},"窗口循环：",[416,109410,109412],{"className":31133,"code":109411,"language":31135,"meta":395,"style":395},"while viewer.is_running() and data.time \u003C 5.0:\n",[422,109413,109414],{"__ignoreMap":395},[425,109415,109416,109419,109421,109423,109425,109427,109429],{"class":427,"line":428},[425,109417,109418],{"class":1155},"while",[425,109420,108942],{"class":701},[425,109422,31217],{"class":1155},[425,109424,108947],{"class":701},[425,109426,2057],{"class":1155},[425,109428,108952],{"class":691},[425,109430,4739],{"class":701},[19,109432,109433],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,109435,109436],{},"固定相机：",[416,109438,109440],{"className":53822,"code":109439,"language":53824,"meta":395,"style":395},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[422,109441,109442],{"__ignoreMap":395},[425,109443,109444,109446,109448,109450,109452,109454,109456,109458,109461,109464,109466,109469],{"class":427,"line":428},[425,109445,2057],{"class":701},[425,109447,109270],{"class":52055},[425,109449,15917],{"class":431},[425,109451,1204],{"class":701},[425,109453,109275],{"class":435},[425,109455,101861],{"class":431},[425,109457,1204],{"class":701},[425,109459,109460],{"class":435},"\"1.5 -2.0 1.2\"",[425,109462,109463],{"class":431}," xyaxes",[425,109465,1204],{"class":701},[425,109467,109468],{"class":435},"\"1 0.75 0 0 0 1\"",[425,109470,101899],{"class":701},[19,109472,109473],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[14,109475,109477],{"id":109476},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[416,109479,109481],{"className":31133,"code":109480,"language":31135,"meta":395,"style":395},"import time\n",[422,109482,109483],{"__ignoreMap":395},[425,109484,109485,109487],{"class":427,"line":428},[425,109486,31147],{"class":1155},[425,109488,32584],{"class":701},[19,109490,109491],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[416,109493,109495],{"className":31133,"code":109494,"language":31135,"meta":395,"style":395},"import mujoco\nimport mujoco.viewer\n",[422,109496,109497,109503],{"__ignoreMap":395},[425,109498,109499,109501],{"class":427,"line":428},[425,109500,31147],{"class":1155},[425,109502,102056],{"class":701},[425,109504,109505,109507],{"class":427,"line":698},[425,109506,31147],{"class":1155},[425,109508,108307],{"class":701},[19,109510,109511],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[416,109513,109514],{"className":31133,"code":109388,"language":31135,"meta":395,"style":395},[422,109515,109516],{"__ignoreMap":395},[425,109517,109518,109520,109522,109524],{"class":427,"line":428},[425,109519,108588],{"class":1155},[425,109521,108591],{"class":701},[425,109523,32138],{"class":1155},[425,109525,108596],{"class":701},[19,109527,109528,109529,109532],{},"打开一个 viewer 窗口。",[422,109530,109531],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[416,109534,109535],{"className":31133,"code":109411,"language":31135,"meta":395,"style":395},[422,109536,109537],{"__ignoreMap":395},[425,109538,109539,109541,109543,109545,109547,109549,109551],{"class":427,"line":428},[425,109540,109418],{"class":1155},[425,109542,108942],{"class":701},[425,109544,31217],{"class":1155},[425,109546,108947],{"class":701},[425,109548,2057],{"class":1155},[425,109550,108952],{"class":691},[425,109552,4739],{"class":701},[19,109554,109555,109556,109559],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[422,109557,109558],{},"viewer.is_running()"," 会变成 false，循环结束。",[416,109561,109563],{"className":31133,"code":109562,"language":31135,"meta":395,"style":395},"step_start = time.time()\n",[422,109564,109565],{"__ignoreMap":395},[425,109566,109567,109570,109572],{"class":427,"line":428},[425,109568,109569],{"class":701},"step_start ",[425,109571,1204],{"class":1155},[425,109573,108964],{"class":701},[19,109575,109576],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[416,109578,109579],{"className":31133,"code":108673,"language":31135,"meta":395,"style":395},[422,109580,109581,109585],{"__ignoreMap":395},[425,109582,109583],{"class":427,"line":428},[425,109584,105260],{"class":701},[425,109586,109587],{"class":427,"line":698},[425,109588,108684],{"class":701},[19,109590,109591,109593,109594,109596,109597,109599,109600,109603],{},[422,109592,101970],{}," 推进物理仿真。",[422,109595,108692],{}," 把最新的 ",[422,109598,34156],{}," 同步到窗口里显示。没有 ",[422,109601,109602],{},"sync()","，窗口可能看不到最新状态。",[416,109605,109606],{"className":31133,"code":108703,"language":31135,"meta":395,"style":395},[422,109607,109608],{"__ignoreMap":395},[425,109609,109610,109612,109614,109616,109618,109620,109622],{"class":427,"line":428},[425,109611,108710],{"class":701},[425,109613,1204],{"class":1155},[425,109615,108715],{"class":701},[425,109617,1680],{"class":1155},[425,109619,108720],{"class":701},[425,109621,1680],{"class":1155},[425,109623,108725],{"class":701},[19,109625,109626],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[416,109628,109630],{"className":31133,"code":109629,"language":31135,"meta":395,"style":395},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[422,109631,109632,109644],{"__ignoreMap":395},[425,109633,109634,109636,109638,109640,109642],{"class":427,"line":428},[425,109635,2544],{"class":1155},[425,109637,109002],{"class":701},[425,109639,2107],{"class":1155},[425,109641,5093],{"class":691},[425,109643,4739],{"class":701},[425,109645,109646],{"class":427,"line":698},[425,109647,109648],{"class":701},"    time.sleep(sleep_time)\n",[19,109650,109651],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[14,109653,109655],{"id":109654},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[416,109657,109659],{"className":31133,"code":109658,"language":31135,"meta":395,"style":395},"from pathlib import Path\n",[422,109660,109661],{"__ignoreMap":395},[425,109662,109663,109665,109667,109669],{"class":427,"line":428},[425,109664,31492],{"class":1155},[425,109666,109066],{"class":701},[425,109668,31147],{"class":1155},[425,109670,109071],{"class":701},[19,109672,109673,109674,109677,109678,109681],{},"导入 ",[422,109675,109676],{},"Path","，用来处理文件路径。相比直接写字符串，",[422,109679,109680],{},"Path(\"render_output.png\")"," 更清晰。",[416,109683,109685],{"className":31133,"code":109684,"language":31135,"meta":395,"style":395},"from PIL import Image\n",[422,109686,109687],{"__ignoreMap":395},[425,109688,109689,109691,109693,109695],{"class":427,"line":428},[425,109690,31492],{"class":1155},[425,109692,48018],{"class":691},[425,109694,48021],{"class":1155},[425,109696,48024],{"class":701},[19,109698,109699],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[416,109701,109702],{"className":53822,"code":109439,"language":53824,"meta":395,"style":395},[422,109703,109704],{"__ignoreMap":395},[425,109705,109706,109708,109710,109712,109714,109716,109718,109720,109722,109724,109726,109728],{"class":427,"line":428},[425,109707,2057],{"class":701},[425,109709,109270],{"class":52055},[425,109711,15917],{"class":431},[425,109713,1204],{"class":701},[425,109715,109275],{"class":435},[425,109717,101861],{"class":431},[425,109719,1204],{"class":701},[425,109721,109460],{"class":435},[425,109723,109463],{"class":431},[425,109725,1204],{"class":701},[425,109727,109468],{"class":435},[425,109729,101899],{"class":701},[19,109731,109732,109733,109735,109736,109738,109739,109742,109743,109745],{},"定义一个相机。",[422,109734,80565],{}," 是相机名字。",[422,109737,104901],{}," 是相机在世界里的位置。",[422,109740,109741],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[422,109744,104901],{}," 来调视角。",[416,109747,109749],{"className":31133,"code":109748,"language":31135,"meta":395,"style":395},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[422,109750,109751],{"__ignoreMap":395},[425,109752,109753,109755,109757,109759,109761,109763,109765,109767,109769,109771,109773],{"class":427,"line":428},[425,109754,108325],{"class":701},[425,109756,1204],{"class":1155},[425,109758,108629],{"class":701},[425,109760,25973],{"class":6216},[425,109762,1204],{"class":1155},[425,109764,43097],{"class":691},[425,109766,13434],{"class":701},[425,109768,25969],{"class":6216},[425,109770,1204],{"class":1155},[425,109772,108644],{"class":691},[425,109774,1165],{"class":701},[19,109776,109777,109778,101773,109780,109782],{},"创建离屏渲染器。",[422,109779,25973],{},[422,109781,25969],{}," 决定输出图片大小。",[416,109784,109785],{"className":31133,"code":102431,"language":31135,"meta":395,"style":395},[422,109786,109787,109803],{"__ignoreMap":395},[425,109788,109789,109791,109793,109795,109797,109799,109801],{"class":427,"line":428},[425,109790,4025],{"class":1155},[425,109792,102256],{"class":701},[425,109794,27034],{"class":1155},[425,109796,33198],{"class":691},[425,109798,1159],{"class":701},[425,109800,1460],{"class":691},[425,109802,31541],{"class":701},[425,109804,109805],{"class":427,"line":698},[425,109806,102454],{"class":701},[19,109808,109809],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[416,109811,109813],{"className":31133,"code":109812,"language":31135,"meta":395,"style":395},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[422,109814,109815],{"__ignoreMap":395},[425,109816,109817,109820,109822,109824,109826],{"class":427,"line":428},[425,109818,109819],{"class":701},"renderer.update_scene(data, ",[425,109821,109270],{"class":6216},[425,109823,1204],{"class":1155},[425,109825,109275],{"class":435},[425,109827,1165],{"class":701},[19,109829,109830,109831,109833,109834,109837],{},"告诉 renderer：用当前 ",[422,109832,34156],{}," 的状态更新画面，并使用名为 ",[422,109835,109836],{},"fixed_camera"," 的相机视角。",[416,109839,109840],{"className":31133,"code":108735,"language":31135,"meta":395,"style":395},[422,109841,109842],{"__ignoreMap":395},[425,109843,109844,109846,109848],{"class":427,"line":428},[425,109845,108335],{"class":701},[425,109847,1204],{"class":1155},[425,109849,108340],{"class":701},[19,109851,109852,109853,109856],{},"真正渲染出图像。",[422,109854,109855],{},"image"," 是一个 NumPy 数组，不是文件。",[416,109858,109860],{"className":31133,"code":109859,"language":31135,"meta":395,"style":395},"Image.fromarray(image).save(output_path)\n",[422,109861,109862],{"__ignoreMap":395},[425,109863,109864],{"class":427,"line":428},[425,109865,109859],{"class":701},[19,109867,109868,109869,998],{},"把数组转换成图片，并保存到 ",[422,109870,109871],{},"render_output.png",[416,109873,109875],{"className":31133,"code":109874,"language":31135,"meta":395,"style":395},"renderer.close()\n",[422,109876,109877],{"__ignoreMap":395},[425,109878,109879],{"class":427,"line":428},[425,109880,109874],{"class":701},[19,109882,109883],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[1099,109885,103071],{"id":103070},[19,109887,109888,109889,109891,109892,998],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[422,109890,109871],{},"，并输出图像数组形状，例如 ",[422,109893,109894],{},"(480, 640, 3)",[19,109896,109897],{},"如果图片里看不到方块，先检查：",[972,109899,109900,109903,109906],{},[450,109901,109902],{},"方块是否掉到相机视野外。",[450,109904,109905],{},"camera 位置是否合理。",[450,109907,109908,109909,109912],{},"是否在 ",[422,109910,109911],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[1099,109914,103103],{"id":103102},[19,109916,109917],{},"运行 viewer:",[416,109919,109921],{"className":418,"code":109920,"language":420,"meta":395,"style":395},"python ch5_viewer.py\n",[422,109922,109923],{"__ignoreMap":395},[425,109924,109925,109927],{"class":427,"line":428},[425,109926,31135],{"class":431},[425,109928,109051],{"class":435},[19,109930,109931],{},"运行 renderer:",[416,109933,109935],{"className":418,"code":109934,"language":420,"meta":395,"style":395},"python ch5_renderer.py\n",[422,109936,109937],{"__ignoreMap":395},[425,109938,109939,109941],{"class":427,"line":428},[425,109940,31135],{"class":431},[425,109942,109380],{"class":435},[19,109944,109945],{},"如果在服务器上运行:",[416,109947,109949],{"className":418,"code":109948,"language":420,"meta":395,"style":395},"MUJOCO_GL=egl python ch5_renderer.py\n",[422,109950,109951],{"__ignoreMap":395},[425,109952,109953,109955,109957,109959,109962],{"class":427,"line":428},[425,109954,108569],{"class":701},[425,109956,1204],{"class":1155},[425,109958,108559],{"class":435},[425,109960,109961],{"class":431}," python",[425,109963,109380],{"class":435},[19,109965,108537],{},[416,109967,109969],{"className":418,"code":109968,"language":420,"meta":395,"style":395},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[422,109970,109971],{"__ignoreMap":395},[425,109972,109973,109975,109977,109979,109981],{"class":427,"line":428},[425,109974,108569],{"class":701},[425,109976,1204],{"class":1155},[425,109978,108563],{"class":435},[425,109980,109961],{"class":431},[425,109982,109380],{"class":435},[19,109984,109985],{},"再做几个练习：",[972,109987,109988,109995,109998,110004],{},[450,109989,109990,109991,109994],{},"把 renderer 分辨率改成 ",[422,109992,109993],{},"height=240, width=320","，观察输出 shape。",[450,109996,109997],{},"把方块颜色改成蓝色，重新保存图片。",[450,109999,110000,110001,110003],{},"把相机 ",[422,110002,104901],{}," 改远一点，观察画面中物体是否变小。",[450,110005,110006,110007,103169,110010,110013],{},"把 viewer 示例中的 ",[422,110008,110009],{},"data.time \u003C 5.0",[422,110011,110012],{},"data.time \u003C 20.0","，观察更长时间。",[1099,110015,103208],{"id":103207},[14,110017,110019],{"id":110018},"viewer-窗口打不开","viewer 窗口打不开",[19,110021,110022],{},"安装:",[416,110024,110026],{"className":418,"code":110025,"language":420,"meta":395,"style":395},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[422,110027,110028],{"__ignoreMap":395},[425,110029,110030,110032,110034,110036,110038,110040,110042,110044,110046,110048,110050],{"class":427,"line":428},[425,110031,652],{"class":431},[425,110033,27305],{"class":435},[425,110035,24828],{"class":435},[425,110037,27389],{"class":691},[425,110039,103261],{"class":435},[425,110041,101589],{"class":435},[425,110043,103266],{"class":435},[425,110045,101602],{"class":435},[425,110047,101608],{"class":435},[425,110049,101599],{"class":435},[425,110051,110052],{"class":435}," libXinerama\n",[14,110054,110056],{"id":110055},"glfwerror",[422,110057,110058],{},"GLFWError",[19,110060,110061],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[14,110063,110065],{"id":110064},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,110067,110068,110069,83294,110071,110073],{},"尝试 ",[422,110070,101792],{},[422,110072,101795],{},"。可能存在版本差异。",[14,110075,110076],{"id":110076},"保存图片是黑的",[19,110078,103330],{},[972,110080,110081,110084,110087,110097],{},[450,110082,110083],{},"XML 里是否有 light。",[450,110085,110086],{},"相机是否对着模型。",[450,110088,110089,110090,110093,110094,998],{},"是否先 ",[422,110091,110092],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[422,110095,110096],{},"renderer.render()",[450,110098,110099],{},"物体是否已经掉出视野。",[14,110101,110102],{"id":110102},"远程服务器没有显示器",[19,110104,110105],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[416,110107,110108],{"className":418,"code":109948,"language":420,"meta":395,"style":395},[422,110109,110110],{"__ignoreMap":395},[425,110111,110112,110114,110116,110118,110120],{"class":427,"line":428},[425,110113,108569],{"class":701},[425,110115,1204],{"class":1155},[425,110117,108559],{"class":435},[425,110119,109961],{"class":431},[425,110121,109380],{"class":435},[19,110123,110124],{},"如果 EGL 不可用，再尝试：",[416,110126,110127],{"className":418,"code":109968,"language":420,"meta":395,"style":395},[422,110128,110129],{"__ignoreMap":395},[425,110130,110131,110133,110135,110137,110139],{"class":427,"line":428},[425,110132,108569],{"class":701},[425,110134,1204],{"class":1155},[425,110136,108563],{"class":435},[425,110138,109961],{"class":431},[425,110140,109380],{"class":435},[1099,110142,103362],{"id":103361},[19,110144,110145],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[972,110147,110148,110151,110154],{},[450,110149,110150],{},"先用 viewer 看模型和控制是否正常。",[450,110152,110153],{},"再用 renderer 保存图片或构造视觉观测。",[450,110155,110156],{},"最后把状态、动作、图像、奖励组织成训练数据。",[1074,110158,110159],{},"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":395,"searchDepth":698,"depth":698,"links":110161},[110162,110163,110164,110169,110174,110175,110176,110183],{"id":101401,"depth":698,"text":101402},{"id":101524,"depth":698,"text":101525},{"id":101799,"depth":698,"text":101800,"children":110165},[110166,110167,110168],{"id":108666,"depth":710,"text":108667},{"id":108696,"depth":710,"text":108697},{"id":108731,"depth":710,"text":108732},{"id":102007,"depth":698,"text":102008,"children":110170},[110171,110172,110173],{"id":102327,"depth":710,"text":102327},{"id":109476,"depth":710,"text":109477},{"id":109654,"depth":710,"text":109655},{"id":103070,"depth":698,"text":103071},{"id":103102,"depth":698,"text":103103},{"id":103207,"depth":698,"text":103208,"children":110177},[110178,110179,110180,110181,110182],{"id":110018,"depth":710,"text":110019},{"id":110055,"depth":710,"text":110058},{"id":110064,"depth":710,"text":110065},{"id":110076,"depth":710,"text":110076},{"id":110102,"depth":710,"text":110102},{"id":103361,"depth":698,"text":103362},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108274,"description":395},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":110190,"title":110191,"body":110192,"description":395,"extension":1082,"meta":112103,"navigation":1084,"path":112104,"seo":112105,"stem":112106,"__hash__":112107},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":110193,"toc":112079},[110194,110197,110199,110202,110204,110223,110226,110232,110235,110237,110239,110263,110265,110279,110281,110322,110324,110335,110337,110340,110346,110349,110383,110386,110418,110421,110453,110457,110460,110500,110503,110509,110512,110518,110522,110525,110531,110534,110538,110541,110581,110583,110596,110599,110601,111183,111185,111197,111200,111211,111213,111216,111235,111247,111250,111271,111274,111277,111320,111323,111326,111346,111353,111355,111373,111388,111391,111397,111400,111406,111423,111430,111461,111472,111506,111517,111534,111543,111551,111556,111570,111573,111594,111600,111614,111619,111649,111659,111684,111692,111715,111718,111734,111737,111745,111751,111773,111786,111807,111816,111855,111866,111868,111871,111877,111880,111883,111889,111892,111912,111915,111917,111956,111958,111961,111969,111972,111975,112002,112005,112015,112021,112024,112030,112032,112038,112042,112045,112047,112050,112074,112077],[10,110195,110191],{"id":110196},"_6控制任务cartpole",[1099,110198,101402],{"id":101401},[19,110200,110201],{},"本章搭建一个最小 Cartpole 控制任务。",[19,110203,105086],{},[972,110205,110206,110209,110211,110214,110217,110220],{},[450,110207,110208],{},"slide joint",[450,110210,106939],{},[450,110212,110213],{},"cart force actuator",[450,110215,110216],{},"状态观测",[450,110218,110219],{},"简单控制循环",[450,110221,110222],{},"reward 设计雏形",[19,110224,110225],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[416,110227,110230],{"className":110228,"code":110229,"language":6187,"meta":395},[6185],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[422,110231,110229],{"__ignoreMap":395},[19,110233,110234],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[1099,110236,101525],{"id":101524},[19,110238,101528],{},[416,110240,110241],{"className":418,"code":105143,"language":420,"meta":395,"style":395},[422,110242,110243],{"__ignoreMap":395},[425,110244,110245,110247,110249,110251,110253,110255,110257,110259,110261],{"class":427,"line":428},[425,110246,652],{"class":431},[425,110248,27305],{"class":435},[425,110250,24828],{"class":435},[425,110252,27389],{"class":691},[425,110254,105158],{"class":435},[425,110256,101553],{"class":435},[425,110258,103256],{"class":435},[425,110260,101569],{"class":435},[425,110262,105167],{"class":435},[19,110264,103574],{},[416,110266,110267],{"className":418,"code":101674,"language":420,"meta":395,"style":395},[422,110268,110269],{"__ignoreMap":395},[425,110270,110271,110273,110275,110277],{"class":427,"line":428},[425,110272,24825],{"class":431},[425,110274,24828],{"class":435},[425,110276,101685],{"class":435},[425,110278,101688],{"class":435},[19,110280,103591],{},[416,110282,110284],{"className":418,"code":110283,"language":420,"meta":395,"style":395},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[422,110285,110286,110303,110312],{"__ignoreMap":395},[425,110287,110288,110290,110292,110294,110297,110299,110301],{"class":427,"line":428},[425,110289,31085],{"class":431},[425,110291,29931],{"class":435},[425,110293,26106],{"class":691},[425,110295,110296],{"class":435}," mujoco-cartpole",[425,110298,101730],{"class":435},[425,110300,101733],{"class":691},[425,110302,101736],{"class":691},[425,110304,110305,110307,110309],{"class":427,"line":698},[425,110306,31085],{"class":431},[425,110308,101743],{"class":435},[425,110310,110311],{"class":435}," mujoco-cartpole\n",[425,110313,110314,110316,110318,110320],{"class":427,"line":710},[425,110315,24825],{"class":431},[425,110317,24828],{"class":435},[425,110319,101685],{"class":435},[425,110321,101688],{"class":435},[19,110323,101759],{},[972,110325,110326,110329,110332],{},[450,110327,110328],{},"本章不依赖 Gymnasium。",[450,110330,110331],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[450,110333,110334],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[1099,110336,101800],{"id":101799},[19,110338,110339],{},"Cartpole 的模型结构:",[416,110341,110344],{"className":110342,"code":110343,"language":6187,"meta":395},[6185],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[422,110345,110343],{"__ignoreMap":395},[19,110347,110348],{},"小车通过 slide joint 左右移动:",[416,110350,110352],{"className":53822,"code":110351,"language":53824,"meta":395,"style":395},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[422,110353,110354],{"__ignoreMap":395},[425,110355,110356,110358,110360,110362,110364,110367,110369,110371,110374,110376,110378,110381],{"class":427,"line":428},[425,110357,2057],{"class":701},[425,110359,103711],{"class":52055},[425,110361,15917],{"class":431},[425,110363,1204],{"class":701},[425,110365,110366],{"class":435},"\"cart_x\"",[425,110368,54579],{"class":431},[425,110370,1204],{"class":701},[425,110372,110373],{"class":435},"\"slide\"",[425,110375,106783],{"class":431},[425,110377,1204],{"class":701},[425,110379,110380],{"class":435},"\"1 0 0\"",[425,110382,101899],{"class":701},[19,110384,110385],{},"杆子通过 hinge joint 旋转:",[416,110387,110389],{"className":53822,"code":110388,"language":53824,"meta":395,"style":395},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[422,110390,110391],{"__ignoreMap":395},[425,110392,110393,110395,110397,110399,110401,110404,110406,110408,110410,110412,110414,110416],{"class":427,"line":428},[425,110394,2057],{"class":701},[425,110396,103711],{"class":52055},[425,110398,15917],{"class":431},[425,110400,1204],{"class":701},[425,110402,110403],{"class":435},"\"pole_hinge\"",[425,110405,54579],{"class":431},[425,110407,1204],{"class":701},[425,110409,106774],{"class":435},[425,110411,106783],{"class":431},[425,110413,1204],{"class":701},[425,110415,106788],{"class":435},[425,110417,101899],{"class":701},[19,110419,110420],{},"控制力作用在小车 slide joint 上:",[416,110422,110424],{"className":53822,"code":110423,"language":53824,"meta":395,"style":395},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[422,110425,110426],{"__ignoreMap":395},[425,110427,110428,110430,110432,110434,110436,110439,110441,110443,110445,110447,110449,110451],{"class":427,"line":428},[425,110429,2057],{"class":701},[425,110431,106829],{"class":52055},[425,110433,15917],{"class":431},[425,110435,1204],{"class":701},[425,110437,110438],{"class":435},"\"cart_motor\"",[425,110440,106839],{"class":431},[425,110442,1204],{"class":701},[425,110444,110366],{"class":435},[425,110446,106846],{"class":431},[425,110448,1204],{"class":701},[425,110450,55071],{"class":435},[425,110452,101899],{"class":701},[14,110454,110456],{"id":110455},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,110458,110459],{},"这个简化模型有两个关节：",[35,110461,110462,110473],{},[38,110463,110464],{},[41,110465,110466,110468,110470],{},[44,110467,103514],{"align":46},[44,110469,24733],{"align":46},[44,110471,110472],{"align":46},"对应状态",[55,110474,110475,110488],{},[41,110476,110477,110482,110485],{},[60,110478,110479],{"align":46},[422,110480,110481],{},"cart_x",[60,110483,110484],{"align":46},"slide",[60,110486,110487],{"align":46},"小车 x 位置",[41,110489,110490,110495,110497],{},[60,110491,110492],{"align":46},[422,110493,110494],{},"pole_hinge",[60,110496,106595],{"align":46},[60,110498,110499],{"align":46},"杆子角度",[19,110501,110502],{},"所以：",[416,110504,110507],{"className":110505,"code":110506,"language":6187,"meta":395},[6185],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[422,110508,110506],{"__ignoreMap":395},[19,110510,110511],{},"把它们拼起来就是观测：",[416,110513,110516],{"className":110514,"code":110515,"language":6187,"meta":395},[6185],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[422,110517,110515],{"__ignoreMap":395},[14,110519,110521],{"id":110520},"action-是什么","action 是什么",[19,110523,110524],{},"本章只有一个 actuator：",[416,110526,110529],{"className":110527,"code":110528,"language":6187,"meta":395},[6185],"data.ctrl[0] = action\n",[422,110530,110528],{"__ignoreMap":395},[19,110532,110533],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[14,110535,110537],{"id":110536},"reward-是什么","reward 是什么",[19,110539,110540],{},"奖励函数：",[416,110542,110544],{"className":31133,"code":110543,"language":31135,"meta":395,"style":395},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[422,110545,110546],{"__ignoreMap":395},[425,110547,110548,110550,110553,110555,110557,110559,110562,110564,110567,110569,110571,110573,110576,110578],{"class":427,"line":428},[425,110549,18043],{"class":1155},[425,110551,110552],{"class":691}," float",[425,110554,1159],{"class":701},[425,110556,103158],{"class":691},[425,110558,53026],{"class":1155},[425,110560,110561],{"class":691}," 0.1",[425,110563,7518],{"class":1155},[425,110565,110566],{"class":701}," cart_x ",[425,110568,1603],{"class":1155},[425,110570,110566],{"class":701},[425,110572,1680],{"class":1155},[425,110574,110575],{"class":701}," pole_angle ",[425,110577,1603],{"class":1155},[425,110579,110580],{"class":701}," pole_angle)\n",[19,110582,106981],{},[972,110584,110585,110590,110593],{},[450,110586,110587,110588,998],{},"基础奖励是 ",[422,110589,103158],{},[450,110591,110592],{},"小车离中心越远，扣分越多。",[450,110594,110595],{},"杆子角度越大，扣分越多。",[19,110597,110598],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[1099,110600,102008],{"id":102007},[416,110602,110604],{"className":31133,"code":110603,"language":31135,"meta":395,"style":395},"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",[422,110605,110606,110612,110622,110626,110630,110638,110643,110647,110651,110655,110660,110664,110669,110674,110679,110683,110688,110693,110698,110702,110706,110710,110714,110718,110723,110727,110731,110735,110739,110743,110753,110760,110764,110768,110782,110796,110809,110839,110843,110847,110859,110871,110879,110883,110896,110900,110904,110913,110917,110933,110943,110956,110969,110973,110996,111014,111018,111030,111034,111038,111048,111058,111062,111078,111119,111123,111143,111159,111163,111167,111179],{"__ignoreMap":395},[425,110607,110608,110610],{"class":427,"line":428},[425,110609,31147],{"class":1155},[425,110611,102056],{"class":701},[425,110613,110614,110616,110618,110620],{"class":427,"line":698},[425,110615,31147],{"class":1155},[425,110617,32135],{"class":701},[425,110619,32138],{"class":1155},[425,110621,32141],{"class":701},[425,110623,110624],{"class":427,"line":710},[425,110625,3400],{"emptyLinePlaceholder":1084},[425,110627,110628],{"class":427,"line":721},[425,110629,3400],{"emptyLinePlaceholder":1084},[425,110631,110632,110634,110636],{"class":427,"line":735},[425,110633,102069],{"class":691},[425,110635,14563],{"class":1155},[425,110637,102074],{"class":435},[425,110639,110640],{"class":427,"line":743},[425,110641,110642],{"class":435},"\u003Cmujoco model=\"cartpole\">\n",[425,110644,110645],{"class":427,"line":751},[425,110646,102084],{"class":435},[425,110648,110649],{"class":427,"line":759},[425,110650,3400],{"emptyLinePlaceholder":1084},[425,110652,110653],{"class":427,"line":770},[425,110654,102093],{"class":435},[425,110656,110657],{"class":427,"line":780},[425,110658,110659],{"class":435},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[425,110661,110662],{"class":427,"line":790},[425,110663,3400],{"emptyLinePlaceholder":1084},[425,110665,110666],{"class":427,"line":805},[425,110667,110668],{"class":435},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[425,110670,110671],{"class":427,"line":818},[425,110672,110673],{"class":435},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[425,110675,110676],{"class":427,"line":831},[425,110677,110678],{"class":435},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[425,110680,110681],{"class":427,"line":841},[425,110682,3400],{"emptyLinePlaceholder":1084},[425,110684,110685],{"class":427,"line":852},[425,110686,110687],{"class":435},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[425,110689,110690],{"class":427,"line":862},[425,110691,110692],{"class":435},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[425,110694,110695],{"class":427,"line":878},[425,110696,110697],{"class":435},"        \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",[425,110699,110700],{"class":427,"line":914},[425,110701,107193],{"class":435},[425,110703,110704],{"class":427,"line":943},[425,110705,102122],{"class":435},[425,110707,110708],{"class":427,"line":956},[425,110709,102127],{"class":435},[425,110711,110712],{"class":427,"line":964},[425,110713,3400],{"emptyLinePlaceholder":1084},[425,110715,110716],{"class":427,"line":2733},[425,110717,107210],{"class":435},[425,110719,110720],{"class":427,"line":2750},[425,110721,110722],{"class":435},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[425,110724,110725],{"class":427,"line":2755},[425,110726,107220],{"class":435},[425,110728,110729],{"class":427,"line":2760},[425,110730,102132],{"class":435},[425,110732,110733],{"class":427,"line":2765},[425,110734,96453],{"class":435},[425,110736,110737],{"class":427,"line":2779},[425,110738,3400],{"emptyLinePlaceholder":1084},[425,110740,110741],{"class":427,"line":2784},[425,110742,3400],{"emptyLinePlaceholder":1084},[425,110744,110745,110747,110750],{"class":427,"line":3577},[425,110746,32702],{"class":1155},[425,110748,110749],{"class":431}," get_observation",[425,110751,110752],{"class":701},"(data: mujoco.MjData) -> np.ndarray:\n",[425,110754,110755,110757],{"class":427,"line":3591},[425,110756,5090],{"class":1155},[425,110758,110759],{"class":701}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[425,110761,110762],{"class":427,"line":3599},[425,110763,3400],{"emptyLinePlaceholder":1084},[425,110765,110766],{"class":427,"line":3604},[425,110767,3400],{"emptyLinePlaceholder":1084},[425,110769,110770,110772,110775,110778,110780],{"class":427,"line":3610},[425,110771,32702],{"class":1155},[425,110773,110774],{"class":431}," compute_reward",[425,110776,110777],{"class":701},"(obs: np.ndarray) -> ",[425,110779,1198],{"class":691},[425,110781,4739],{"class":701},[425,110783,110784,110787,110789,110792,110794],{"class":427,"line":3616},[425,110785,110786],{"class":701},"    cart_x ",[425,110788,1204],{"class":1155},[425,110790,110791],{"class":701}," obs[",[425,110793,1341],{"class":691},[425,110795,34001],{"class":701},[425,110797,110798,110801,110803,110805,110807],{"class":427,"line":3621},[425,110799,110800],{"class":701},"    pole_angle ",[425,110802,1204],{"class":1155},[425,110804,110791],{"class":701},[425,110806,1367],{"class":691},[425,110808,34001],{"class":701},[425,110810,110811,110813,110815,110817,110819,110821,110823,110825,110827,110829,110831,110833,110835,110837],{"class":427,"line":8948},[425,110812,5090],{"class":1155},[425,110814,110552],{"class":691},[425,110816,1159],{"class":701},[425,110818,103158],{"class":691},[425,110820,53026],{"class":1155},[425,110822,110561],{"class":691},[425,110824,7518],{"class":1155},[425,110826,110566],{"class":701},[425,110828,1603],{"class":1155},[425,110830,110566],{"class":701},[425,110832,1680],{"class":1155},[425,110834,110575],{"class":701},[425,110836,1603],{"class":1155},[425,110838,110580],{"class":701},[425,110840,110841],{"class":427,"line":8972},[425,110842,3400],{"emptyLinePlaceholder":1084},[425,110844,110845],{"class":427,"line":8977},[425,110846,3400],{"emptyLinePlaceholder":1084},[425,110848,110849,110851,110853,110855,110857],{"class":427,"line":8983},[425,110850,32702],{"class":1155},[425,110852,2973],{"class":431},[425,110854,102153],{"class":701},[425,110856,96441],{"class":691},[425,110858,4739],{"class":701},[425,110860,110861,110863,110865,110867,110869],{"class":427,"line":9010},[425,110862,102162],{"class":701},[425,110864,1204],{"class":1155},[425,110866,102167],{"class":701},[425,110868,102069],{"class":691},[425,110870,1165],{"class":701},[425,110872,110873,110875,110877],{"class":427,"line":9015},[425,110874,102176],{"class":701},[425,110876,1204],{"class":1155},[425,110878,102181],{"class":701},[425,110880,110881],{"class":427,"line":9021},[425,110882,3400],{"emptyLinePlaceholder":1084},[425,110884,110885,110887,110889,110891,110893],{"class":427,"line":9033},[425,110886,105824],{"class":701},[425,110888,1367],{"class":691},[425,110890,5443],{"class":701},[425,110892,1204],{"class":1155},[425,110894,110895],{"class":691}," 0.1\n",[425,110897,110898],{"class":427,"line":9045},[425,110899,105837],{"class":701},[425,110901,110902],{"class":427,"line":9057},[425,110903,3400],{"emptyLinePlaceholder":1084},[425,110905,110906,110909,110911],{"class":427,"line":10715},[425,110907,110908],{"class":701},"    total_reward ",[425,110910,1204],{"class":1155},[425,110912,105516],{"class":691},[425,110914,110915],{"class":427,"line":10740},[425,110916,3400],{"emptyLinePlaceholder":1084},[425,110918,110919,110921,110923,110925,110927,110929,110931],{"class":427,"line":10763},[425,110920,4201],{"class":1155},[425,110922,32371],{"class":701},[425,110924,27034],{"class":1155},[425,110926,33198],{"class":691},[425,110928,1159],{"class":701},[425,110930,7410],{"class":691},[425,110932,31541],{"class":701},[425,110934,110935,110938,110940],{"class":427,"line":10787},[425,110936,110937],{"class":701},"        obs ",[425,110939,1204],{"class":1155},[425,110941,110942],{"class":701}," get_observation(data)\n",[425,110944,110945,110948,110950,110952,110954],{"class":427,"line":10792},[425,110946,110947],{"class":701},"        pole_angle ",[425,110949,1204],{"class":1155},[425,110951,110791],{"class":701},[425,110953,1367],{"class":691},[425,110955,34001],{"class":701},[425,110957,110958,110961,110963,110965,110967],{"class":427,"line":10797},[425,110959,110960],{"class":701},"        pole_angular_velocity ",[425,110962,1204],{"class":1155},[425,110964,110791],{"class":701},[425,110966,1229],{"class":691},[425,110968,34001],{"class":701},[425,110970,110971],{"class":427,"line":10802},[425,110972,3400],{"emptyLinePlaceholder":1084},[425,110974,110975,110978,110980,110983,110985,110987,110989,110991,110993],{"class":427,"line":10811},[425,110976,110977],{"class":701},"        action ",[425,110979,1204],{"class":1155},[425,110981,110982],{"class":691}," 2.0",[425,110984,7518],{"class":1155},[425,110986,110575],{"class":701},[425,110988,1629],{"class":1155},[425,110990,62622],{"class":691},[425,110992,7518],{"class":1155},[425,110994,110995],{"class":701}," pole_angular_velocity\n",[425,110997,110998,111000,111002,111004,111006,111008,111010,111012],{"class":427,"line":10816},[425,110999,110977],{"class":701},[425,111001,1204],{"class":1155},[425,111003,108202],{"class":701},[425,111005,1680],{"class":1155},[425,111007,103158],{"class":691},[425,111009,13434],{"class":701},[425,111011,103158],{"class":691},[425,111013,1165],{"class":701},[425,111015,111016],{"class":427,"line":10822},[425,111017,3400],{"emptyLinePlaceholder":1084},[425,111019,111020,111022,111024,111026,111028],{"class":427,"line":10843},[425,111021,107372],{"class":701},[425,111023,1341],{"class":691},[425,111025,5443],{"class":701},[425,111027,1204],{"class":1155},[425,111029,108225],{"class":701},[425,111031,111032],{"class":427,"line":10849},[425,111033,102271],{"class":701},[425,111035,111036],{"class":427,"line":10863},[425,111037,3400],{"emptyLinePlaceholder":1084},[425,111039,111040,111043,111045],{"class":427,"line":10869},[425,111041,111042],{"class":701},"        reward ",[425,111044,1204],{"class":1155},[425,111046,111047],{"class":701}," compute_reward(get_observation(data))\n",[425,111049,111050,111053,111055],{"class":427,"line":10896},[425,111051,111052],{"class":701},"        total_reward ",[425,111054,10476],{"class":1155},[425,111056,111057],{"class":701}," reward\n",[425,111059,111060],{"class":427,"line":10905},[425,111061,3400],{"emptyLinePlaceholder":1084},[425,111063,111064,111066,111068,111070,111072,111074,111076],{"class":427,"line":10911},[425,111065,3497],{"class":1155},[425,111067,32371],{"class":701},[425,111069,1477],{"class":1155},[425,111071,6754],{"class":691},[425,111073,102314],{"class":1155},[425,111075,5093],{"class":691},[425,111077,4739],{"class":701},[425,111079,111080,111082,111084,111087,111090,111093,111096,111098,111101,111104,111106,111108,111110,111112,111115,111117],{"class":427,"line":10919},[425,111081,35405],{"class":691},[425,111083,1159],{"class":701},[425,111085,111086],{"class":435},"\"step:\"",[425,111088,111089],{"class":701},", step, ",[425,111091,111092],{"class":435},"\"obs:\"",[425,111094,111095],{"class":701},", np.round(obs, ",[425,111097,1229],{"class":691},[425,111099,111100],{"class":701},"), ",[425,111102,111103],{"class":435},"\"action:\"",[425,111105,13434],{"class":701},[425,111107,32773],{"class":691},[425,111109,1159],{"class":701},[425,111111,1198],{"class":691},[425,111113,111114],{"class":701},"(action), ",[425,111116,1229],{"class":691},[425,111118,31252],{"class":701},[425,111120,111121],{"class":427,"line":10924},[425,111122,3400],{"emptyLinePlaceholder":1084},[425,111124,111125,111127,111129,111132,111134,111136,111139,111141],{"class":427,"line":17601},[425,111126,32054],{"class":691},[425,111128,1159],{"class":701},[425,111130,111131],{"class":435},"\"total_reward:\"",[425,111133,13434],{"class":701},[425,111135,32773],{"class":691},[425,111137,111138],{"class":701},"(total_reward, ",[425,111140,1229],{"class":691},[425,111142,31252],{"class":701},[425,111144,111145,111147,111149,111152,111155,111157],{"class":427,"line":17607},[425,111146,32054],{"class":691},[425,111148,1159],{"class":701},[425,111150,111151],{"class":435},"\"final obs:\"",[425,111153,111154],{"class":701},", np.round(get_observation(data), ",[425,111156,1229],{"class":691},[425,111158,31252],{"class":701},[425,111160,111161],{"class":427,"line":17630},[425,111162,3400],{"emptyLinePlaceholder":1084},[425,111164,111165],{"class":427,"line":17636},[425,111166,3400],{"emptyLinePlaceholder":1084},[425,111168,111169,111171,111173,111175,111177],{"class":427,"line":17659},[425,111170,2544],{"class":1155},[425,111172,31975],{"class":691},[425,111174,102314],{"class":1155},[425,111176,102317],{"class":435},[425,111178,4739],{"class":701},[425,111180,111181],{"class":427,"line":17673},[425,111182,102324],{"class":701},[19,111184,104325],{},[416,111186,111188],{"className":418,"code":111187,"language":420,"meta":395,"style":395},"touch ch6_cartpole.py\n",[422,111189,111190],{"__ignoreMap":395},[425,111191,111192,111194],{"class":427,"line":428},[425,111193,102038],{"class":431},[425,111195,111196],{"class":435}," ch6_cartpole.py\n",[19,111198,111199],{},"运行：",[416,111201,111203],{"className":418,"code":111202,"language":420,"meta":395,"style":395},"python ch6_cartpole.py\n",[422,111204,111205],{"__ignoreMap":395},[425,111206,111207,111209],{"class":427,"line":428},[425,111208,31135],{"class":431},[425,111210,111196],{"class":435},[14,111212,102327],{"id":102327},[19,111214,111215],{},"构造观测：",[416,111217,111219],{"className":31133,"code":111218,"language":31135,"meta":395,"style":395},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[422,111220,111221,111229],{"__ignoreMap":395},[425,111222,111223,111225,111227],{"class":427,"line":428},[425,111224,32702],{"class":1155},[425,111226,110749],{"class":431},[425,111228,110752],{"class":701},[425,111230,111231,111233],{"class":427,"line":698},[425,111232,5090],{"class":1155},[425,111234,110759],{"class":701},[19,111236,111237,111240,111241,111243,111244,111246],{},[422,111238,111239],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[422,111242,104785],{}," 2 维，",[422,111245,105115],{}," 2 维，所以 obs 是 4 维。",[19,111248,111249],{},"设置初始角度：",[416,111251,111253],{"className":31133,"code":111252,"language":31135,"meta":395,"style":395},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[422,111254,111255,111267],{"__ignoreMap":395},[425,111256,111257,111259,111261,111263,111265],{"class":427,"line":428},[425,111258,105454],{"class":701},[425,111260,1367],{"class":691},[425,111262,5443],{"class":701},[425,111264,1204],{"class":1155},[425,111266,110895],{"class":691},[425,111268,111269],{"class":427,"line":698},[425,111270,105298],{"class":701},[19,111272,111273],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,111275,111276],{},"简单反馈控制：",[416,111278,111280],{"className":31133,"code":111279,"language":31135,"meta":395,"style":395},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[422,111281,111282,111302],{"__ignoreMap":395},[425,111283,111284,111286,111288,111290,111292,111294,111296,111298,111300],{"class":427,"line":428},[425,111285,108197],{"class":701},[425,111287,1204],{"class":1155},[425,111289,110982],{"class":691},[425,111291,7518],{"class":1155},[425,111293,110575],{"class":701},[425,111295,1629],{"class":1155},[425,111297,62622],{"class":691},[425,111299,7518],{"class":1155},[425,111301,110995],{"class":701},[425,111303,111304,111306,111308,111310,111312,111314,111316,111318],{"class":427,"line":698},[425,111305,108197],{"class":701},[425,111307,1204],{"class":1155},[425,111309,108202],{"class":701},[425,111311,1680],{"class":1155},[425,111313,103158],{"class":691},[425,111315,13434],{"class":701},[425,111317,103158],{"class":691},[425,111319,1165],{"class":701},[19,111321,111322],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,111324,111325],{},"限制动作：",[416,111327,111329],{"className":31133,"code":111328,"language":31135,"meta":395,"style":395},"np.clip(action, -1.0, 1.0)\n",[422,111330,111331],{"__ignoreMap":395},[425,111332,111333,111336,111338,111340,111342,111344],{"class":427,"line":428},[425,111334,111335],{"class":701},"np.clip(action, ",[425,111337,1680],{"class":1155},[425,111339,103158],{"class":691},[425,111341,13434],{"class":701},[425,111343,103158],{"class":691},[425,111345,1165],{"class":701},[19,111347,111348,111349,111352],{},"因为 XML 里 ",[422,111350,111351],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[14,111354,102463],{"id":102463},[416,111356,111357],{"className":31133,"code":111218,"language":31135,"meta":395,"style":395},[422,111358,111359,111367],{"__ignoreMap":395},[425,111360,111361,111363,111365],{"class":427,"line":428},[425,111362,32702],{"class":1155},[425,111364,110749],{"class":431},[425,111366,110752],{"class":701},[425,111368,111369,111371],{"class":427,"line":698},[425,111370,5090],{"class":1155},[425,111372,110759],{"class":701},[19,111374,111375,111376,111379,111380,111383,111384,111387],{},"这段定义了一个函数，用来获取当前观测。",[422,111377,111378],{},"data.qpos.copy()"," 是位置数组副本，",[422,111381,111382],{},"data.qvel.copy()"," 是速度数组副本。",[422,111385,111386],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,111389,111390],{},"在本章模型里：",[416,111392,111395],{"className":111393,"code":111394,"language":6187,"meta":395},[6185],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[422,111396,111394],{"__ignoreMap":395},[19,111398,111399],{},"所以返回的 obs 是：",[416,111401,111404],{"className":111402,"code":111403,"language":6187,"meta":395},[6185],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[422,111405,111403],{"__ignoreMap":395},[416,111407,111409],{"className":31133,"code":111408,"language":31135,"meta":395,"style":395},"def compute_reward(obs: np.ndarray) -> float:\n",[422,111410,111411],{"__ignoreMap":395},[425,111412,111413,111415,111417,111419,111421],{"class":427,"line":428},[425,111414,32702],{"class":1155},[425,111416,110774],{"class":431},[425,111418,110777],{"class":701},[425,111420,1198],{"class":691},[425,111422,4739],{"class":701},[19,111424,111425,111426,111429],{},"这行定义奖励函数。输入是观测 ",[422,111427,111428],{},"obs","，输出是一个浮点数奖励。",[416,111431,111433],{"className":31133,"code":111432,"language":31135,"meta":395,"style":395},"cart_x = obs[0]\npole_angle = obs[1]\n",[422,111434,111435,111448],{"__ignoreMap":395},[425,111436,111437,111440,111442,111444,111446],{"class":427,"line":428},[425,111438,111439],{"class":701},"cart_x ",[425,111441,1204],{"class":1155},[425,111443,110791],{"class":701},[425,111445,1341],{"class":691},[425,111447,34001],{"class":701},[425,111449,111450,111453,111455,111457,111459],{"class":427,"line":698},[425,111451,111452],{"class":701},"pole_angle ",[425,111454,1204],{"class":1155},[425,111456,110791],{"class":701},[425,111458,1367],{"class":691},[425,111460,34001],{"class":701},[19,111462,111463,111464,111467,111468,111471],{},"数组索引从 0 开始。",[422,111465,111466],{},"obs[0]"," 是第一个元素，也就是小车位置。",[422,111469,111470],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[416,111473,111474],{"className":31133,"code":110543,"language":31135,"meta":395,"style":395},[422,111475,111476],{"__ignoreMap":395},[425,111477,111478,111480,111482,111484,111486,111488,111490,111492,111494,111496,111498,111500,111502,111504],{"class":427,"line":428},[425,111479,18043],{"class":1155},[425,111481,110552],{"class":691},[425,111483,1159],{"class":701},[425,111485,103158],{"class":691},[425,111487,53026],{"class":1155},[425,111489,110561],{"class":691},[425,111491,7518],{"class":1155},[425,111493,110566],{"class":701},[425,111495,1603],{"class":1155},[425,111497,110566],{"class":701},[425,111499,1680],{"class":1155},[425,111501,110575],{"class":701},[425,111503,1603],{"class":1155},[425,111505,110580],{"class":701},[19,111507,111508,111509,111512,111513,111516],{},"这行计算奖励。",[422,111510,111511],{},"cart_x * cart_x"," 是小车位置的平方，",[422,111514,111515],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[416,111518,111520],{"className":31133,"code":111519,"language":31135,"meta":395,"style":395},"data.qpos[1] = 0.1\n",[422,111521,111522],{"__ignoreMap":395},[425,111523,111524,111526,111528,111530,111532],{"class":427,"line":428},[425,111525,105454],{"class":701},[425,111527,1367],{"class":691},[425,111529,5443],{"class":701},[425,111531,1204],{"class":1155},[425,111533,110895],{"class":691},[19,111535,111536,111537,111539,111540,111542],{},"手动设置杆子的初始角度。因为 ",[422,111538,106211],{}," 是小车位置，",[422,111541,106214],{}," 是杆子角度，所以这里改的是杆子。",[416,111544,111545],{"className":31133,"code":105298,"language":31135,"meta":395,"style":395},[422,111546,111547],{"__ignoreMap":395},[425,111548,111549],{"class":427,"line":428},[425,111550,105298],{"class":701},[19,111552,106257,111553,111555],{},[422,111554,104785],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[416,111557,111559],{"className":31133,"code":111558,"language":31135,"meta":395,"style":395},"total_reward = 0.0\n",[422,111560,111561],{"__ignoreMap":395},[425,111562,111563,111566,111568],{"class":427,"line":428},[425,111564,111565],{"class":701},"total_reward ",[425,111567,1204],{"class":1155},[425,111569,105516],{"class":691},[19,111571,111572],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[416,111574,111576],{"className":31133,"code":111575,"language":31135,"meta":395,"style":395},"for step in range(1000):\n",[422,111577,111578],{"__ignoreMap":395},[425,111579,111580,111582,111584,111586,111588,111590,111592],{"class":427,"line":428},[425,111581,4025],{"class":1155},[425,111583,32371],{"class":701},[425,111585,27034],{"class":1155},[425,111587,33198],{"class":691},[425,111589,1159],{"class":701},[425,111591,7410],{"class":691},[425,111593,31541],{"class":701},[19,111595,111596,111597,111599],{},"循环 1000 步。",[422,111598,107889],{}," 是当前步数，从 0 到 999。",[416,111601,111603],{"className":31133,"code":111602,"language":31135,"meta":395,"style":395},"obs = get_observation(data)\n",[422,111604,111605],{"__ignoreMap":395},[425,111606,111607,111610,111612],{"class":427,"line":428},[425,111608,111609],{"class":701},"obs ",[425,111611,1204],{"class":1155},[425,111613,110942],{"class":701},[19,111615,111616,111617,998],{},"读取当前状态，保存到 ",[422,111618,111428],{},[416,111620,111622],{"className":31133,"code":111621,"language":31135,"meta":395,"style":395},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[422,111623,111624,111636],{"__ignoreMap":395},[425,111625,111626,111628,111630,111632,111634],{"class":427,"line":428},[425,111627,111452],{"class":701},[425,111629,1204],{"class":1155},[425,111631,110791],{"class":701},[425,111633,1367],{"class":691},[425,111635,34001],{"class":701},[425,111637,111638,111641,111643,111645,111647],{"class":427,"line":698},[425,111639,111640],{"class":701},"pole_angular_velocity ",[425,111642,1204],{"class":1155},[425,111644,110791],{"class":701},[425,111646,1229],{"class":691},[425,111648,34001],{"class":701},[19,111650,111651,111652,111655,111656,998],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[422,111653,111654],{},"obs[3]","？因为 obs 的顺序是 ",[422,111657,111658],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[416,111660,111662],{"className":31133,"code":111661,"language":31135,"meta":395,"style":395},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[422,111663,111664],{"__ignoreMap":395},[425,111665,111666,111668,111670,111672,111674,111676,111678,111680,111682],{"class":427,"line":428},[425,111667,108197],{"class":701},[425,111669,1204],{"class":1155},[425,111671,110982],{"class":691},[425,111673,7518],{"class":1155},[425,111675,110575],{"class":701},[425,111677,1629],{"class":1155},[425,111679,62622],{"class":691},[425,111681,7518],{"class":1155},[425,111683,110995],{"class":701},[19,111685,111686,111687,101773,111689,111691],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[422,111688,106015],{},[422,111690,36084],{}," 是人为设置的系数，不是固定公式。",[416,111693,111695],{"className":31133,"code":111694,"language":31135,"meta":395,"style":395},"action = np.clip(action, -1.0, 1.0)\n",[422,111696,111697],{"__ignoreMap":395},[425,111698,111699,111701,111703,111705,111707,111709,111711,111713],{"class":427,"line":428},[425,111700,108197],{"class":701},[425,111702,1204],{"class":1155},[425,111704,108202],{"class":701},[425,111706,1680],{"class":1155},[425,111708,103158],{"class":691},[425,111710,13434],{"class":701},[425,111712,103158],{"class":691},[425,111714,1165],{"class":701},[19,111716,111717],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[416,111719,111720],{"className":31133,"code":110528,"language":31135,"meta":395,"style":395},[422,111721,111722],{"__ignoreMap":395},[425,111723,111724,111726,111728,111730,111732],{"class":427,"line":428},[425,111725,106626],{"class":701},[425,111727,1341],{"class":691},[425,111729,5443],{"class":701},[425,111731,1204],{"class":1155},[425,111733,108225],{"class":701},[19,111735,111736],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[416,111738,111739],{"className":31133,"code":105260,"language":31135,"meta":395,"style":395},[422,111740,111741],{"__ignoreMap":395},[425,111742,111743],{"class":427,"line":428},[425,111744,105260],{"class":701},[19,111746,111747,111748,111750],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[422,111749,106881],{}," 计算小车和杆子的下一刻状态。",[416,111752,111754],{"className":31133,"code":111753,"language":31135,"meta":395,"style":395},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[422,111755,111756,111765],{"__ignoreMap":395},[425,111757,111758,111761,111763],{"class":427,"line":428},[425,111759,111760],{"class":701},"reward ",[425,111762,1204],{"class":1155},[425,111764,111047],{"class":701},[425,111766,111767,111769,111771],{"class":427,"line":698},[425,111768,111565],{"class":701},[425,111770,10476],{"class":1155},[425,111772,111057],{"class":701},[19,111774,111775,111776,111778,111779,111782,111783,998],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[422,111777,10476],{}," 是简写，",[422,111780,111781],{},"total_reward += reward"," 等价于 ",[422,111784,111785],{},"total_reward = total_reward + reward",[416,111787,111789],{"className":31133,"code":111788,"language":31135,"meta":395,"style":395},"if step % 100 == 0:\n",[422,111790,111791],{"__ignoreMap":395},[425,111792,111793,111795,111797,111799,111801,111803,111805],{"class":427,"line":428},[425,111794,2544],{"class":1155},[425,111796,32371],{"class":701},[425,111798,1477],{"class":1155},[425,111800,6754],{"class":691},[425,111802,102314],{"class":1155},[425,111804,5093],{"class":691},[425,111806,4739],{"class":701},[19,111808,111809,111811,111812,111815],{},[422,111810,1477],{}," 是取余数。",[422,111813,111814],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[416,111817,111819],{"className":31133,"code":111818,"language":31135,"meta":395,"style":395},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[422,111820,111821],{"__ignoreMap":395},[425,111822,111823,111825,111827,111829,111831,111833,111835,111837,111839,111841,111843,111845,111847,111849,111851,111853],{"class":427,"line":428},[425,111824,31170],{"class":691},[425,111826,1159],{"class":701},[425,111828,111086],{"class":435},[425,111830,111089],{"class":701},[425,111832,111092],{"class":435},[425,111834,111095],{"class":701},[425,111836,1229],{"class":691},[425,111838,111100],{"class":701},[425,111840,111103],{"class":435},[425,111842,13434],{"class":701},[425,111844,32773],{"class":691},[425,111846,1159],{"class":701},[425,111848,1198],{"class":691},[425,111850,111114],{"class":701},[425,111852,1229],{"class":691},[425,111854,31252],{"class":701},[19,111856,111857,111858,111861,111862,111865],{},"打印当前步数、观测和动作。",[422,111859,111860],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[422,111863,111864],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[1099,111867,103071],{"id":103070},[19,111869,111870],{},"观测向量:",[416,111872,111875],{"className":111873,"code":111874,"language":6187,"meta":395},[6185],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[422,111876,111874],{"__ignoreMap":395},[19,111878,111879],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,111881,111882],{},"每隔 100 步会打印一次：",[416,111884,111887],{"className":111885,"code":111886,"language":6187,"meta":395},[6185],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[422,111888,111886],{"__ignoreMap":395},[19,111890,111891],{},"重点观察：",[972,111893,111894,111900,111905],{},[450,111895,111896,111899],{},[422,111897,111898],{},"pole_angle"," 是否越来越大。",[450,111901,111902,111904],{},[422,111903,110481],{}," 是否跑得太远。",[450,111906,111907,111908,83294,111910,998],{},"action 是否经常被 clip 到 ",[422,111909,104670],{},[422,111911,1367],{},[19,111913,111914],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[1099,111916,103103],{"id":103102},[972,111918,111919,111925,111928,111934,111944,111950,111953],{},[450,111920,111921,111922,998],{},"把初始角度改为 ",[422,111923,111924],{},"data.qpos[1] = 0.3",[450,111926,111927],{},"重新运行，观察控制是否变差。",[450,111929,111930,111931,111933],{},"把 actuator ",[422,111932,107822],{}," 改小。",[450,111935,111936,111937,111940,111941,998],{},"打印 ",[422,111938,111939],{},"model.nq, model.nv, model.nu","，应为 ",[422,111942,111943],{},"2 2 1",[450,111945,111946,111947,111949],{},"把 reward 里的 ",[422,111948,111515],{}," 系数改大，观察总奖励变化。",[450,111951,111952],{},"把控制器改成反号，观察杆子是否更容易倒。",[450,111954,111955],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[1099,111957,103208],{"id":103207},[14,111959,111960],{"id":111960},"杆子方向和预期不一致",[19,111962,103151,111963,111965,111966,111968],{},[422,111964,106994],{}," 和 capsule 的 ",[422,111967,103931],{},"，必要时用 viewer 可视化确认。",[14,111970,111971],{"id":111971},"控制器越控越倒",[19,111973,111974],{},"说明反馈符号可能反了，尝试:",[416,111976,111978],{"className":31133,"code":111977,"language":31135,"meta":395,"style":395},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[422,111979,111980],{"__ignoreMap":395},[425,111981,111982,111984,111986,111988,111990,111992,111994,111996,111998,112000],{"class":427,"line":428},[425,111983,108197],{"class":701},[425,111985,1204],{"class":1155},[425,111987,53026],{"class":1155},[425,111989,106015],{"class":691},[425,111991,7518],{"class":1155},[425,111993,110575],{"class":701},[425,111995,1680],{"class":1155},[425,111997,62622],{"class":691},[425,111999,7518],{"class":1155},[425,112001,110995],{"class":701},[14,112003,112004],{"id":112004},"小车飞走",[19,112006,112007,112008,112010,112011,112014],{},"降低 ",[422,112009,107822],{}," 或缩小 ",[422,112012,112013],{},"action"," 的 clip 范围。",[14,112016,112018,112020],{"id":112017},"obs3-为什么是杆子角速度",[422,112019,111654],{}," 为什么是杆子角速度",[19,112022,112023],{},"因为这个模型里：",[416,112025,112028],{"className":112026,"code":112027,"language":6187,"meta":395},[6185],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[422,112029,112027],{"__ignoreMap":395},[19,112031,110502],{},[416,112033,112036],{"className":112034,"code":112035,"language":6187,"meta":395},[6185],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[422,112037,112035],{"__ignoreMap":395},[14,112039,112041],{"id":112040},"reward-变成负数是否错误","reward 变成负数是否错误",[19,112043,112044],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[1099,112046,103362],{"id":103361},[19,112048,112049],{},"一个控制任务通常包含：",[972,112051,112052,112055,112063,112068,112071],{},[450,112053,112054],{},"模型：Cartpole 的 body、joint、actuator。",[450,112056,112057,112058,1362,112060,112062],{},"观测：从 ",[422,112059,104785],{},[422,112061,105115],{}," 里取状态。",[450,112064,112065,112066,998],{},"动作：写入 ",[422,112067,101831],{},[450,112069,112070],{},"奖励：根据任务目标打分。",[450,112072,112073],{},"循环：obs -> action -> step -> reward。",[19,112075,112076],{},"这就是后面 Gymnasium 环境的基本骨架。",[1074,112078,105041],{},{"title":395,"searchDepth":698,"depth":698,"links":112080},[112081,112082,112083,112088,112092,112093,112094,112102],{"id":101401,"depth":698,"text":101402},{"id":101524,"depth":698,"text":101525},{"id":101799,"depth":698,"text":101800,"children":112084},[112085,112086,112087],{"id":110455,"depth":710,"text":110456},{"id":110520,"depth":710,"text":110521},{"id":110536,"depth":710,"text":110537},{"id":102007,"depth":698,"text":102008,"children":112089},[112090,112091],{"id":102327,"depth":710,"text":102327},{"id":102463,"depth":710,"text":102463},{"id":103070,"depth":698,"text":103071},{"id":103102,"depth":698,"text":103103},{"id":103207,"depth":698,"text":103208,"children":112095},[112096,112097,112098,112099,112101],{"id":111960,"depth":710,"text":111960},{"id":111971,"depth":710,"text":111971},{"id":112004,"depth":710,"text":112004},{"id":112017,"depth":710,"text":112100},"obs[3] 为什么是杆子角速度",{"id":112040,"depth":710,"text":112041},{"id":103361,"depth":698,"text":103362},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":110191,"description":395},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":112109,"title":112110,"body":112111,"description":395,"extension":1082,"meta":114125,"navigation":1084,"path":114126,"seo":114127,"stem":114128,"__hash__":114129},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":112112,"toc":114101},[112113,112116,112118,112121,112123,112140,112143,112146,112152,112155,112157,112159,112183,112185,112199,112201,112242,112244,112262,112264,112267,112273,112276,112304,112308,112314,112339,112342,112373,112380,112383,112386,112392,112395,112401,112404,112410,112414,112417,112442,112445,112447,113207,113209,113221,113223,113234,113236,113239,113256,113259,113261,113272,113275,113277,113323,113326,113339,113342,113424,113427,113429,113445,113455,113468,113471,113510,113520,113531,113541,113554,113557,113586,113589,113599,113602,113608,113625,113636,113638,113644,113661,113672,113693,113696,113708,113711,113732,113735,113743,113751,113768,113771,113840,113847,113855,113858,113871,113878,113880,113883,113889,113892,113895,113901,113907,113909,113949,113951,113957,113966,113969,113971,113991,113994,113997,114003,114007,114009,114036,114039,114042,114069,114075,114078,114081,114083,114086,114089,114095,114098],[10,112114,112110],{"id":112115},"_7控制任务reacher-机械臂到达目标",[1099,112117,101402],{"id":101401},[19,112119,112120],{},"本章搭建一个二维两关节 reacher 任务。",[19,112122,105086],{},[972,112124,112125,112128,112131,112134,112137],{},[450,112126,112127],{},"两个 hinge joint",[450,112129,112130],{},"两个 motor actuator",[450,112132,112133],{},"site 作为末端点和目标点",[450,112135,112136],{},"根据末端和目标距离设计 reward",[450,112138,112139],{},"构造机械臂任务的基本形式",[19,112141,112142],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,112144,112145],{},"Reacher 任务可以理解为：",[416,112147,112150],{"className":112148,"code":112149,"language":6187,"meta":395},[6185],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[422,112151,112149],{"__ignoreMap":395},[19,112153,112154],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[1099,112156,101525],{"id":101524},[19,112158,101528],{},[416,112160,112161],{"className":418,"code":105143,"language":420,"meta":395,"style":395},[422,112162,112163],{"__ignoreMap":395},[425,112164,112165,112167,112169,112171,112173,112175,112177,112179,112181],{"class":427,"line":428},[425,112166,652],{"class":431},[425,112168,27305],{"class":435},[425,112170,24828],{"class":435},[425,112172,27389],{"class":691},[425,112174,105158],{"class":435},[425,112176,101553],{"class":435},[425,112178,103256],{"class":435},[425,112180,101569],{"class":435},[425,112182,105167],{"class":435},[19,112184,103574],{},[416,112186,112187],{"className":418,"code":101674,"language":420,"meta":395,"style":395},[422,112188,112189],{"__ignoreMap":395},[425,112190,112191,112193,112195,112197],{"class":427,"line":428},[425,112192,24825],{"class":431},[425,112194,24828],{"class":435},[425,112196,101685],{"class":435},[425,112198,101688],{"class":435},[19,112200,103591],{},[416,112202,112204],{"className":418,"code":112203,"language":420,"meta":395,"style":395},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[422,112205,112206,112223,112232],{"__ignoreMap":395},[425,112207,112208,112210,112212,112214,112217,112219,112221],{"class":427,"line":428},[425,112209,31085],{"class":431},[425,112211,29931],{"class":435},[425,112213,26106],{"class":691},[425,112215,112216],{"class":435}," mujoco-reacher",[425,112218,101730],{"class":435},[425,112220,101733],{"class":691},[425,112222,101736],{"class":691},[425,112224,112225,112227,112229],{"class":427,"line":698},[425,112226,31085],{"class":431},[425,112228,101743],{"class":435},[425,112230,112231],{"class":435}," mujoco-reacher\n",[425,112233,112234,112236,112238,112240],{"class":427,"line":710},[425,112235,24825],{"class":431},[425,112237,24828],{"class":435},[425,112239,101685],{"class":435},[425,112241,101688],{"class":435},[19,112243,101759],{},[972,112245,112246,112249,112252],{},[450,112247,112248],{},"本章使用低维状态，不使用图像输入。",[450,112250,112251],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[450,112253,112254,112255,1362,112257,1362,112259,112261],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[422,112256,104785],{},[422,112258,105115],{},[422,112260,104435],{}," 的方法一致。",[1099,112263,101800],{"id":101799},[19,112265,112266],{},"Reacher 任务核心:",[416,112268,112271],{"className":112269,"code":112270,"language":6187,"meta":395},[6185],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[422,112272,112270],{"__ignoreMap":395},[19,112274,112275],{},"读取 site 世界坐标:",[416,112277,112279],{"className":31133,"code":112278,"language":31135,"meta":395,"style":395},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[422,112280,112281,112294],{"__ignoreMap":395},[425,112282,112283,112285,112287,112289,112292],{"class":427,"line":428},[425,112284,104389],{"class":701},[425,112286,1204],{"class":1155},[425,112288,104160],{"class":701},[425,112290,112291],{"class":435},"\"tip\"",[425,112293,1165],{"class":701},[425,112295,112296,112299,112301],{"class":427,"line":698},[425,112297,112298],{"class":701},"tip_pos ",[425,112300,1204],{"class":1155},[425,112302,112303],{"class":701}," data.site_xpos[site_id]\n",[14,112305,112307],{"id":112306},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,112309,112310,112311,112313],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[422,112312,104785],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[416,112315,112317],{"className":31133,"code":112316,"language":31135,"meta":395,"style":395},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[422,112318,112319,112329],{"__ignoreMap":395},[425,112320,112321,112324,112326],{"class":427,"line":428},[425,112322,112323],{"class":701},"tip ",[425,112325,1204],{"class":1155},[425,112327,112328],{"class":701}," data.site_xpos[tip_site_id]\n",[425,112330,112331,112334,112336],{"class":427,"line":698},[425,112332,112333],{"class":701},"target ",[425,112335,1204],{"class":1155},[425,112337,112338],{"class":701}," data.site_xpos[target_site_id]\n",[19,112340,112341],{},"这样 reward 就很容易写：",[416,112343,112345],{"className":31133,"code":112344,"language":31135,"meta":395,"style":395},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[422,112346,112347,112362],{"__ignoreMap":395},[425,112348,112349,112352,112354,112357,112359],{"class":427,"line":428},[425,112350,112351],{"class":701},"dist ",[425,112353,1204],{"class":1155},[425,112355,112356],{"class":701}," np.linalg.norm(tip ",[425,112358,1680],{"class":1155},[425,112360,112361],{"class":701}," target)\n",[425,112363,112364,112366,112368,112370],{"class":427,"line":698},[425,112365,111760],{"class":701},[425,112367,1204],{"class":1155},[425,112369,53026],{"class":1155},[425,112371,112372],{"class":701},"dist\n",[19,112374,112375,112376,112379],{},"距离越小，",[422,112377,112378],{},"-dist"," 越接近 0，奖励越高。",[14,112381,112382],{"id":112382},"两关节机械臂的状态",[19,112384,112385],{},"这个模型有两个 hinge joint：",[416,112387,112390],{"className":112388,"code":112389,"language":6187,"meta":395},[6185],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[422,112391,112389],{"__ignoreMap":395},[19,112393,112394],{},"再加上末端和目标位置：",[416,112396,112399],{"className":112397,"code":112398,"language":6187,"meta":395},[6185],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[422,112400,112398],{"__ignoreMap":395},[19,112402,112403],{},"总维度：",[416,112405,112408],{"className":112406,"code":112407,"language":6187,"meta":395},[6185],"2 + 2 + 3 + 3 = 10\n",[422,112409,112407],{"__ignoreMap":395},[14,112411,112413],{"id":112412},"为什么-gravity-是-0","为什么 gravity 是 0",[19,112415,112416],{},"本章把重力设为：",[416,112418,112420],{"className":53822,"code":112419,"language":53824,"meta":395,"style":395},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[422,112421,112422],{"__ignoreMap":395},[425,112423,112424,112426,112428,112430,112432,112434,112436,112438,112440],{"class":427,"line":428},[425,112425,2057],{"class":701},[425,112427,69921],{"class":52055},[425,112429,101949],{"class":431},[425,112431,1204],{"class":701},[425,112433,101954],{"class":435},[425,112435,101957],{"class":431},[425,112437,1204],{"class":701},[425,112439,104526],{"class":435},[425,112441,101899],{"class":701},[19,112443,112444],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[1099,112446,102008],{"id":102007},[416,112448,112450],{"className":31133,"code":112449,"language":31135,"meta":395,"style":395},"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",[422,112451,112452,112458,112468,112472,112476,112484,112489,112494,112498,112502,112507,112512,112516,112521,112526,112531,112535,112540,112545,112550,112555,112559,112563,112567,112571,112575,112580,112585,112589,112593,112597,112601,112605,112620,112629,112641,112664,112671,112675,112679,112689,112703,112717,112724,112728,112732,112746,112758,112770,112783,112798,112815,112819,112823,112835,112847,112855,112863,112867,112883,112888,112901,112914,112929,112933,112968,113000,113004,113008,113017,113021,113037,113047,113058,113074,113090,113106,113122,113126,113144,113164,113183,113187,113191,113203],{"__ignoreMap":395},[425,112453,112454,112456],{"class":427,"line":428},[425,112455,31147],{"class":1155},[425,112457,102056],{"class":701},[425,112459,112460,112462,112464,112466],{"class":427,"line":698},[425,112461,31147],{"class":1155},[425,112463,32135],{"class":701},[425,112465,32138],{"class":1155},[425,112467,32141],{"class":701},[425,112469,112470],{"class":427,"line":710},[425,112471,3400],{"emptyLinePlaceholder":1084},[425,112473,112474],{"class":427,"line":721},[425,112475,3400],{"emptyLinePlaceholder":1084},[425,112477,112478,112480,112482],{"class":427,"line":735},[425,112479,102069],{"class":691},[425,112481,14563],{"class":1155},[425,112483,102074],{"class":435},[425,112485,112486],{"class":427,"line":743},[425,112487,112488],{"class":435},"\u003Cmujoco model=\"two_link_reacher\">\n",[425,112490,112491],{"class":427,"line":751},[425,112492,112493],{"class":435},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[425,112495,112496],{"class":427,"line":759},[425,112497,3400],{"emptyLinePlaceholder":1084},[425,112499,112500],{"class":427,"line":770},[425,112501,102093],{"class":435},[425,112503,112504],{"class":427,"line":780},[425,112505,112506],{"class":435},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[425,112508,112509],{"class":427,"line":790},[425,112510,112511],{"class":435},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[425,112513,112514],{"class":427,"line":805},[425,112515,3400],{"emptyLinePlaceholder":1084},[425,112517,112518],{"class":427,"line":818},[425,112519,112520],{"class":435},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[425,112522,112523],{"class":427,"line":831},[425,112524,112525],{"class":435},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[425,112527,112528],{"class":427,"line":841},[425,112529,112530],{"class":435},"      \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",[425,112532,112533],{"class":427,"line":852},[425,112534,3400],{"emptyLinePlaceholder":1084},[425,112536,112537],{"class":427,"line":862},[425,112538,112539],{"class":435},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[425,112541,112542],{"class":427,"line":878},[425,112543,112544],{"class":435},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[425,112546,112547],{"class":427,"line":914},[425,112548,112549],{"class":435},"        \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",[425,112551,112552],{"class":427,"line":943},[425,112553,112554],{"class":435},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[425,112556,112557],{"class":427,"line":956},[425,112558,107193],{"class":435},[425,112560,112561],{"class":427,"line":964},[425,112562,102122],{"class":435},[425,112564,112565],{"class":427,"line":2733},[425,112566,102127],{"class":435},[425,112568,112569],{"class":427,"line":2750},[425,112570,3400],{"emptyLinePlaceholder":1084},[425,112572,112573],{"class":427,"line":2755},[425,112574,107210],{"class":435},[425,112576,112577],{"class":427,"line":2760},[425,112578,112579],{"class":435},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[425,112581,112582],{"class":427,"line":2765},[425,112583,112584],{"class":435},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[425,112586,112587],{"class":427,"line":2779},[425,112588,107220],{"class":435},[425,112590,112591],{"class":427,"line":2784},[425,112592,102132],{"class":435},[425,112594,112595],{"class":427,"line":3577},[425,112596,96453],{"class":435},[425,112598,112599],{"class":427,"line":3591},[425,112600,3400],{"emptyLinePlaceholder":1084},[425,112602,112603],{"class":427,"line":3599},[425,112604,3400],{"emptyLinePlaceholder":1084},[425,112606,112607,112609,112612,112615,112617],{"class":427,"line":3604},[425,112608,32702],{"class":1155},[425,112610,112611],{"class":431}," site_position",[425,112613,112614],{"class":701},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[425,112616,2316],{"class":691},[425,112618,112619],{"class":701},") -> np.ndarray:\n",[425,112621,112622,112624,112626],{"class":427,"line":3610},[425,112623,104155],{"class":701},[425,112625,1204],{"class":1155},[425,112627,112628],{"class":701}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[425,112630,112631,112633,112635,112637,112639],{"class":427,"line":3616},[425,112632,4101],{"class":1155},[425,112634,104204],{"class":701},[425,112636,2057],{"class":1155},[425,112638,5093],{"class":691},[425,112640,4739],{"class":701},[425,112642,112643,112645,112647,112649,112651,112654,112656,112658,112660,112662],{"class":427,"line":3621},[425,112644,104187],{"class":1155},[425,112646,104190],{"class":691},[425,112648,1159],{"class":701},[425,112650,1210],{"class":1155},[425,112652,112653],{"class":435},"\"site not found: ",[425,112655,2043],{"class":691},[425,112657,80565],{"class":701},[425,112659,2093],{"class":691},[425,112661,1400],{"class":435},[425,112663,1165],{"class":701},[425,112665,112666,112668],{"class":427,"line":8948},[425,112667,5090],{"class":1155},[425,112669,112670],{"class":701}," data.site_xpos[site_id].copy()\n",[425,112672,112673],{"class":427,"line":8972},[425,112674,3400],{"emptyLinePlaceholder":1084},[425,112676,112677],{"class":427,"line":8977},[425,112678,3400],{"emptyLinePlaceholder":1084},[425,112680,112681,112683,112686],{"class":427,"line":8983},[425,112682,32702],{"class":1155},[425,112684,112685],{"class":431}," get_obs",[425,112687,112688],{"class":701},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[425,112690,112691,112694,112696,112699,112701],{"class":427,"line":9010},[425,112692,112693],{"class":701},"    tip ",[425,112695,1204],{"class":1155},[425,112697,112698],{"class":701}," site_position(model, data, ",[425,112700,112291],{"class":435},[425,112702,1165],{"class":701},[425,112704,112705,112708,112710,112712,112715],{"class":427,"line":9015},[425,112706,112707],{"class":701},"    target ",[425,112709,1204],{"class":1155},[425,112711,112698],{"class":701},[425,112713,112714],{"class":435},"\"target\"",[425,112716,1165],{"class":701},[425,112718,112719,112721],{"class":427,"line":9021},[425,112720,5090],{"class":1155},[425,112722,112723],{"class":701}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[425,112725,112726],{"class":427,"line":9033},[425,112727,3400],{"emptyLinePlaceholder":1084},[425,112729,112730],{"class":427,"line":9045},[425,112731,3400],{"emptyLinePlaceholder":1084},[425,112733,112734,112736,112739,112742,112744],{"class":427,"line":9057},[425,112735,32702],{"class":1155},[425,112737,112738],{"class":431}," reward",[425,112740,112741],{"class":701},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[425,112743,1198],{"class":691},[425,112745,4739],{"class":701},[425,112747,112748,112750,112752,112754,112756],{"class":427,"line":10715},[425,112749,112693],{"class":701},[425,112751,1204],{"class":1155},[425,112753,112698],{"class":701},[425,112755,112291],{"class":435},[425,112757,1165],{"class":701},[425,112759,112760,112762,112764,112766,112768],{"class":427,"line":10740},[425,112761,112707],{"class":701},[425,112763,1204],{"class":1155},[425,112765,112698],{"class":701},[425,112767,112714],{"class":435},[425,112769,1165],{"class":701},[425,112771,112772,112775,112777,112779,112781],{"class":427,"line":10763},[425,112773,112774],{"class":701},"    dist ",[425,112776,1204],{"class":1155},[425,112778,112356],{"class":701},[425,112780,1680],{"class":1155},[425,112782,112361],{"class":701},[425,112784,112785,112788,112790,112793,112795],{"class":427,"line":10787},[425,112786,112787],{"class":701},"    control_cost ",[425,112789,1204],{"class":1155},[425,112791,112792],{"class":691}," 0.01",[425,112794,7518],{"class":1155},[425,112796,112797],{"class":701}," np.sum(np.square(data.ctrl))\n",[425,112799,112800,112802,112804,112806,112808,112810,112812],{"class":427,"line":10792},[425,112801,5090],{"class":1155},[425,112803,110552],{"class":691},[425,112805,1159],{"class":701},[425,112807,1680],{"class":1155},[425,112809,112351],{"class":701},[425,112811,1680],{"class":1155},[425,112813,112814],{"class":701}," control_cost)\n",[425,112816,112817],{"class":427,"line":10797},[425,112818,3400],{"emptyLinePlaceholder":1084},[425,112820,112821],{"class":427,"line":10802},[425,112822,3400],{"emptyLinePlaceholder":1084},[425,112824,112825,112827,112829,112831,112833],{"class":427,"line":10811},[425,112826,32702],{"class":1155},[425,112828,2973],{"class":431},[425,112830,102153],{"class":701},[425,112832,96441],{"class":691},[425,112834,4739],{"class":701},[425,112836,112837,112839,112841,112843,112845],{"class":427,"line":10816},[425,112838,102162],{"class":701},[425,112840,1204],{"class":1155},[425,112842,102167],{"class":701},[425,112844,102069],{"class":691},[425,112846,1165],{"class":701},[425,112848,112849,112851,112853],{"class":427,"line":10822},[425,112850,102176],{"class":701},[425,112852,1204],{"class":1155},[425,112854,102181],{"class":701},[425,112856,112857,112859,112861],{"class":427,"line":10843},[425,112858,110908],{"class":701},[425,112860,1204],{"class":1155},[425,112862,105516],{"class":691},[425,112864,112865],{"class":427,"line":10849},[425,112866,3400],{"emptyLinePlaceholder":1084},[425,112868,112869,112871,112873,112875,112877,112879,112881],{"class":427,"line":10863},[425,112870,4201],{"class":1155},[425,112872,32371],{"class":701},[425,112874,27034],{"class":1155},[425,112876,33198],{"class":691},[425,112878,1159],{"class":701},[425,112880,65829],{"class":691},[425,112882,31541],{"class":701},[425,112884,112885],{"class":427,"line":10869},[425,112886,112887],{"class":701},"        mujoco.mj_forward(model, data)\n",[425,112889,112890,112893,112895,112897,112899],{"class":427,"line":10896},[425,112891,112892],{"class":701},"        tip ",[425,112894,1204],{"class":1155},[425,112896,112698],{"class":701},[425,112898,112291],{"class":435},[425,112900,1165],{"class":701},[425,112902,112903,112906,112908,112910,112912],{"class":427,"line":10905},[425,112904,112905],{"class":701},"        target ",[425,112907,1204],{"class":1155},[425,112909,112698],{"class":701},[425,112911,112714],{"class":435},[425,112913,1165],{"class":701},[425,112915,112916,112919,112921,112924,112926],{"class":427,"line":10911},[425,112917,112918],{"class":701},"        error ",[425,112920,1204],{"class":1155},[425,112922,112923],{"class":701}," target ",[425,112925,1680],{"class":1155},[425,112927,112928],{"class":701}," tip\n",[425,112930,112931],{"class":427,"line":10919},[425,112932,3400],{"emptyLinePlaceholder":1084},[425,112934,112935,112937,112939,112941,112943,112946,112948,112950,112953,112955,112958,112960,112962,112964,112966],{"class":427,"line":10924},[425,112936,107372],{"class":701},[425,112938,1341],{"class":691},[425,112940,5443],{"class":701},[425,112942,1204],{"class":1155},[425,112944,112945],{"class":701}," np.clip(",[425,112947,106015],{"class":691},[425,112949,7518],{"class":1155},[425,112951,112952],{"class":701}," error[",[425,112954,1235],{"class":691},[425,112956,112957],{"class":701},"], ",[425,112959,1680],{"class":1155},[425,112961,103158],{"class":691},[425,112963,13434],{"class":701},[425,112965,103158],{"class":691},[425,112967,1165],{"class":701},[425,112969,112970,112972,112974,112976,112978,112980,112982,112984,112986,112988,112990,112992,112994,112996,112998],{"class":427,"line":17601},[425,112971,107372],{"class":701},[425,112973,1367],{"class":691},[425,112975,5443],{"class":701},[425,112977,1204],{"class":1155},[425,112979,112945],{"class":701},[425,112981,106015],{"class":691},[425,112983,7518],{"class":1155},[425,112985,112952],{"class":701},[425,112987,1341],{"class":691},[425,112989,112957],{"class":701},[425,112991,1680],{"class":1155},[425,112993,103158],{"class":691},[425,112995,13434],{"class":701},[425,112997,103158],{"class":691},[425,112999,1165],{"class":701},[425,113001,113002],{"class":427,"line":17607},[425,113003,3400],{"emptyLinePlaceholder":1084},[425,113005,113006],{"class":427,"line":17630},[425,113007,102271],{"class":701},[425,113009,113010,113012,113014],{"class":427,"line":17636},[425,113011,111052],{"class":701},[425,113013,10476],{"class":1155},[425,113015,113016],{"class":701}," reward(model, data)\n",[425,113018,113019],{"class":427,"line":17659},[425,113020,3400],{"emptyLinePlaceholder":1084},[425,113022,113023,113025,113027,113029,113031,113033,113035],{"class":427,"line":17673},[425,113024,3497],{"class":1155},[425,113026,32371],{"class":701},[425,113028,1477],{"class":1155},[425,113030,6754],{"class":691},[425,113032,102314],{"class":1155},[425,113034,5093],{"class":691},[425,113036,4739],{"class":701},[425,113038,113039,113042,113044],{"class":427,"line":17693},[425,113040,113041],{"class":701},"            obs ",[425,113043,1204],{"class":1155},[425,113045,113046],{"class":701}," get_obs(model, data)\n",[425,113048,113049,113051,113053,113055],{"class":427,"line":17699},[425,113050,35405],{"class":691},[425,113052,1159],{"class":701},[425,113054,111086],{"class":435},[425,113056,113057],{"class":701},", step)\n",[425,113059,113060,113062,113064,113067,113070,113072],{"class":427,"line":17710},[425,113061,35405],{"class":691},[425,113063,1159],{"class":701},[425,113065,113066],{"class":435},"\"  tip:\"",[425,113068,113069],{"class":701},", np.round(tip, ",[425,113071,1229],{"class":691},[425,113073,31252],{"class":701},[425,113075,113076,113078,113080,113083,113086,113088],{"class":427,"line":17733},[425,113077,35405],{"class":691},[425,113079,1159],{"class":701},[425,113081,113082],{"class":435},"\"  target:\"",[425,113084,113085],{"class":701},", np.round(target, ",[425,113087,1229],{"class":691},[425,113089,31252],{"class":701},[425,113091,113092,113094,113096,113099,113102,113104],{"class":427,"line":17755},[425,113093,35405],{"class":691},[425,113095,1159],{"class":701},[425,113097,113098],{"class":435},"\"  ctrl:\"",[425,113100,113101],{"class":701},", np.round(data.ctrl.copy(), ",[425,113103,1229],{"class":691},[425,113105,31252],{"class":701},[425,113107,113108,113110,113112,113115,113118,113120],{"class":427,"line":17760},[425,113109,35405],{"class":691},[425,113111,1159],{"class":701},[425,113113,113114],{"class":435},"\"  obs_dim:\"",[425,113116,113117],{"class":701},", obs.shape[",[425,113119,1341],{"class":691},[425,113121,5657],{"class":701},[425,113123,113124],{"class":427,"line":17766},[425,113125,3400],{"emptyLinePlaceholder":1084},[425,113127,113128,113130,113132,113134,113136,113138,113140,113142],{"class":427,"line":17780},[425,113129,32054],{"class":691},[425,113131,1159],{"class":701},[425,113133,111131],{"class":435},[425,113135,13434],{"class":701},[425,113137,32773],{"class":691},[425,113139,111138],{"class":701},[425,113141,1229],{"class":691},[425,113143,31252],{"class":701},[425,113145,113146,113148,113150,113153,113156,113158,113160,113162],{"class":427,"line":17793},[425,113147,32054],{"class":691},[425,113149,1159],{"class":701},[425,113151,113152],{"class":435},"\"final tip:\"",[425,113154,113155],{"class":701},", np.round(site_position(model, data, ",[425,113157,112291],{"class":435},[425,113159,111100],{"class":701},[425,113161,1229],{"class":691},[425,113163,31252],{"class":701},[425,113165,113166,113168,113170,113173,113175,113177,113179,113181],{"class":427,"line":17798},[425,113167,32054],{"class":691},[425,113169,1159],{"class":701},[425,113171,113172],{"class":435},"\"target:\"",[425,113174,113155],{"class":701},[425,113176,112714],{"class":435},[425,113178,111100],{"class":701},[425,113180,1229],{"class":691},[425,113182,31252],{"class":701},[425,113184,113185],{"class":427,"line":17812},[425,113186,3400],{"emptyLinePlaceholder":1084},[425,113188,113189],{"class":427,"line":17817},[425,113190,3400],{"emptyLinePlaceholder":1084},[425,113192,113193,113195,113197,113199,113201],{"class":427,"line":17823},[425,113194,2544],{"class":1155},[425,113196,31975],{"class":691},[425,113198,102314],{"class":1155},[425,113200,102317],{"class":435},[425,113202,4739],{"class":701},[425,113204,113205],{"class":427,"line":17828},[425,113206,102324],{"class":701},[19,113208,104325],{},[416,113210,113212],{"className":418,"code":113211,"language":420,"meta":395,"style":395},"touch ch7_reacher.py\n",[422,113213,113214],{"__ignoreMap":395},[425,113215,113216,113218],{"class":427,"line":428},[425,113217,102038],{"class":431},[425,113219,113220],{"class":435}," ch7_reacher.py\n",[19,113222,111199],{},[416,113224,113226],{"className":418,"code":113225,"language":420,"meta":395,"style":395},"python ch7_reacher.py\n",[422,113227,113228],{"__ignoreMap":395},[425,113229,113230,113232],{"class":427,"line":428},[425,113231,31135],{"class":431},[425,113233,113220],{"class":435},[14,113235,102327],{"id":102327},[19,113237,113238],{},"读取 site 坐标：",[416,113240,113242],{"className":31133,"code":113241,"language":31135,"meta":395,"style":395},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[422,113243,113244],{"__ignoreMap":395},[425,113245,113246,113248,113250,113252,113254],{"class":427,"line":428},[425,113247,32702],{"class":1155},[425,113249,112611],{"class":431},[425,113251,112614],{"class":701},[425,113253,2316],{"class":691},[425,113255,112619],{"class":701},[19,113257,113258],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,113260,111215],{},[416,113262,113264],{"className":31133,"code":113263,"language":31135,"meta":395,"style":395},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[422,113265,113266],{"__ignoreMap":395},[425,113267,113268,113270],{"class":427,"line":428},[425,113269,18043],{"class":1155},[425,113271,112723],{"class":701},[19,113273,113274],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,113276,110540],{},[416,113278,113280],{"className":31133,"code":113279,"language":31135,"meta":395,"style":395},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[422,113281,113282,113294,113307],{"__ignoreMap":395},[425,113283,113284,113286,113288,113290,113292],{"class":427,"line":428},[425,113285,112351],{"class":701},[425,113287,1204],{"class":1155},[425,113289,112356],{"class":701},[425,113291,1680],{"class":1155},[425,113293,112361],{"class":701},[425,113295,113296,113299,113301,113303,113305],{"class":427,"line":698},[425,113297,113298],{"class":701},"control_cost ",[425,113300,1204],{"class":1155},[425,113302,112792],{"class":691},[425,113304,7518],{"class":1155},[425,113306,112797],{"class":701},[425,113308,113309,113311,113313,113315,113317,113319,113321],{"class":427,"line":710},[425,113310,18043],{"class":1155},[425,113312,110552],{"class":691},[425,113314,1159],{"class":701},[425,113316,1680],{"class":1155},[425,113318,112351],{"class":701},[425,113320,1680],{"class":1155},[425,113322,112814],{"class":701},[19,113324,113325],{},"奖励由两部分组成：",[972,113327,113328,113333],{},[450,113329,113330,113332],{},[422,113331,112378],{},"：末端离目标越远，奖励越低。",[450,113334,113335,113338],{},[422,113336,113337],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,113340,113341],{},"简单控制器：",[416,113343,113345],{"className":31133,"code":113344,"language":31135,"meta":395,"style":395},"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",[422,113346,113347,113360,113392],{"__ignoreMap":395},[425,113348,113349,113352,113354,113356,113358],{"class":427,"line":428},[425,113350,113351],{"class":701},"error ",[425,113353,1204],{"class":1155},[425,113355,112923],{"class":701},[425,113357,1680],{"class":1155},[425,113359,112928],{"class":701},[425,113361,113362,113364,113366,113368,113370,113372,113374,113376,113378,113380,113382,113384,113386,113388,113390],{"class":427,"line":698},[425,113363,106626],{"class":701},[425,113365,1341],{"class":691},[425,113367,5443],{"class":701},[425,113369,1204],{"class":1155},[425,113371,112945],{"class":701},[425,113373,106015],{"class":691},[425,113375,7518],{"class":1155},[425,113377,112952],{"class":701},[425,113379,1235],{"class":691},[425,113381,112957],{"class":701},[425,113383,1680],{"class":1155},[425,113385,103158],{"class":691},[425,113387,13434],{"class":701},[425,113389,103158],{"class":691},[425,113391,1165],{"class":701},[425,113393,113394,113396,113398,113400,113402,113404,113406,113408,113410,113412,113414,113416,113418,113420,113422],{"class":427,"line":710},[425,113395,106626],{"class":701},[425,113397,1367],{"class":691},[425,113399,5443],{"class":701},[425,113401,1204],{"class":1155},[425,113403,112945],{"class":701},[425,113405,106015],{"class":691},[425,113407,7518],{"class":1155},[425,113409,112952],{"class":701},[425,113411,1341],{"class":691},[425,113413,112957],{"class":701},[425,113415,1680],{"class":1155},[425,113417,103158],{"class":691},[425,113419,13434],{"class":701},[425,113421,103158],{"class":691},[425,113423,1165],{"class":701},[19,113425,113426],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[14,113428,102463],{"id":102463},[416,113430,113431],{"className":31133,"code":113241,"language":31135,"meta":395,"style":395},[422,113432,113433],{"__ignoreMap":395},[425,113434,113435,113437,113439,113441,113443],{"class":427,"line":428},[425,113436,32702],{"class":1155},[425,113438,112611],{"class":431},[425,113440,112614],{"class":701},[425,113442,2316],{"class":691},[425,113444,112619],{"class":701},[19,113446,113447,113448,113450,113451,83294,113453,998],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[422,113449,80565],{}," 是 site 的名字，比如 ",[422,113452,112291],{},[422,113454,112714],{},[416,113456,113458],{"className":31133,"code":113457,"language":31135,"meta":395,"style":395},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[422,113459,113460],{"__ignoreMap":395},[425,113461,113462,113464,113466],{"class":427,"line":428},[425,113463,104389],{"class":701},[425,113465,1204],{"class":1155},[425,113467,112628],{"class":701},[19,113469,113470],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[416,113472,113474],{"className":31133,"code":113473,"language":31135,"meta":395,"style":395},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[422,113475,113476,113488],{"__ignoreMap":395},[425,113477,113478,113480,113482,113484,113486],{"class":427,"line":428},[425,113479,2544],{"class":1155},[425,113481,104204],{"class":701},[425,113483,2057],{"class":1155},[425,113485,5093],{"class":691},[425,113487,4739],{"class":701},[425,113489,113490,113492,113494,113496,113498,113500,113502,113504,113506,113508],{"class":427,"line":698},[425,113491,104650],{"class":1155},[425,113493,104190],{"class":691},[425,113495,1159],{"class":701},[425,113497,1210],{"class":1155},[425,113499,112653],{"class":435},[425,113501,2043],{"class":691},[425,113503,80565],{"class":701},[425,113505,2093],{"class":691},[425,113507,1400],{"class":435},[425,113509,1165],{"class":701},[19,113511,113512,113513,113516,113517,113519],{},"如果 site 没找到，就主动报错。",[422,113514,113515],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[422,113518,80565],{}," 的值放进字符串里。",[416,113521,113523],{"className":31133,"code":113522,"language":31135,"meta":395,"style":395},"return data.site_xpos[site_id].copy()\n",[422,113524,113525],{"__ignoreMap":395},[425,113526,113527,113529],{"class":427,"line":428},[425,113528,18043],{"class":1155},[425,113530,112670],{"class":701},[19,113532,113533,113534,113536,113537,113540],{},"返回这个 site 的世界坐标。",[422,113535,104435],{}," 里的每一行都是一个 site 的 ",[422,113538,113539],{},"(x, y, z)"," 坐标。",[416,113542,113544],{"className":31133,"code":113543,"language":31135,"meta":395,"style":395},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[422,113545,113546],{"__ignoreMap":395},[425,113547,113548,113550,113552],{"class":427,"line":428},[425,113549,32702],{"class":1155},[425,113551,112685],{"class":431},[425,113553,112688],{"class":701},[19,113555,113556],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[416,113558,113560],{"className":31133,"code":113559,"language":31135,"meta":395,"style":395},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[422,113561,113562,113574],{"__ignoreMap":395},[425,113563,113564,113566,113568,113570,113572],{"class":427,"line":428},[425,113565,112323],{"class":701},[425,113567,1204],{"class":1155},[425,113569,112698],{"class":701},[425,113571,112291],{"class":435},[425,113573,1165],{"class":701},[425,113575,113576,113578,113580,113582,113584],{"class":427,"line":698},[425,113577,112333],{"class":701},[425,113579,1204],{"class":1155},[425,113581,112698],{"class":701},[425,113583,112714],{"class":435},[425,113585,1165],{"class":701},[19,113587,113588],{},"分别读取末端点和目标点的世界坐标。",[416,113590,113591],{"className":31133,"code":113263,"language":31135,"meta":395,"style":395},[422,113592,113593],{"__ignoreMap":395},[425,113594,113595,113597],{"class":427,"line":428},[425,113596,18043],{"class":1155},[425,113598,112723],{"class":701},[19,113600,113601],{},"把四部分拼成一个观测数组：",[416,113603,113606],{"className":113604,"code":113605,"language":6187,"meta":395},[6185],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[422,113607,113605],{"__ignoreMap":395},[416,113609,113611],{"className":31133,"code":113610,"language":31135,"meta":395,"style":395},"dist = np.linalg.norm(tip - target)\n",[422,113612,113613],{"__ignoreMap":395},[425,113614,113615,113617,113619,113621,113623],{"class":427,"line":428},[425,113616,112351],{"class":701},[425,113618,1204],{"class":1155},[425,113620,112356],{"class":701},[425,113622,1680],{"class":1155},[425,113624,112361],{"class":701},[19,113626,113627,113628,113631,113632,113635],{},"计算 tip 到 target 的距离。",[422,113629,113630],{},"tip - target"," 得到一个三维向量，",[422,113633,113634],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,113637,15630],{},[416,113639,113642],{"className":113640,"code":113641,"language":6187,"meta":395},[6185],"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",[422,113643,113641],{"__ignoreMap":395},[416,113645,113647],{"className":31133,"code":113646,"language":31135,"meta":395,"style":395},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[422,113648,113649],{"__ignoreMap":395},[425,113650,113651,113653,113655,113657,113659],{"class":427,"line":428},[425,113652,113298],{"class":701},[425,113654,1204],{"class":1155},[425,113656,112792],{"class":691},[425,113658,7518],{"class":1155},[425,113660,112797],{"class":701},[19,113662,113663,113664,113667,113668,113671],{},"计算动作惩罚。",[422,113665,113666],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[422,113669,113670],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[416,113673,113675],{"className":31133,"code":113674,"language":31135,"meta":395,"style":395},"return float(-dist - control_cost)\n",[422,113676,113677],{"__ignoreMap":395},[425,113678,113679,113681,113683,113685,113687,113689,113691],{"class":427,"line":428},[425,113680,18043],{"class":1155},[425,113682,110552],{"class":691},[425,113684,1159],{"class":701},[425,113686,1680],{"class":1155},[425,113688,112351],{"class":701},[425,113690,1680],{"class":1155},[425,113692,112814],{"class":701},[19,113694,113695],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[416,113697,113698],{"className":31133,"code":111558,"language":31135,"meta":395,"style":395},[422,113699,113700],{"__ignoreMap":395},[425,113701,113702,113704,113706],{"class":427,"line":428},[425,113703,111565],{"class":701},[425,113705,1204],{"class":1155},[425,113707,105516],{"class":691},[19,113709,113710],{},"累计奖励变量，记录整个运行过程的总分。",[416,113712,113714],{"className":31133,"code":113713,"language":31135,"meta":395,"style":395},"for step in range(500):\n",[422,113715,113716],{"__ignoreMap":395},[425,113717,113718,113720,113722,113724,113726,113728,113730],{"class":427,"line":428},[425,113719,4025],{"class":1155},[425,113721,32371],{"class":701},[425,113723,27034],{"class":1155},[425,113725,33198],{"class":691},[425,113727,1159],{"class":701},[425,113729,65829],{"class":691},[425,113731,31541],{"class":701},[19,113733,113734],{},"运行 500 个控制步。",[416,113736,113737],{"className":31133,"code":105298,"language":31135,"meta":395,"style":395},[422,113738,113739],{"__ignoreMap":395},[425,113740,113741],{"class":427,"line":428},[425,113742,105298],{"class":701},[19,113744,113745,113746,101773,113748,113750],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[422,113747,103986],{},[422,113749,103989],{}," 是当前状态下的坐标。",[416,113752,113754],{"className":31133,"code":113753,"language":31135,"meta":395,"style":395},"error = target - tip\n",[422,113755,113756],{"__ignoreMap":395},[425,113757,113758,113760,113762,113764,113766],{"class":427,"line":428},[425,113759,113351],{"class":701},[425,113761,1204],{"class":1155},[425,113763,112923],{"class":701},[425,113765,1680],{"class":1155},[425,113767,112928],{"class":701},[19,113769,113770],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[416,113772,113774],{"className":31133,"code":113773,"language":31135,"meta":395,"style":395},"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",[422,113775,113776,113808],{"__ignoreMap":395},[425,113777,113778,113780,113782,113784,113786,113788,113790,113792,113794,113796,113798,113800,113802,113804,113806],{"class":427,"line":428},[425,113779,106626],{"class":701},[425,113781,1341],{"class":691},[425,113783,5443],{"class":701},[425,113785,1204],{"class":1155},[425,113787,112945],{"class":701},[425,113789,106015],{"class":691},[425,113791,7518],{"class":1155},[425,113793,112952],{"class":701},[425,113795,1235],{"class":691},[425,113797,112957],{"class":701},[425,113799,1680],{"class":1155},[425,113801,103158],{"class":691},[425,113803,13434],{"class":701},[425,113805,103158],{"class":691},[425,113807,1165],{"class":701},[425,113809,113810,113812,113814,113816,113818,113820,113822,113824,113826,113828,113830,113832,113834,113836,113838],{"class":427,"line":698},[425,113811,106626],{"class":701},[425,113813,1367],{"class":691},[425,113815,5443],{"class":701},[425,113817,1204],{"class":1155},[425,113819,112945],{"class":701},[425,113821,106015],{"class":691},[425,113823,7518],{"class":1155},[425,113825,112952],{"class":701},[425,113827,1341],{"class":691},[425,113829,112957],{"class":701},[425,113831,1680],{"class":1155},[425,113833,103158],{"class":691},[425,113835,13434],{"class":701},[425,113837,103158],{"class":691},[425,113839,1165],{"class":701},[19,113841,113842,113843,113846],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[422,113844,113845],{},"error -> ctrl -> step"," 的流程。",[416,113848,113849],{"className":31133,"code":105260,"language":31135,"meta":395,"style":395},[422,113850,113851],{"__ignoreMap":395},[425,113852,113853],{"class":427,"line":428},[425,113854,105260],{"class":701},[19,113856,113857],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[416,113859,113861],{"className":31133,"code":113860,"language":31135,"meta":395,"style":395},"obs = get_obs(model, data)\n",[422,113862,113863],{"__ignoreMap":395},[425,113864,113865,113867,113869],{"class":427,"line":428},[425,113866,111609],{"class":701},[425,113868,1204],{"class":1155},[425,113870,113046],{"class":701},[19,113872,113873,113874,113877],{},"读取最新观测。后面打印 ",[422,113875,113876],{},"obs.shape[0]","，用来确认观测维度是 10。",[1099,113879,103071],{"id":103070},[19,113881,113882],{},"观测维度为:",[416,113884,113887],{"className":113885,"code":113886,"language":6187,"meta":395},[6185],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[422,113888,113886],{"__ignoreMap":395},[19,113890,113891],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,113893,113894],{},"程序每 100 步打印：",[416,113896,113899],{"className":113897,"code":113898,"language":6187,"meta":395},[6185],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[422,113900,113898],{"__ignoreMap":395},[19,113902,113903,113904,113906],{},"如果控制有效，你应该看到最终 ",[422,113905,103986],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[1099,113908,103103],{"id":103102},[972,113910,113911,113914,113917,113923,113929,113936,113946],{},[450,113912,113913],{},"修改目标点位置。",[450,113915,113916],{},"重新运行，观察最终 tip 是否变化。",[450,113918,113919,113920,113922],{},"把 gravity 改成 ",[422,113921,103344],{},"，观察控制是否变差。",[450,113924,111936,113925,111940,113927,998],{},[422,113926,102913],{},[422,113928,1235],{},[450,113930,103166,113931,103169,113933,113935],{},[422,113932,111351],{},[422,113934,108062],{},"，观察机械臂是否更难移动。",[450,113937,103166,113938,83285,113940,103169,113942,113945],{},[422,113939,103989],{},[422,113941,104901],{},[422,113943,113944],{},"0.2 0 0.6","，观察 reward 和 final tip。",[450,113947,113948],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[1099,113950,103208],{"id":103207},[14,113952,113954],{"id":113953},"site-not-found",[422,113955,113956],{},"site not found",[19,113958,113959,113960,101773,113963,998],{},"检查 XML 中是否有 ",[422,113961,113962],{},"site name=\"tip\"",[422,113964,113965],{},"site name=\"target\"",[14,113967,113968],{"id":113968},"机械臂完全不动",[19,113970,103278],{},[972,113972,113973,113978,113981,113986],{},[450,113974,113975,113977],{},[422,113976,102913],{}," 是否为 2",[450,113979,113980],{},"actuator 是否引用正确 joint",[450,113982,113983,113985],{},[422,113984,101831],{}," 是否被赋值",[450,113987,113988,113989],{},"是否执行了 ",[422,113990,101440],{},[14,113992,113993],{"id":113993},"控制效果不好",[19,113995,113996],{},"正常。本章重点不是控制器最优，而是任务结构:",[416,113998,114001],{"className":113999,"code":114000,"language":6187,"meta":395},[6185],"obs → action → mj_step → reward → next_obs\n",[422,114002,114000],{"__ignoreMap":395},[14,114004,114006],{"id":114005},"tip-坐标不变化","tip 坐标不变化",[19,114008,103330],{},[972,114010,114011,114016,114024,114033],{},[450,114012,114013,114014,998],{},"是否每步调用了 ",[422,114015,101440],{},[450,114017,114018,114019,101773,114021,998],{},"是否写入了 ",[422,114020,106881],{},[422,114022,114023],{},"data.ctrl[1]",[450,114025,114026,114027,1362,114030,998],{},"actuator 是否正确引用 ",[422,114028,114029],{},"joint1",[422,114031,114032],{},"joint2",[450,114034,114035],{},"控制输入是否太小。",[14,114037,114038],{"id":114038},"目标点不会动",[19,114040,114041],{},"本章的 target 是固定 site：",[416,114043,114045],{"className":53822,"code":114044,"language":53824,"meta":395,"style":395},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[422,114046,114047],{"__ignoreMap":395},[425,114048,114049,114051,114053,114055,114057,114059,114061,114063,114066],{"class":427,"line":428},[425,114050,2057],{"class":701},[425,114052,103965],{"class":52055},[425,114054,15917],{"class":431},[425,114056,1204],{"class":701},[425,114058,112714],{"class":435},[425,114060,101861],{"class":431},[425,114062,1204],{"class":701},[425,114064,114065],{"class":435},"\"0.5 0 0.4\"",[425,114067,114068],{"class":701}," ...\u002F>\n",[19,114070,114071,114072,114074],{},"它直接挂在 ",[422,114073,102596],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[14,114076,114077],{"id":114077},"机械臂不像真实机械臂",[19,114079,114080],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[1099,114082,103362],{"id":103361},[19,114084,114085],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,114087,114088],{},"核心公式：",[416,114090,114093],{"className":114091,"code":114092,"language":6187,"meta":395},[6185],"distance = ||tip - target||\nreward = -distance - action_cost\n",[422,114094,114092],{"__ignoreMap":395},[19,114096,114097],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[1074,114099,114100],{},"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":395,"searchDepth":698,"depth":698,"links":114102},[114103,114104,114105,114110,114114,114115,114116,114124],{"id":101401,"depth":698,"text":101402},{"id":101524,"depth":698,"text":101525},{"id":101799,"depth":698,"text":101800,"children":114106},[114107,114108,114109],{"id":112306,"depth":710,"text":112307},{"id":112382,"depth":710,"text":112382},{"id":112412,"depth":710,"text":112413},{"id":102007,"depth":698,"text":102008,"children":114111},[114112,114113],{"id":102327,"depth":710,"text":102327},{"id":102463,"depth":710,"text":102463},{"id":103070,"depth":698,"text":103071},{"id":103102,"depth":698,"text":103103},{"id":103207,"depth":698,"text":103208,"children":114117},[114118,114119,114120,114121,114122,114123],{"id":113953,"depth":710,"text":113956},{"id":113968,"depth":710,"text":113968},{"id":113993,"depth":710,"text":113993},{"id":114005,"depth":710,"text":114006},{"id":114038,"depth":710,"text":114038},{"id":114077,"depth":710,"text":114077},{"id":103361,"depth":698,"text":103362},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":112110,"description":395},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":114131,"title":114132,"body":114133,"description":395,"extension":1082,"meta":117595,"navigation":1084,"path":117596,"seo":117597,"stem":117598,"__hash__":117599},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":114134,"toc":117566},[114135,114138,114140,114143,114146,114171,114174,114180,114183,114189,114191,114193,114217,114219,114237,114239,114282,114284,114311,114313,114316,114368,114371,114377,114386,114389,114427,114430,114469,114472,114480,114487,114490,114496,114498,114552,114559,114604,114607,114611,114627,114637,114639,115900,115902,115914,115916,115927,115929,115932,115953,115956,115959,115992,115998,116001,116034,116037,116040,116081,116086,116100,116103,116116,116121,116144,116146,116161,116171,116186,116193,116213,116228,116246,116249,116266,116274,116290,116296,116328,116341,116373,116383,116418,116432,116478,116492,116534,116545,116558,116564,116597,116600,116627,116637,116677,116687,116704,116711,116729,116732,116773,116786,116801,116804,116827,116830,116842,116845,116864,116869,116890,116893,116908,116911,116945,116957,116972,116975,117000,117003,117022,117025,117057,117060,117084,117090,117120,117127,117140,117143,117145,117147,117153,117156,117159,117171,117174,117176,117230,117232,117236,117242,117251,117254,117261,117263,117286,117289,117293,117295,117313,117319,117321,117354,117357,117363,117367,117370,117390,117395,117399,117406,117426,117431,117435,117438,117458,117461,117547,117551,117554,117560,117563],[10,114136,114132],{"id":114137},"_8gymnasium-风格强化学习接口基础",[1099,114139,101402],{"id":101401},[19,114141,114142],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,114144,114145],{},"你将实现:",[416,114147,114149],{"className":31133,"code":114148,"language":31135,"meta":395,"style":395},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[422,114150,114151,114161],{"__ignoreMap":395},[425,114152,114153,114156,114158],{"class":427,"line":428},[425,114154,114155],{"class":701},"obs, info ",[425,114157,1204],{"class":1155},[425,114159,114160],{"class":701}," env.reset()\n",[425,114162,114163,114166,114168],{"class":427,"line":698},[425,114164,114165],{"class":701},"obs, reward, terminated, truncated, info ",[425,114167,1204],{"class":1155},[425,114169,114170],{"class":701}," env.step(action)\n",[19,114172,114173],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,114175,114176,114177,114179],{},"前面章节的代码都是“脚本式”的：在 ",[422,114178,103050],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,114181,114182],{},"可以先记住 Gymnasium 环境的核心交互：",[416,114184,114187],{"className":114185,"code":114186,"language":6187,"meta":395},[6185],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[422,114188,114186],{"__ignoreMap":395},[1099,114190,101525],{"id":101524},[19,114192,101528],{},[416,114194,114195],{"className":418,"code":105143,"language":420,"meta":395,"style":395},[422,114196,114197],{"__ignoreMap":395},[425,114198,114199,114201,114203,114205,114207,114209,114211,114213,114215],{"class":427,"line":428},[425,114200,652],{"class":431},[425,114202,27305],{"class":435},[425,114204,24828],{"class":435},[425,114206,27389],{"class":691},[425,114208,105158],{"class":435},[425,114210,101553],{"class":435},[425,114212,103256],{"class":435},[425,114214,101569],{"class":435},[425,114216,105167],{"class":435},[19,114218,103574],{},[416,114220,114222],{"className":418,"code":114221,"language":420,"meta":395,"style":395},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[422,114223,114224],{"__ignoreMap":395},[425,114225,114226,114228,114230,114232,114234],{"class":427,"line":428},[425,114227,24825],{"class":431},[425,114229,24828],{"class":435},[425,114231,101685],{"class":435},[425,114233,108466],{"class":435},[425,114235,114236],{"class":435}," gymnasium\n",[19,114238,103591],{},[416,114240,114242],{"className":418,"code":114241,"language":420,"meta":395,"style":395},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[422,114243,114244,114261,114270],{"__ignoreMap":395},[425,114245,114246,114248,114250,114252,114255,114257,114259],{"class":427,"line":428},[425,114247,31085],{"class":431},[425,114249,29931],{"class":435},[425,114251,26106],{"class":691},[425,114253,114254],{"class":435}," mujoco-gym-api",[425,114256,101730],{"class":435},[425,114258,101733],{"class":691},[425,114260,101736],{"class":691},[425,114262,114263,114265,114267],{"class":427,"line":698},[425,114264,31085],{"class":431},[425,114266,101743],{"class":435},[425,114268,114269],{"class":435}," mujoco-gym-api\n",[425,114271,114272,114274,114276,114278,114280],{"class":427,"line":710},[425,114273,24825],{"class":431},[425,114275,24828],{"class":435},[425,114277,101685],{"class":435},[425,114279,108466],{"class":435},[425,114281,114236],{"class":435},[19,114283,101759],{},[972,114285,114286,114296,114299,114305],{},[450,114287,114288,114289,114292,114293,998],{},"本章使用 ",[422,114290,114291],{},"gymnasium","，不是旧版 ",[422,114294,114295],{},"gym",[450,114297,114298],{},"Gymnasium API 与旧 Gym API 有差异。",[450,114300,114301,114302,998],{},"旧 Gym 常见返回值是 4 个: ",[422,114303,114304],{},"obs, reward, done, info",[450,114306,114307,114308,998],{},"Gymnasium 返回值是 5 个: ",[422,114309,114310],{},"obs, reward, terminated, truncated, info",[1099,114312,101800],{"id":101799},[19,114314,114315],{},"强化学习环境接口包含:",[35,114317,114318,114327],{},[38,114319,114320],{},[41,114321,114322,114325],{},[44,114323,114324],{"align":46},"方法",[44,114326,103451],{"align":46},[55,114328,114329,114339,114349,114359],{},[41,114330,114331,114336],{},[60,114332,114333],{"align":46},[422,114334,114335],{},"reset()",[60,114337,114338],{"align":46},"重置环境",[41,114340,114341,114346],{},[60,114342,114343],{"align":46},[422,114344,114345],{},"step(action)",[60,114347,114348],{"align":46},"执行动作",[41,114350,114351,114356],{},[60,114352,114353],{"align":46},[422,114354,114355],{},"observation_space",[60,114357,114358],{"align":46},"观测空间",[41,114360,114361,114366],{},[60,114362,114363],{"align":46},[422,114364,114365],{},"action_space",[60,114367,24651],{"align":46},[19,114369,114370],{},"一个最小环境需要完成:",[416,114372,114375],{"className":114373,"code":114374,"language":6187,"meta":395},[6185],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[422,114376,114374],{"__ignoreMap":395},[14,114378,114380,101773,114383,105393],{"id":114379},"terminated-和-truncated-的区别",[422,114381,114382],{},"terminated",[422,114384,114385],{},"truncated",[19,114387,114388],{},"Gymnasium 把“结束”拆成两个概念：",[35,114390,114391,114401],{},[38,114392,114393],{},[41,114394,114395,114397,114399],{},[44,114396,105329],{"align":46},[44,114398,101455],{"align":46},[44,114400,22184],{"align":46},[55,114402,114403,114415],{},[41,114404,114405,114409,114412],{},[60,114406,114407],{"align":46},[422,114408,114382],{},[60,114410,114411],{"align":46},"任务自然结束",[60,114413,114414],{"align":46},"机械臂到达目标、机器人摔倒",[41,114416,114417,114421,114424],{},[60,114418,114419],{"align":46},[422,114420,114385],{},[60,114422,114423],{"align":46},"因外部限制截断",[60,114425,114426],{"align":46},"达到最大步数、时间限制",[19,114428,114429],{},"本章中：",[416,114431,114433],{"className":31133,"code":114432,"language":31135,"meta":395,"style":395},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[422,114434,114435,114450],{"__ignoreMap":395},[425,114436,114437,114440,114442,114445,114447],{"class":427,"line":428},[425,114438,114439],{"class":701},"terminated ",[425,114441,1204],{"class":1155},[425,114443,114444],{"class":701}," dist ",[425,114446,2057],{"class":1155},[425,114448,114449],{"class":691}," 0.05\n",[425,114451,114452,114455,114457,114459,114462,114464,114466],{"class":427,"line":698},[425,114453,114454],{"class":701},"truncated ",[425,114456,1204],{"class":1155},[425,114458,39628],{"class":691},[425,114460,114461],{"class":701},".steps ",[425,114463,2712],{"class":1155},[425,114465,39628],{"class":691},[425,114467,114468],{"class":701},".max_steps\n",[19,114470,114471],{},"也就是：",[972,114473,114474,114477],{},[450,114475,114476],{},"末端距离目标小于 0.05，任务成功结束。",[450,114478,114479],{},"步数超过上限，episode 被截断。",[14,114481,114483,101773,114485],{"id":114482},"observation_space-和-action_space",[422,114484,114355],{},[422,114486,114365],{},[19,114488,114489],{},"这两个对象告诉算法：",[416,114491,114494],{"className":114492,"code":114493,"language":6187,"meta":395},[6185],"观测长什么样\n动作允许多大\n",[422,114495,114493],{"__ignoreMap":395},[19,114497,15630],{},[416,114499,114501],{"className":31133,"code":114500,"language":31135,"meta":395,"style":395},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[422,114502,114503],{"__ignoreMap":395},[425,114504,114505,114507,114510,114512,114515,114518,114521,114523,114525,114528,114530,114532,114534,114536,114538,114540,114542,114545,114547,114549],{"class":427,"line":428},[425,114506,31578],{"class":691},[425,114508,114509],{"class":701},".action_space ",[425,114511,1204],{"class":1155},[425,114513,114514],{"class":701}," spaces.Box(",[425,114516,114517],{"class":6216},"low",[425,114519,114520],{"class":1155},"=-",[425,114522,103158],{"class":691},[425,114524,13434],{"class":701},[425,114526,114527],{"class":6216},"high",[425,114529,1204],{"class":1155},[425,114531,103158],{"class":691},[425,114533,13434],{"class":701},[425,114535,96718],{"class":6216},[425,114537,1204],{"class":1155},[425,114539,1159],{"class":701},[425,114541,1235],{"class":691},[425,114543,114544],{"class":701},",), ",[425,114546,94255],{"class":6216},[425,114548,1204],{"class":1155},[425,114550,114551],{"class":701},"np.float32)\n",[19,114553,114554,114555,114558],{},"表示动作是 2 维数组，每个值都在 ",[422,114556,114557],{},"[-1, 1]"," 范围内。",[416,114560,114562],{"className":31133,"code":114561,"language":31135,"meta":395,"style":395},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[422,114563,114564],{"__ignoreMap":395},[425,114565,114566,114568,114571,114573,114575,114577,114579,114582,114584,114586,114588,114590,114592,114594,114596,114598,114600,114602],{"class":427,"line":428},[425,114567,31578],{"class":691},[425,114569,114570],{"class":701},".observation_space ",[425,114572,1204],{"class":1155},[425,114574,114514],{"class":701},[425,114576,114517],{"class":6216},[425,114578,114520],{"class":1155},[425,114580,114581],{"class":701},"np.inf, ",[425,114583,114527],{"class":6216},[425,114585,1204],{"class":1155},[425,114587,114581],{"class":701},[425,114589,96718],{"class":6216},[425,114591,1204],{"class":1155},[425,114593,1159],{"class":701},[425,114595,1594],{"class":691},[425,114597,114544],{"class":701},[425,114599,94255],{"class":6216},[425,114601,1204],{"class":1155},[425,114603,114551],{"class":701},[19,114605,114606],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[14,114608,114610],{"id":114609},"frame_skip-是什么","frame_skip 是什么",[416,114612,114614],{"className":31133,"code":114613,"language":31135,"meta":395,"style":395},"self.frame_skip = 5\n",[422,114615,114616],{"__ignoreMap":395},[425,114617,114618,114620,114623,114625],{"class":427,"line":428},[425,114619,31578],{"class":691},[425,114621,114622],{"class":701},".frame_skip ",[425,114624,1204],{"class":1155},[425,114626,55182],{"class":691},[19,114628,114629,114630,114633,114634,114636],{},"表示外部调用一次 ",[422,114631,114632],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[422,114635,101970],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[1099,114638,102008],{"id":102007},[416,114640,114642],{"className":31133,"code":114641,"language":31135,"meta":395,"style":395},"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",[422,114643,114644,114656,114662,114672,114683,114687,114691,114699,114704,114708,114712,114716,114720,114724,114728,114732,114737,114741,114745,114749,114754,114758,114762,114766,114770,114774,114778,114782,114786,114790,114794,114798,114802,114806,114824,114839,114843,114856,114866,114881,114898,114902,114923,114942,114967,114981,114985,114995,115007,115017,115021,115063,115101,115105,115115,115131,115146,115165,115172,115176,115189,115204,115219,115232,115251,115267,115271,115312,115327,115342,115346,115385,115396,115409,115413,115423,115432,115436,115446,115461,115479,115483,115494,115511,115524,115528,115538,115542,115553,115564,115568,115582,115596,115612,115616,115629,115646,115661,115668,115672,115676,115688,115698,115716,115728,115740,115744,115752,115768,115777,115786,115794,115836,115849,115854,115858,115876,115880,115884,115896],{"__ignoreMap":395},[425,114645,114646,114648,114651,114653],{"class":427,"line":428},[425,114647,31147],{"class":1155},[425,114649,114650],{"class":701}," gymnasium ",[425,114652,32138],{"class":1155},[425,114654,114655],{"class":701}," gym\n",[425,114657,114658,114660],{"class":427,"line":698},[425,114659,31147],{"class":1155},[425,114661,102056],{"class":701},[425,114663,114664,114666,114668,114670],{"class":427,"line":710},[425,114665,31147],{"class":1155},[425,114667,32135],{"class":701},[425,114669,32138],{"class":1155},[425,114671,32141],{"class":701},[425,114673,114674,114676,114678,114680],{"class":427,"line":721},[425,114675,31492],{"class":1155},[425,114677,114650],{"class":701},[425,114679,31147],{"class":1155},[425,114681,114682],{"class":701}," spaces\n",[425,114684,114685],{"class":427,"line":735},[425,114686,3400],{"emptyLinePlaceholder":1084},[425,114688,114689],{"class":427,"line":743},[425,114690,3400],{"emptyLinePlaceholder":1084},[425,114692,114693,114695,114697],{"class":427,"line":751},[425,114694,102069],{"class":691},[425,114696,14563],{"class":1155},[425,114698,102074],{"class":435},[425,114700,114701],{"class":427,"line":759},[425,114702,114703],{"class":435},"\u003Cmujoco model=\"gym_reacher\">\n",[425,114705,114706],{"class":427,"line":770},[425,114707,112493],{"class":435},[425,114709,114710],{"class":427,"line":780},[425,114711,3400],{"emptyLinePlaceholder":1084},[425,114713,114714],{"class":427,"line":790},[425,114715,102093],{"class":435},[425,114717,114718],{"class":427,"line":805},[425,114719,112511],{"class":435},[425,114721,114722],{"class":427,"line":818},[425,114723,3400],{"emptyLinePlaceholder":1084},[425,114725,114726],{"class":427,"line":831},[425,114727,112520],{"class":435},[425,114729,114730],{"class":427,"line":841},[425,114731,112525],{"class":435},[425,114733,114734],{"class":427,"line":852},[425,114735,114736],{"class":435},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[425,114738,114739],{"class":427,"line":862},[425,114740,3400],{"emptyLinePlaceholder":1084},[425,114742,114743],{"class":427,"line":878},[425,114744,112539],{"class":435},[425,114746,114747],{"class":427,"line":914},[425,114748,112544],{"class":435},[425,114750,114751],{"class":427,"line":943},[425,114752,114753],{"class":435},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[425,114755,114756],{"class":427,"line":956},[425,114757,112554],{"class":435},[425,114759,114760],{"class":427,"line":964},[425,114761,107193],{"class":435},[425,114763,114764],{"class":427,"line":2733},[425,114765,102122],{"class":435},[425,114767,114768],{"class":427,"line":2750},[425,114769,102127],{"class":435},[425,114771,114772],{"class":427,"line":2755},[425,114773,3400],{"emptyLinePlaceholder":1084},[425,114775,114776],{"class":427,"line":2760},[425,114777,107210],{"class":435},[425,114779,114780],{"class":427,"line":2765},[425,114781,112579],{"class":435},[425,114783,114784],{"class":427,"line":2779},[425,114785,112584],{"class":435},[425,114787,114788],{"class":427,"line":2784},[425,114789,107220],{"class":435},[425,114791,114792],{"class":427,"line":3577},[425,114793,102132],{"class":435},[425,114795,114796],{"class":427,"line":3591},[425,114797,96453],{"class":435},[425,114799,114800],{"class":427,"line":3599},[425,114801,3400],{"emptyLinePlaceholder":1084},[425,114803,114804],{"class":427,"line":3604},[425,114805,3400],{"emptyLinePlaceholder":1084},[425,114807,114808,114810,114813,114815,114817,114819,114822],{"class":427,"line":3610},[425,114809,15691],{"class":1155},[425,114811,114812],{"class":431}," ReacherEnv",[425,114814,1159],{"class":701},[425,114816,114295],{"class":431},[425,114818,1706],{"class":701},[425,114820,114821],{"class":431},"Env",[425,114823,31541],{"class":701},[425,114825,114826,114829,114831,114833,114836],{"class":427,"line":3616},[425,114827,114828],{"class":701},"    metadata ",[425,114830,1204],{"class":1155},[425,114832,5448],{"class":701},[425,114834,114835],{"class":435},"\"render_modes\"",[425,114837,114838],{"class":701},": []}\n",[425,114840,114841],{"class":427,"line":3621},[425,114842,3400],{"emptyLinePlaceholder":1084},[425,114844,114845,114847,114849,114852,114854],{"class":427,"line":8948},[425,114846,31556],{"class":1155},[425,114848,31559],{"class":691},[425,114850,114851],{"class":701},"(self) -> ",[425,114853,96441],{"class":691},[425,114855,4739],{"class":701},[425,114857,114858,114860,114862,114864],{"class":427,"line":8972},[425,114859,31572],{"class":691},[425,114861,18258],{"class":701},[425,114863,31584],{"class":691},[425,114865,2976],{"class":701},[425,114867,114868,114870,114873,114875,114877,114879],{"class":427,"line":8977},[425,114869,31600],{"class":691},[425,114871,114872],{"class":701},".model ",[425,114874,1204],{"class":1155},[425,114876,102167],{"class":701},[425,114878,102069],{"class":691},[425,114880,1165],{"class":701},[425,114882,114883,114885,114888,114890,114893,114895],{"class":427,"line":8983},[425,114884,31600],{"class":691},[425,114886,114887],{"class":701},".data ",[425,114889,1204],{"class":1155},[425,114891,114892],{"class":701}," mujoco.MjData(",[425,114894,31578],{"class":691},[425,114896,114897],{"class":701},".model)\n",[425,114899,114900],{"class":427,"line":9010},[425,114901,3400],{"emptyLinePlaceholder":1084},[425,114903,114904,114906,114909,114911,114914,114916,114919,114921],{"class":427,"line":9015},[425,114905,31600],{"class":691},[425,114907,114908],{"class":701},".tip_site_id ",[425,114910,1204],{"class":1155},[425,114912,114913],{"class":701}," mujoco.mj_name2id(",[425,114915,31578],{"class":691},[425,114917,114918],{"class":701},".model, mujoco.mjtObj.mjOBJ_SITE, ",[425,114920,112291],{"class":435},[425,114922,1165],{"class":701},[425,114924,114925,114927,114930,114932,114934,114936,114938,114940],{"class":427,"line":9021},[425,114926,31600],{"class":691},[425,114928,114929],{"class":701},".target_site_id ",[425,114931,1204],{"class":1155},[425,114933,114913],{"class":701},[425,114935,31578],{"class":691},[425,114937,114918],{"class":701},[425,114939,112714],{"class":435},[425,114941,1165],{"class":701},[425,114943,114944,114946,114948,114950,114952,114954,114957,114959,114961,114963,114965],{"class":427,"line":9033},[425,114945,3497],{"class":1155},[425,114947,39628],{"class":691},[425,114949,114908],{"class":701},[425,114951,2057],{"class":1155},[425,114953,5093],{"class":691},[425,114955,114956],{"class":1155}," or",[425,114958,39628],{"class":691},[425,114960,114929],{"class":701},[425,114962,2057],{"class":1155},[425,114964,5093],{"class":691},[425,114966,4739],{"class":701},[425,114968,114969,114972,114974,114976,114979],{"class":427,"line":9045},[425,114970,114971],{"class":1155},"            raise",[425,114973,104190],{"class":691},[425,114975,1159],{"class":701},[425,114977,114978],{"class":435},"\"required sites not found\"",[425,114980,1165],{"class":701},[425,114982,114983],{"class":427,"line":9057},[425,114984,3400],{"emptyLinePlaceholder":1084},[425,114986,114987,114989,114991,114993],{"class":427,"line":10715},[425,114988,31600],{"class":691},[425,114990,114622],{"class":701},[425,114992,1204],{"class":1155},[425,114994,55182],{"class":691},[425,114996,114997,114999,115002,115004],{"class":427,"line":10740},[425,114998,31600],{"class":691},[425,115000,115001],{"class":701},".max_steps ",[425,115003,1204],{"class":1155},[425,115005,115006],{"class":691}," 200\n",[425,115008,115009,115011,115013,115015],{"class":427,"line":10763},[425,115010,31600],{"class":691},[425,115012,114461],{"class":701},[425,115014,1204],{"class":1155},[425,115016,48088],{"class":691},[425,115018,115019],{"class":427,"line":10787},[425,115020,3400],{"emptyLinePlaceholder":1084},[425,115022,115023,115025,115027,115029,115031,115033,115035,115037,115039,115041,115043,115045,115047,115049,115051,115053,115055,115057,115059,115061],{"class":427,"line":10792},[425,115024,31600],{"class":691},[425,115026,114509],{"class":701},[425,115028,1204],{"class":1155},[425,115030,114514],{"class":701},[425,115032,114517],{"class":6216},[425,115034,114520],{"class":1155},[425,115036,103158],{"class":691},[425,115038,13434],{"class":701},[425,115040,114527],{"class":6216},[425,115042,1204],{"class":1155},[425,115044,103158],{"class":691},[425,115046,13434],{"class":701},[425,115048,96718],{"class":6216},[425,115050,1204],{"class":1155},[425,115052,1159],{"class":701},[425,115054,1235],{"class":691},[425,115056,114544],{"class":701},[425,115058,94255],{"class":6216},[425,115060,1204],{"class":1155},[425,115062,114551],{"class":701},[425,115064,115065,115067,115069,115071,115073,115075,115077,115079,115081,115083,115085,115087,115089,115091,115093,115095,115097,115099],{"class":427,"line":10797},[425,115066,31600],{"class":691},[425,115068,114570],{"class":701},[425,115070,1204],{"class":1155},[425,115072,114514],{"class":701},[425,115074,114517],{"class":6216},[425,115076,114520],{"class":1155},[425,115078,114581],{"class":701},[425,115080,114527],{"class":6216},[425,115082,1204],{"class":1155},[425,115084,114581],{"class":701},[425,115086,96718],{"class":6216},[425,115088,1204],{"class":1155},[425,115090,1159],{"class":701},[425,115092,1594],{"class":691},[425,115094,114544],{"class":701},[425,115096,94255],{"class":6216},[425,115098,1204],{"class":1155},[425,115100,114551],{"class":701},[425,115102,115103],{"class":427,"line":10802},[425,115104,3400],{"emptyLinePlaceholder":1084},[425,115106,115107,115109,115112],{"class":427,"line":10811},[425,115108,31556],{"class":1155},[425,115110,115111],{"class":431}," _get_obs",[425,115113,115114],{"class":701},"(self) -> np.ndarray:\n",[425,115116,115117,115119,115121,115123,115126,115128],{"class":427,"line":10816},[425,115118,112892],{"class":701},[425,115120,1204],{"class":1155},[425,115122,39628],{"class":691},[425,115124,115125],{"class":701},".data.site_xpos[",[425,115127,31578],{"class":691},[425,115129,115130],{"class":701},".tip_site_id].copy()\n",[425,115132,115133,115135,115137,115139,115141,115143],{"class":427,"line":10822},[425,115134,112905],{"class":701},[425,115136,1204],{"class":1155},[425,115138,39628],{"class":691},[425,115140,115125],{"class":701},[425,115142,31578],{"class":691},[425,115144,115145],{"class":701},".target_site_id].copy()\n",[425,115147,115148,115150,115152,115155,115157,115160,115162],{"class":427,"line":10843},[425,115149,110937],{"class":701},[425,115151,1204],{"class":1155},[425,115153,115154],{"class":701}," np.concatenate([",[425,115156,31578],{"class":691},[425,115158,115159],{"class":701},".data.qpos.copy(), ",[425,115161,31578],{"class":691},[425,115163,115164],{"class":701},".data.qvel.copy(), tip, target])\n",[425,115166,115167,115169],{"class":427,"line":10849},[425,115168,15749],{"class":1155},[425,115170,115171],{"class":701}," obs.astype(np.float32)\n",[425,115173,115174],{"class":427,"line":10863},[425,115175,3400],{"emptyLinePlaceholder":1084},[425,115177,115178,115180,115183,115185,115187],{"class":427,"line":10869},[425,115179,31556],{"class":1155},[425,115181,115182],{"class":431}," _get_reward",[425,115184,114851],{"class":701},[425,115186,1198],{"class":691},[425,115188,4739],{"class":701},[425,115190,115191,115193,115195,115197,115199,115201],{"class":427,"line":10896},[425,115192,112892],{"class":701},[425,115194,1204],{"class":1155},[425,115196,39628],{"class":691},[425,115198,115125],{"class":701},[425,115200,31578],{"class":691},[425,115202,115203],{"class":701},".tip_site_id]\n",[425,115205,115206,115208,115210,115212,115214,115216],{"class":427,"line":10905},[425,115207,112905],{"class":701},[425,115209,1204],{"class":1155},[425,115211,39628],{"class":691},[425,115213,115125],{"class":701},[425,115215,31578],{"class":691},[425,115217,115218],{"class":701},".target_site_id]\n",[425,115220,115221,115224,115226,115228,115230],{"class":427,"line":10911},[425,115222,115223],{"class":701},"        dist ",[425,115225,1204],{"class":1155},[425,115227,112356],{"class":701},[425,115229,1680],{"class":1155},[425,115231,112361],{"class":701},[425,115233,115234,115237,115239,115241,115243,115246,115248],{"class":427,"line":10919},[425,115235,115236],{"class":701},"        control_cost ",[425,115238,1204],{"class":1155},[425,115240,112792],{"class":691},[425,115242,7518],{"class":1155},[425,115244,115245],{"class":701}," np.sum(np.square(",[425,115247,31578],{"class":691},[425,115249,115250],{"class":701},".data.ctrl))\n",[425,115252,115253,115255,115257,115259,115261,115263,115265],{"class":427,"line":10924},[425,115254,15749],{"class":1155},[425,115256,110552],{"class":691},[425,115258,1159],{"class":701},[425,115260,1680],{"class":1155},[425,115262,112351],{"class":701},[425,115264,1680],{"class":1155},[425,115266,112814],{"class":701},[425,115268,115269],{"class":427,"line":17601},[425,115270,3400],{"emptyLinePlaceholder":1084},[425,115272,115273,115275,115278,115281,115283,115286,115288,115290,115292,115294,115296,115299,115302,115304,115306,115308,115310],{"class":427,"line":17607},[425,115274,31556],{"class":1155},[425,115276,115277],{"class":431}," reset",[425,115279,115280],{"class":701},"(self, ",[425,115282,1603],{"class":1155},[425,115284,115285],{"class":701},", seed: ",[425,115287,1162],{"class":691},[425,115289,26100],{"class":1155},[425,115291,39688],{"class":691},[425,115293,14563],{"class":1155},[425,115295,39688],{"class":691},[425,115297,115298],{"class":701},", options: ",[425,115300,115301],{"class":691},"dict",[425,115303,26100],{"class":1155},[425,115305,39688],{"class":691},[425,115307,14563],{"class":1155},[425,115309,39688],{"class":691},[425,115311,31541],{"class":701},[425,115313,115314,115316,115319,115322,115324],{"class":427,"line":17630},[425,115315,31572],{"class":691},[425,115317,115318],{"class":701},"().reset(",[425,115320,115321],{"class":6216},"seed",[425,115323,1204],{"class":1155},[425,115325,115326],{"class":701},"seed)\n",[425,115328,115329,115332,115334,115337,115339],{"class":427,"line":17636},[425,115330,115331],{"class":701},"        mujoco.mj_resetData(",[425,115333,31578],{"class":691},[425,115335,115336],{"class":701},".model, ",[425,115338,31578],{"class":691},[425,115340,115341],{"class":701},".data)\n",[425,115343,115344],{"class":427,"line":17659},[425,115345,3400],{"emptyLinePlaceholder":1084},[425,115347,115348,115350,115353,115355,115357,115360,115362,115364,115366,115368,115370,115372,115374,115376,115378,115380,115382],{"class":427,"line":17673},[425,115349,31600],{"class":691},[425,115351,115352],{"class":701},".data.qpos[:] ",[425,115354,1204],{"class":1155},[425,115356,39628],{"class":691},[425,115358,115359],{"class":701},".np_random.uniform(",[425,115361,114517],{"class":6216},[425,115363,114520],{"class":1155},[425,115365,86965],{"class":691},[425,115367,13434],{"class":701},[425,115369,114527],{"class":6216},[425,115371,1204],{"class":1155},[425,115373,86965],{"class":691},[425,115375,13434],{"class":701},[425,115377,32251],{"class":6216},[425,115379,1204],{"class":1155},[425,115381,31578],{"class":691},[425,115383,115384],{"class":701},".model.nq)\n",[425,115386,115387,115389,115392,115394],{"class":427,"line":17693},[425,115388,31600],{"class":691},[425,115390,115391],{"class":701},".data.qvel[:] ",[425,115393,1204],{"class":1155},[425,115395,105516],{"class":691},[425,115397,115398,115401,115403,115405,115407],{"class":427,"line":17699},[425,115399,115400],{"class":701},"        mujoco.mj_forward(",[425,115402,31578],{"class":691},[425,115404,115336],{"class":701},[425,115406,31578],{"class":691},[425,115408,115341],{"class":701},[425,115410,115411],{"class":427,"line":17710},[425,115412,3400],{"emptyLinePlaceholder":1084},[425,115414,115415,115417,115419,115421],{"class":427,"line":17733},[425,115416,31600],{"class":691},[425,115418,114461],{"class":701},[425,115420,1204],{"class":1155},[425,115422,48088],{"class":691},[425,115424,115425,115427,115429],{"class":427,"line":17755},[425,115426,15749],{"class":1155},[425,115428,39628],{"class":691},[425,115430,115431],{"class":701},"._get_obs(), {}\n",[425,115433,115434],{"class":427,"line":17760},[425,115435,3400],{"emptyLinePlaceholder":1084},[425,115437,115438,115440,115443],{"class":427,"line":17766},[425,115439,31556],{"class":1155},[425,115441,115442],{"class":431}," step",[425,115444,115445],{"class":701},"(self, action):\n",[425,115447,115448,115450,115452,115455,115457,115459],{"class":427,"line":17780},[425,115449,110977],{"class":701},[425,115451,1204],{"class":1155},[425,115453,115454],{"class":701}," np.asarray(action, ",[425,115456,94255],{"class":6216},[425,115458,1204],{"class":1155},[425,115460,114551],{"class":701},[425,115462,115463,115465,115467,115469,115471,115474,115476],{"class":427,"line":17793},[425,115464,110977],{"class":701},[425,115466,1204],{"class":1155},[425,115468,108202],{"class":701},[425,115470,31578],{"class":691},[425,115472,115473],{"class":701},".action_space.low, ",[425,115475,31578],{"class":691},[425,115477,115478],{"class":701},".action_space.high)\n",[425,115480,115481],{"class":427,"line":17798},[425,115482,3400],{"emptyLinePlaceholder":1084},[425,115484,115485,115487,115490,115492],{"class":427,"line":17812},[425,115486,31600],{"class":691},[425,115488,115489],{"class":701},".data.ctrl[:] ",[425,115491,1204],{"class":1155},[425,115493,108225],{"class":701},[425,115495,115496,115498,115500,115502,115504,115506,115508],{"class":427,"line":17817},[425,115497,4403],{"class":1155},[425,115499,102256],{"class":701},[425,115501,27034],{"class":1155},[425,115503,33198],{"class":691},[425,115505,1159],{"class":701},[425,115507,31578],{"class":691},[425,115509,115510],{"class":701},".frame_skip):\n",[425,115512,115513,115516,115518,115520,115522],{"class":427,"line":17823},[425,115514,115515],{"class":701},"            mujoco.mj_step(",[425,115517,31578],{"class":691},[425,115519,115336],{"class":701},[425,115521,31578],{"class":691},[425,115523,115341],{"class":701},[425,115525,115526],{"class":427,"line":17828},[425,115527,3400],{"emptyLinePlaceholder":1084},[425,115529,115530,115532,115534,115536],{"class":427,"line":17842},[425,115531,31600],{"class":691},[425,115533,114461],{"class":701},[425,115535,10476],{"class":1155},[425,115537,56454],{"class":691},[425,115539,115540],{"class":427,"line":17847},[425,115541,3400],{"emptyLinePlaceholder":1084},[425,115543,115544,115546,115548,115550],{"class":427,"line":17852},[425,115545,110937],{"class":701},[425,115547,1204],{"class":1155},[425,115549,39628],{"class":691},[425,115551,115552],{"class":701},"._get_obs()\n",[425,115554,115555,115557,115559,115561],{"class":427,"line":17866},[425,115556,111042],{"class":701},[425,115558,1204],{"class":1155},[425,115560,39628],{"class":691},[425,115562,115563],{"class":701},"._get_reward()\n",[425,115565,115566],{"class":427,"line":17878},[425,115567,3400],{"emptyLinePlaceholder":1084},[425,115569,115570,115572,115574,115576,115578,115580],{"class":427,"line":17883},[425,115571,112892],{"class":701},[425,115573,1204],{"class":1155},[425,115575,39628],{"class":691},[425,115577,115125],{"class":701},[425,115579,31578],{"class":691},[425,115581,115203],{"class":701},[425,115583,115584,115586,115588,115590,115592,115594],{"class":427,"line":17896},[425,115585,112905],{"class":701},[425,115587,1204],{"class":1155},[425,115589,39628],{"class":691},[425,115591,115125],{"class":701},[425,115593,31578],{"class":691},[425,115595,115218],{"class":701},[425,115597,115598,115600,115602,115604,115607,115609],{"class":427,"line":17901},[425,115599,115223],{"class":701},[425,115601,1204],{"class":1155},[425,115603,110552],{"class":691},[425,115605,115606],{"class":701},"(np.linalg.norm(tip ",[425,115608,1680],{"class":1155},[425,115610,115611],{"class":701}," target))\n",[425,115613,115614],{"class":427,"line":17906},[425,115615,3400],{"emptyLinePlaceholder":1084},[425,115617,115618,115621,115623,115625,115627],{"class":427,"line":17911},[425,115619,115620],{"class":701},"        terminated ",[425,115622,1204],{"class":1155},[425,115624,114444],{"class":701},[425,115626,2057],{"class":1155},[425,115628,114449],{"class":691},[425,115630,115631,115634,115636,115638,115640,115642,115644],{"class":427,"line":17924},[425,115632,115633],{"class":701},"        truncated ",[425,115635,1204],{"class":1155},[425,115637,39628],{"class":691},[425,115639,114461],{"class":701},[425,115641,2712],{"class":1155},[425,115643,39628],{"class":691},[425,115645,114468],{"class":701},[425,115647,115648,115651,115653,115655,115658],{"class":427,"line":17929},[425,115649,115650],{"class":701},"        info ",[425,115652,1204],{"class":1155},[425,115654,5448],{"class":701},[425,115656,115657],{"class":435},"\"distance\"",[425,115659,115660],{"class":701},": dist}\n",[425,115662,115663,115665],{"class":427,"line":33388},[425,115664,15749],{"class":1155},[425,115666,115667],{"class":701}," obs, reward, terminated, truncated, info\n",[425,115669,115670],{"class":427,"line":33394},[425,115671,3400],{"emptyLinePlaceholder":1084},[425,115673,115674],{"class":427,"line":33400},[425,115675,3400],{"emptyLinePlaceholder":1084},[425,115677,115678,115680,115682,115684,115686],{"class":427,"line":33406},[425,115679,32702],{"class":1155},[425,115681,2973],{"class":431},[425,115683,102153],{"class":701},[425,115685,96441],{"class":691},[425,115687,4739],{"class":701},[425,115689,115690,115693,115695],{"class":427,"line":33412},[425,115691,115692],{"class":701},"    env ",[425,115694,1204],{"class":1155},[425,115696,115697],{"class":701}," ReacherEnv()\n",[425,115699,115700,115703,115705,115708,115710,115712,115714],{"class":427,"line":33423},[425,115701,115702],{"class":701},"    obs, info ",[425,115704,1204],{"class":1155},[425,115706,115707],{"class":701}," env.reset(",[425,115709,115321],{"class":6216},[425,115711,1204],{"class":1155},[425,115713,1341],{"class":691},[425,115715,1165],{"class":701},[425,115717,115718,115720,115722,115725],{"class":427,"line":33429},[425,115719,32054],{"class":691},[425,115721,1159],{"class":701},[425,115723,115724],{"class":435},"\"initial obs shape:\"",[425,115726,115727],{"class":701},", obs.shape)\n",[425,115729,115730,115732,115734,115737],{"class":427,"line":33449},[425,115731,32054],{"class":691},[425,115733,1159],{"class":701},[425,115735,115736],{"class":435},"\"initial info:\"",[425,115738,115739],{"class":701},", info)\n",[425,115741,115742],{"class":427,"line":33455},[425,115743,3400],{"emptyLinePlaceholder":1084},[425,115745,115746,115748,115750],{"class":427,"line":33466},[425,115747,110908],{"class":701},[425,115749,1204],{"class":1155},[425,115751,105516],{"class":691},[425,115753,115754,115756,115758,115760,115762,115764,115766],{"class":427,"line":33472},[425,115755,4201],{"class":1155},[425,115757,32371],{"class":701},[425,115759,27034],{"class":1155},[425,115761,33198],{"class":691},[425,115763,1159],{"class":701},[425,115765,1848],{"class":691},[425,115767,31541],{"class":701},[425,115769,115770,115772,115774],{"class":427,"line":33478},[425,115771,110977],{"class":701},[425,115773,1204],{"class":1155},[425,115775,115776],{"class":701}," env.action_space.sample()\n",[425,115778,115779,115782,115784],{"class":427,"line":33484},[425,115780,115781],{"class":701},"        obs, reward, terminated, truncated, info ",[425,115783,1204],{"class":1155},[425,115785,114170],{"class":701},[425,115787,115788,115790,115792],{"class":427,"line":33490},[425,115789,111052],{"class":701},[425,115791,10476],{"class":1155},[425,115793,111057],{"class":701},[425,115795,115796,115798,115800,115802,115804,115807,115809,115811,115814,115816,115818,115821,115823,115825,115828,115830,115832,115834],{"class":427,"line":33496},[425,115797,33206],{"class":691},[425,115799,1159],{"class":701},[425,115801,111086],{"class":435},[425,115803,111089],{"class":701},[425,115805,115806],{"class":435},"\"reward:\"",[425,115808,13434],{"class":701},[425,115810,32773],{"class":691},[425,115812,115813],{"class":701},"(reward, ",[425,115815,1229],{"class":691},[425,115817,111100],{"class":701},[425,115819,115820],{"class":435},"\"distance:\"",[425,115822,13434],{"class":701},[425,115824,32773],{"class":691},[425,115826,115827],{"class":701},"(info[",[425,115829,115657],{"class":435},[425,115831,112957],{"class":701},[425,115833,1229],{"class":691},[425,115835,31252],{"class":701},[425,115837,115838,115840,115843,115846],{"class":427,"line":33502},[425,115839,3497],{"class":1155},[425,115841,115842],{"class":701}," terminated ",[425,115844,115845],{"class":1155},"or",[425,115847,115848],{"class":701}," truncated:\n",[425,115850,115851],{"class":427,"line":33508},[425,115852,115853],{"class":1155},"            break\n",[425,115855,115856],{"class":427,"line":33528},[425,115857,3400],{"emptyLinePlaceholder":1084},[425,115859,115860,115862,115864,115866,115868,115870,115872,115874],{"class":427,"line":33534},[425,115861,32054],{"class":691},[425,115863,1159],{"class":701},[425,115865,111131],{"class":435},[425,115867,13434],{"class":701},[425,115869,32773],{"class":691},[425,115871,111138],{"class":701},[425,115873,1229],{"class":691},[425,115875,31252],{"class":701},[425,115877,115878],{"class":427,"line":33550},[425,115879,3400],{"emptyLinePlaceholder":1084},[425,115881,115882],{"class":427,"line":33556},[425,115883,3400],{"emptyLinePlaceholder":1084},[425,115885,115886,115888,115890,115892,115894],{"class":427,"line":33570},[425,115887,2544],{"class":1155},[425,115889,31975],{"class":691},[425,115891,102314],{"class":1155},[425,115893,102317],{"class":435},[425,115895,4739],{"class":701},[425,115897,115898],{"class":427,"line":33576},[425,115899,102324],{"class":701},[19,115901,104325],{},[416,115903,115905],{"className":418,"code":115904,"language":420,"meta":395,"style":395},"touch ch8_gym_env.py\n",[422,115906,115907],{"__ignoreMap":395},[425,115908,115909,115911],{"class":427,"line":428},[425,115910,102038],{"class":431},[425,115912,115913],{"class":435}," ch8_gym_env.py\n",[19,115915,111199],{},[416,115917,115919],{"className":418,"code":115918,"language":420,"meta":395,"style":395},"python ch8_gym_env.py\n",[422,115920,115921],{"__ignoreMap":395},[425,115922,115923,115925],{"class":427,"line":428},[425,115924,31135],{"class":431},[425,115926,115913],{"class":435},[14,115928,102327],{"id":102327},[19,115930,115931],{},"继承 Gymnasium 环境：",[416,115933,115935],{"className":31133,"code":115934,"language":31135,"meta":395,"style":395},"class ReacherEnv(gym.Env):\n",[422,115936,115937],{"__ignoreMap":395},[425,115938,115939,115941,115943,115945,115947,115949,115951],{"class":427,"line":428},[425,115940,15691],{"class":1155},[425,115942,114812],{"class":431},[425,115944,1159],{"class":701},[425,115946,114295],{"class":431},[425,115948,1706],{"class":701},[425,115950,114821],{"class":431},[425,115952,31541],{"class":701},[19,115954,115955],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,115957,115958],{},"初始化模型：",[416,115960,115962],{"className":31133,"code":115961,"language":31135,"meta":395,"style":395},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[422,115963,115964,115978],{"__ignoreMap":395},[425,115965,115966,115968,115970,115972,115974,115976],{"class":427,"line":428},[425,115967,31578],{"class":691},[425,115969,114872],{"class":701},[425,115971,1204],{"class":1155},[425,115973,102167],{"class":701},[425,115975,102069],{"class":691},[425,115977,1165],{"class":701},[425,115979,115980,115982,115984,115986,115988,115990],{"class":427,"line":698},[425,115981,31578],{"class":691},[425,115983,114887],{"class":701},[425,115985,1204],{"class":1155},[425,115987,114892],{"class":701},[425,115989,31578],{"class":691},[425,115991,114897],{"class":701},[19,115993,115994,115995,115997],{},"这和前面章节一样，只是现在放到了类的 ",[422,115996,31584],{}," 里。",[19,115999,116000],{},"缓存 site ID：",[416,116002,116004],{"className":31133,"code":116003,"language":31135,"meta":395,"style":395},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[422,116005,116006,116020],{"__ignoreMap":395},[425,116007,116008,116010,116012,116014,116016,116018],{"class":427,"line":428},[425,116009,31578],{"class":691},[425,116011,114908],{"class":701},[425,116013,1204],{"class":1155},[425,116015,114913],{"class":701},[425,116017,90309],{"class":691},[425,116019,1165],{"class":701},[425,116021,116022,116024,116026,116028,116030,116032],{"class":427,"line":698},[425,116023,31578],{"class":691},[425,116025,114929],{"class":701},[425,116027,1204],{"class":1155},[425,116029,114913],{"class":701},[425,116031,90309],{"class":691},[425,116033,1165],{"class":701},[19,116035,116036],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,116038,116039],{},"reset：",[416,116041,116043],{"className":31133,"code":116042,"language":31135,"meta":395,"style":395},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[422,116044,116045],{"__ignoreMap":395},[425,116046,116047,116049,116051,116053,116055,116057,116059,116061,116063,116065,116067,116069,116071,116073,116075,116077,116079],{"class":427,"line":428},[425,116048,32702],{"class":1155},[425,116050,115277],{"class":431},[425,116052,115280],{"class":701},[425,116054,1603],{"class":1155},[425,116056,115285],{"class":701},[425,116058,1162],{"class":691},[425,116060,26100],{"class":1155},[425,116062,39688],{"class":691},[425,116064,14563],{"class":1155},[425,116066,39688],{"class":691},[425,116068,115298],{"class":701},[425,116070,115301],{"class":691},[425,116072,26100],{"class":1155},[425,116074,39688],{"class":691},[425,116076,14563],{"class":1155},[425,116078,39688],{"class":691},[425,116080,31541],{"class":701},[19,116082,116083,116085],{},[422,116084,70811],{}," 做四件事：",[972,116087,116088,116091,116094,116097],{},[450,116089,116090],{},"设置随机种子。",[450,116092,116093],{},"重置 MuJoCo data。",[450,116095,116096],{},"随机初始化关节角。",[450,116098,116099],{},"返回初始观测和 info。",[19,116101,116102],{},"step：",[416,116104,116106],{"className":31133,"code":116105,"language":31135,"meta":395,"style":395},"def step(self, action):\n",[422,116107,116108],{"__ignoreMap":395},[425,116109,116110,116112,116114],{"class":427,"line":428},[425,116111,32702],{"class":1155},[425,116113,115442],{"class":431},[425,116115,115445],{"class":701},[19,116117,116118,116120],{},[422,116119,107889],{}," 做六件事：",[972,116122,116123,116126,116132,116135,116138,116141],{},[450,116124,116125],{},"检查并裁剪 action。",[450,116127,116128,116129,998],{},"写入 ",[422,116130,116131],{},"self.data.ctrl",[450,116133,116134],{},"连续推进若干个 MuJoCo 物理步。",[450,116136,116137],{},"计算新观测。",[450,116139,116140],{},"计算奖励和结束条件。",[450,116142,116143],{},"返回 Gymnasium 标准五元组。",[14,116145,102463],{"id":102463},[416,116147,116149],{"className":31133,"code":116148,"language":31135,"meta":395,"style":395},"import gymnasium as gym\n",[422,116150,116151],{"__ignoreMap":395},[425,116152,116153,116155,116157,116159],{"class":427,"line":428},[425,116154,31147],{"class":1155},[425,116156,114650],{"class":701},[425,116158,32138],{"class":1155},[425,116160,114655],{"class":701},[19,116162,116163,116164,116166,116167,116170],{},"导入 Gymnasium，并起别名 ",[422,116165,114295],{},"。后面写 ",[422,116168,116169],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[416,116172,116174],{"className":31133,"code":116173,"language":31135,"meta":395,"style":395},"from gymnasium import spaces\n",[422,116175,116176],{"__ignoreMap":395},[425,116177,116178,116180,116182,116184],{"class":427,"line":428},[425,116179,31492],{"class":1155},[425,116181,114650],{"class":701},[425,116183,31147],{"class":1155},[425,116185,114682],{"class":701},[19,116187,116188,116189,116192],{},"导入空间定义工具。",[422,116190,116191],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[416,116194,116195],{"className":31133,"code":115934,"language":31135,"meta":395,"style":395},[422,116196,116197],{"__ignoreMap":395},[425,116198,116199,116201,116203,116205,116207,116209,116211],{"class":427,"line":428},[425,116200,15691],{"class":1155},[425,116202,114812],{"class":431},[425,116204,1159],{"class":701},[425,116206,114295],{"class":431},[425,116208,1706],{"class":701},[425,116210,114821],{"class":431},[425,116212,31541],{"class":701},[19,116214,116215,116216,116219,116220,116222,116223,101773,116225,116227],{},"定义一个类，名字叫 ",[422,116217,116218],{},"ReacherEnv","。括号里的 ",[422,116221,116169],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[422,116224,70811],{},[422,116226,107889],{}," 这两个核心方法。",[416,116229,116231],{"className":31133,"code":116230,"language":31135,"meta":395,"style":395},"metadata = {\"render_modes\": []}\n",[422,116232,116233],{"__ignoreMap":395},[425,116234,116235,116238,116240,116242,116244],{"class":427,"line":428},[425,116236,116237],{"class":701},"metadata ",[425,116239,1204],{"class":1155},[425,116241,5448],{"class":701},[425,116243,114835],{"class":435},[425,116245,114838],{"class":701},[19,116247,116248],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[416,116250,116252],{"className":31133,"code":116251,"language":31135,"meta":395,"style":395},"def __init__(self) -> None:\n",[422,116253,116254],{"__ignoreMap":395},[425,116255,116256,116258,116260,116262,116264],{"class":427,"line":428},[425,116257,32702],{"class":1155},[425,116259,31559],{"class":691},[425,116261,114851],{"class":701},[425,116263,96441],{"class":691},[425,116265,4739],{"class":701},[19,116267,116268,116270,116271,998],{},[422,116269,31584],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[422,116272,116273],{},"env = ReacherEnv()",[416,116275,116277],{"className":31133,"code":116276,"language":31135,"meta":395,"style":395},"super().__init__()\n",[422,116278,116279],{"__ignoreMap":395},[425,116280,116281,116284,116286,116288],{"class":427,"line":428},[425,116282,116283],{"class":691},"super",[425,116285,18258],{"class":701},[425,116287,31584],{"class":691},[425,116289,2976],{"class":701},[19,116291,116292,116293,116295],{},"调用父类 ",[422,116294,116169],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[416,116297,116298],{"className":31133,"code":115961,"language":31135,"meta":395,"style":395},[422,116299,116300,116314],{"__ignoreMap":395},[425,116301,116302,116304,116306,116308,116310,116312],{"class":427,"line":428},[425,116303,31578],{"class":691},[425,116305,114872],{"class":701},[425,116307,1204],{"class":1155},[425,116309,102167],{"class":701},[425,116311,102069],{"class":691},[425,116313,1165],{"class":701},[425,116315,116316,116318,116320,116322,116324,116326],{"class":427,"line":698},[425,116317,31578],{"class":691},[425,116319,114887],{"class":701},[425,116321,1204],{"class":1155},[425,116323,114892],{"class":701},[425,116325,31578],{"class":691},[425,116327,114897],{"class":701},[19,116329,116330,116331,116333,116334,101773,116337,116340],{},"把 MuJoCo 模型和状态保存到 ",[422,116332,31578],{}," 上。",[422,116335,116336],{},"self.model",[422,116338,116339],{},"self.data"," 表示这个环境对象自己的模型和状态。",[416,116342,116343],{"className":31133,"code":116003,"language":31135,"meta":395,"style":395},[422,116344,116345,116359],{"__ignoreMap":395},[425,116346,116347,116349,116351,116353,116355,116357],{"class":427,"line":428},[425,116348,31578],{"class":691},[425,116350,114908],{"class":701},[425,116352,1204],{"class":1155},[425,116354,114913],{"class":701},[425,116356,90309],{"class":691},[425,116358,1165],{"class":701},[425,116360,116361,116363,116365,116367,116369,116371],{"class":427,"line":698},[425,116362,31578],{"class":691},[425,116364,114929],{"class":701},[425,116366,1204],{"class":1155},[425,116368,114913],{"class":701},[425,116370,90309],{"class":691},[425,116372,1165],{"class":701},[19,116374,116375,116376,101773,116379,116382],{},"提前查好 tip 和 target 的 site ID。这样 ",[422,116377,116378],{},"_get_obs",[422,116380,116381],{},"_get_reward"," 里就不用每次按名字查找。",[416,116384,116386],{"className":31133,"code":116385,"language":31135,"meta":395,"style":395},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[422,116387,116388,116398,116408],{"__ignoreMap":395},[425,116389,116390,116392,116394,116396],{"class":427,"line":428},[425,116391,31578],{"class":691},[425,116393,114622],{"class":701},[425,116395,1204],{"class":1155},[425,116397,55182],{"class":691},[425,116399,116400,116402,116404,116406],{"class":427,"line":698},[425,116401,31578],{"class":691},[425,116403,115001],{"class":701},[425,116405,1204],{"class":1155},[425,116407,115006],{"class":691},[425,116409,116410,116412,116414,116416],{"class":427,"line":710},[425,116411,31578],{"class":691},[425,116413,114461],{"class":701},[425,116415,1204],{"class":1155},[425,116417,48088],{"class":691},[19,116419,116420,116423,116424,116427,116428,116431],{},[422,116421,116422],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[422,116425,116426],{},"max_steps"," 是一个 episode 最多运行多少步。",[422,116429,116430],{},"steps"," 记录当前 episode 已经走了多少步。",[416,116433,116434],{"className":31133,"code":114500,"language":31135,"meta":395,"style":395},[422,116435,116436],{"__ignoreMap":395},[425,116437,116438,116440,116442,116444,116446,116448,116450,116452,116454,116456,116458,116460,116462,116464,116466,116468,116470,116472,116474,116476],{"class":427,"line":428},[425,116439,31578],{"class":691},[425,116441,114509],{"class":701},[425,116443,1204],{"class":1155},[425,116445,114514],{"class":701},[425,116447,114517],{"class":6216},[425,116449,114520],{"class":1155},[425,116451,103158],{"class":691},[425,116453,13434],{"class":701},[425,116455,114527],{"class":6216},[425,116457,1204],{"class":1155},[425,116459,103158],{"class":691},[425,116461,13434],{"class":701},[425,116463,96718],{"class":6216},[425,116465,1204],{"class":1155},[425,116467,1159],{"class":701},[425,116469,1235],{"class":691},[425,116471,114544],{"class":701},[425,116473,94255],{"class":6216},[425,116475,1204],{"class":1155},[425,116477,114551],{"class":701},[19,116479,116480,116481,116484,116485,101773,116488,116491],{},"定义动作空间。",[422,116482,116483],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[422,116486,116487],{},"low=-1.0",[422,116489,116490],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[416,116493,116494],{"className":31133,"code":114561,"language":31135,"meta":395,"style":395},[422,116495,116496],{"__ignoreMap":395},[425,116497,116498,116500,116502,116504,116506,116508,116510,116512,116514,116516,116518,116520,116522,116524,116526,116528,116530,116532],{"class":427,"line":428},[425,116499,31578],{"class":691},[425,116501,114570],{"class":701},[425,116503,1204],{"class":1155},[425,116505,114514],{"class":701},[425,116507,114517],{"class":6216},[425,116509,114520],{"class":1155},[425,116511,114581],{"class":701},[425,116513,114527],{"class":6216},[425,116515,1204],{"class":1155},[425,116517,114581],{"class":701},[425,116519,96718],{"class":6216},[425,116521,1204],{"class":1155},[425,116523,1159],{"class":701},[425,116525,1594],{"class":691},[425,116527,114544],{"class":701},[425,116529,94255],{"class":6216},[425,116531,1204],{"class":1155},[425,116533,114551],{"class":701},[19,116535,116536,116537,116540,116541,116544],{},"定义观测空间。",[422,116538,116539],{},"shape=(10,)"," 表示观测是 10 个数。",[422,116542,116543],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[416,116546,116548],{"className":31133,"code":116547,"language":31135,"meta":395,"style":395},"def _get_obs(self) -> np.ndarray:\n",[422,116549,116550],{"__ignoreMap":395},[425,116551,116552,116554,116556],{"class":427,"line":428},[425,116553,32702],{"class":1155},[425,116555,115111],{"class":431},[425,116557,115114],{"class":701},[19,116559,116560,116561,116563],{},"定义内部函数，用来生成观测。函数名前面的 ",[422,116562,2139],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[416,116565,116567],{"className":31133,"code":116566,"language":31135,"meta":395,"style":395},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[422,116568,116569,116583],{"__ignoreMap":395},[425,116570,116571,116573,116575,116577,116579,116581],{"class":427,"line":428},[425,116572,112323],{"class":701},[425,116574,1204],{"class":1155},[425,116576,39628],{"class":691},[425,116578,115125],{"class":701},[425,116580,31578],{"class":691},[425,116582,115130],{"class":701},[425,116584,116585,116587,116589,116591,116593,116595],{"class":427,"line":698},[425,116586,112333],{"class":701},[425,116588,1204],{"class":1155},[425,116590,39628],{"class":691},[425,116592,115125],{"class":701},[425,116594,31578],{"class":691},[425,116596,115145],{"class":701},[19,116598,116599],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[416,116601,116603],{"className":31133,"code":116602,"language":31135,"meta":395,"style":395},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[422,116604,116605,116621],{"__ignoreMap":395},[425,116606,116607,116609,116611,116613,116615,116617,116619],{"class":427,"line":428},[425,116608,111609],{"class":701},[425,116610,1204],{"class":1155},[425,116612,115154],{"class":701},[425,116614,31578],{"class":691},[425,116616,115159],{"class":701},[425,116618,31578],{"class":691},[425,116620,115164],{"class":701},[425,116622,116623,116625],{"class":427,"line":698},[425,116624,18043],{"class":1155},[425,116626,115171],{"class":701},[19,116628,116629,116630,116633,116634,116636],{},"拼接观测，并转换成 ",[422,116631,116632],{},"float32","。很多强化学习库默认使用 ",[422,116635,116632],{},"，所以这里主动转换。",[416,116638,116639],{"className":31133,"code":116042,"language":31135,"meta":395,"style":395},[422,116640,116641],{"__ignoreMap":395},[425,116642,116643,116645,116647,116649,116651,116653,116655,116657,116659,116661,116663,116665,116667,116669,116671,116673,116675],{"class":427,"line":428},[425,116644,32702],{"class":1155},[425,116646,115277],{"class":431},[425,116648,115280],{"class":701},[425,116650,1603],{"class":1155},[425,116652,115285],{"class":701},[425,116654,1162],{"class":691},[425,116656,26100],{"class":1155},[425,116658,39688],{"class":691},[425,116660,14563],{"class":1155},[425,116662,39688],{"class":691},[425,116664,115298],{"class":701},[425,116666,115301],{"class":691},[425,116668,26100],{"class":1155},[425,116670,39688],{"class":691},[425,116672,14563],{"class":1155},[425,116674,39688],{"class":691},[425,116676,31541],{"class":701},[19,116678,116679,116680,116682,116683,116686],{},"定义 reset。",[422,116681,115321],{}," 用来控制随机数，保证实验可以复现。",[422,116684,116685],{},"options"," 用来接收额外配置，本章暂时不用。",[416,116688,116690],{"className":31133,"code":116689,"language":31135,"meta":395,"style":395},"super().reset(seed=seed)\n",[422,116691,116692],{"__ignoreMap":395},[425,116693,116694,116696,116698,116700,116702],{"class":427,"line":428},[425,116695,116283],{"class":691},[425,116697,115318],{"class":701},[425,116699,115321],{"class":6216},[425,116701,1204],{"class":1155},[425,116703,115326],{"class":701},[19,116705,116706,116707,116710],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[422,116708,116709],{},"self.np_random"," 生成可复现的随机数。",[416,116712,116714],{"className":31133,"code":116713,"language":31135,"meta":395,"style":395},"mujoco.mj_resetData(self.model, self.data)\n",[422,116715,116716],{"__ignoreMap":395},[425,116717,116718,116721,116723,116725,116727],{"class":427,"line":428},[425,116719,116720],{"class":701},"mujoco.mj_resetData(",[425,116722,31578],{"class":691},[425,116724,115336],{"class":701},[425,116726,31578],{"class":691},[425,116728,115341],{"class":701},[19,116730,116731],{},"把 MuJoCo 状态重置到默认状态。",[416,116733,116735],{"className":31133,"code":116734,"language":31135,"meta":395,"style":395},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[422,116736,116737],{"__ignoreMap":395},[425,116738,116739,116741,116743,116745,116747,116749,116751,116753,116755,116757,116759,116761,116763,116765,116767,116769,116771],{"class":427,"line":428},[425,116740,31578],{"class":691},[425,116742,115352],{"class":701},[425,116744,1204],{"class":1155},[425,116746,39628],{"class":691},[425,116748,115359],{"class":701},[425,116750,114517],{"class":6216},[425,116752,114520],{"class":1155},[425,116754,86965],{"class":691},[425,116756,13434],{"class":701},[425,116758,114527],{"class":6216},[425,116760,1204],{"class":1155},[425,116762,86965],{"class":691},[425,116764,13434],{"class":701},[425,116766,32251],{"class":6216},[425,116768,1204],{"class":1155},[425,116770,31578],{"class":691},[425,116772,115384],{"class":701},[19,116774,116096,116775,116778,116779,116782,116783,116785],{},[422,116776,116777],{},"[:]"," 表示修改整个数组。",[422,116780,116781],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[422,116784,102905],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[416,116787,116789],{"className":31133,"code":116788,"language":31135,"meta":395,"style":395},"self.data.qvel[:] = 0.0\n",[422,116790,116791],{"__ignoreMap":395},[425,116792,116793,116795,116797,116799],{"class":427,"line":428},[425,116794,31578],{"class":691},[425,116796,115391],{"class":701},[425,116798,1204],{"class":1155},[425,116800,105516],{"class":691},[19,116802,116803],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[416,116805,116807],{"className":31133,"code":116806,"language":31135,"meta":395,"style":395},"self.steps = 0\nreturn self._get_obs(), {}\n",[422,116808,116809,116819],{"__ignoreMap":395},[425,116810,116811,116813,116815,116817],{"class":427,"line":428},[425,116812,31578],{"class":691},[425,116814,114461],{"class":701},[425,116816,1204],{"class":1155},[425,116818,48088],{"class":691},[425,116820,116821,116823,116825],{"class":427,"line":698},[425,116822,18043],{"class":1155},[425,116824,39628],{"class":691},[425,116826,115431],{"class":701},[19,116828,116829],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[416,116831,116832],{"className":31133,"code":116105,"language":31135,"meta":395,"style":395},[422,116833,116834],{"__ignoreMap":395},[425,116835,116836,116838,116840],{"class":427,"line":428},[425,116837,32702],{"class":1155},[425,116839,115442],{"class":431},[425,116841,115445],{"class":701},[19,116843,116844],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[416,116846,116848],{"className":31133,"code":116847,"language":31135,"meta":395,"style":395},"action = np.asarray(action, dtype=np.float32)\n",[422,116849,116850],{"__ignoreMap":395},[425,116851,116852,116854,116856,116858,116860,116862],{"class":427,"line":428},[425,116853,108197],{"class":701},[425,116855,1204],{"class":1155},[425,116857,115454],{"class":701},[425,116859,94255],{"class":6216},[425,116861,1204],{"class":1155},[425,116863,114551],{"class":701},[19,116865,116866,116867,998],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[422,116868,116632],{},[416,116870,116872],{"className":31133,"code":116871,"language":31135,"meta":395,"style":395},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[422,116873,116874],{"__ignoreMap":395},[425,116875,116876,116878,116880,116882,116884,116886,116888],{"class":427,"line":428},[425,116877,108197],{"class":701},[425,116879,1204],{"class":1155},[425,116881,108202],{"class":701},[425,116883,31578],{"class":691},[425,116885,115473],{"class":701},[425,116887,31578],{"class":691},[425,116889,115478],{"class":701},[19,116891,116892],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[416,116894,116896],{"className":31133,"code":116895,"language":31135,"meta":395,"style":395},"self.data.ctrl[:] = action\n",[422,116897,116898],{"__ignoreMap":395},[425,116899,116900,116902,116904,116906],{"class":427,"line":428},[425,116901,31578],{"class":691},[425,116903,115489],{"class":701},[425,116905,1204],{"class":1155},[425,116907,108225],{"class":701},[19,116909,116910],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[416,116912,116914],{"className":31133,"code":116913,"language":31135,"meta":395,"style":395},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[422,116915,116916,116932],{"__ignoreMap":395},[425,116917,116918,116920,116922,116924,116926,116928,116930],{"class":427,"line":428},[425,116919,4025],{"class":1155},[425,116921,102256],{"class":701},[425,116923,27034],{"class":1155},[425,116925,33198],{"class":691},[425,116927,1159],{"class":701},[425,116929,31578],{"class":691},[425,116931,115510],{"class":701},[425,116933,116934,116937,116939,116941,116943],{"class":427,"line":698},[425,116935,116936],{"class":701},"    mujoco.mj_step(",[425,116938,31578],{"class":691},[425,116940,115336],{"class":701},[425,116942,31578],{"class":691},[425,116944,115341],{"class":701},[19,116946,116947,116948,116951,116952,116954,116955,998],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[422,116949,116950],{},"frame_skip=5","，所以外部调用一次 ",[422,116953,114632],{},"，内部实际执行 5 次 ",[422,116956,101970],{},[416,116958,116960],{"className":31133,"code":116959,"language":31135,"meta":395,"style":395},"self.steps += 1\n",[422,116961,116962],{"__ignoreMap":395},[425,116963,116964,116966,116968,116970],{"class":427,"line":428},[425,116965,31578],{"class":691},[425,116967,114461],{"class":701},[425,116969,10476],{"class":1155},[425,116971,56454],{"class":691},[19,116973,116974],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[416,116976,116978],{"className":31133,"code":116977,"language":31135,"meta":395,"style":395},"obs = self._get_obs()\nreward = self._get_reward()\n",[422,116979,116980,116990],{"__ignoreMap":395},[425,116981,116982,116984,116986,116988],{"class":427,"line":428},[425,116983,111609],{"class":701},[425,116985,1204],{"class":1155},[425,116987,39628],{"class":691},[425,116989,115552],{"class":701},[425,116991,116992,116994,116996,116998],{"class":427,"line":698},[425,116993,111760],{"class":701},[425,116995,1204],{"class":1155},[425,116997,39628],{"class":691},[425,116999,115563],{"class":701},[19,117001,117002],{},"计算新的观测和奖励。",[416,117004,117006],{"className":31133,"code":117005,"language":31135,"meta":395,"style":395},"dist = float(np.linalg.norm(tip - target))\n",[422,117007,117008],{"__ignoreMap":395},[425,117009,117010,117012,117014,117016,117018,117020],{"class":427,"line":428},[425,117011,112351],{"class":701},[425,117013,1204],{"class":1155},[425,117015,110552],{"class":691},[425,117017,115606],{"class":701},[425,117019,1680],{"class":1155},[425,117021,115611],{"class":701},[19,117023,117024],{},"计算末端到目标的距离，并转换成 Python float。",[416,117026,117027],{"className":31133,"code":114432,"language":31135,"meta":395,"style":395},[422,117028,117029,117041],{"__ignoreMap":395},[425,117030,117031,117033,117035,117037,117039],{"class":427,"line":428},[425,117032,114439],{"class":701},[425,117034,1204],{"class":1155},[425,117036,114444],{"class":701},[425,117038,2057],{"class":1155},[425,117040,114449],{"class":691},[425,117042,117043,117045,117047,117049,117051,117053,117055],{"class":427,"line":698},[425,117044,114454],{"class":701},[425,117046,1204],{"class":1155},[425,117048,39628],{"class":691},[425,117050,114461],{"class":701},[425,117052,2712],{"class":1155},[425,117054,39628],{"class":691},[425,117056,114468],{"class":701},[19,117058,117059],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[416,117061,117063],{"className":31133,"code":117062,"language":31135,"meta":395,"style":395},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[422,117064,117065,117078],{"__ignoreMap":395},[425,117066,117067,117070,117072,117074,117076],{"class":427,"line":428},[425,117068,117069],{"class":701},"info ",[425,117071,1204],{"class":1155},[425,117073,5448],{"class":701},[425,117075,115657],{"class":435},[425,117077,115660],{"class":701},[425,117079,117080,117082],{"class":427,"line":698},[425,117081,18043],{"class":1155},[425,117083,115667],{"class":701},[19,117085,117086,117089],{},[422,117087,117088],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[416,117091,117093],{"className":31133,"code":117092,"language":31135,"meta":395,"style":395},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[422,117094,117095,117104],{"__ignoreMap":395},[425,117096,117097,117100,117102],{"class":427,"line":428},[425,117098,117099],{"class":701},"env ",[425,117101,1204],{"class":1155},[425,117103,115697],{"class":701},[425,117105,117106,117108,117110,117112,117114,117116,117118],{"class":427,"line":698},[425,117107,114155],{"class":701},[425,117109,1204],{"class":1155},[425,117111,115707],{"class":701},[425,117113,115321],{"class":6216},[425,117115,1204],{"class":1155},[425,117117,1341],{"class":691},[425,117119,1165],{"class":701},[19,117121,117122,117123,117126],{},"创建环境并重置。",[422,117124,117125],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[416,117128,117130],{"className":31133,"code":117129,"language":31135,"meta":395,"style":395},"action = env.action_space.sample()\n",[422,117131,117132],{"__ignoreMap":395},[425,117133,117134,117136,117138],{"class":427,"line":428},[425,117135,108197],{"class":701},[425,117137,1204],{"class":1155},[425,117139,115776],{"class":701},[19,117141,117142],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[1099,117144,103071],{"id":103070},[19,117146,106239],{},[416,117148,117151],{"className":117149,"code":117150,"language":6187,"meta":395},[6185],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[422,117152,117150],{"__ignoreMap":395},[19,117154,117155],{},"这个环境已经具备强化学习环境的基本结构。",[19,117157,117158],{},"主函数里使用随机动作：",[416,117160,117161],{"className":31133,"code":117129,"language":31135,"meta":395,"style":395},[422,117162,117163],{"__ignoreMap":395},[425,117164,117165,117167,117169],{"class":427,"line":428},[425,117166,108197],{"class":701},[425,117168,1204],{"class":1155},[425,117170,115776],{"class":701},[19,117172,117173],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[1099,117175,103103],{"id":103102},[972,117177,117178,117181,117187,117196,117205,117214,117220],{},[450,117179,117180],{},"运行程序。",[450,117182,117183,117184,998],{},"确认 ",[422,117185,117186],{},"obs.shape == (10,)",[450,117188,111936,117189,117192,117193,998],{},[422,117190,117191],{},"env.action_space","，应类似 ",[422,117194,117195],{},"Box(-1.0, 1.0, (2,), float32)",[450,117197,106340,117198,117201,117202,998],{},[422,117199,117200],{},"self.max_steps = 10","，确认环境会更快 ",[422,117203,117204],{},"truncated=True",[450,117206,103166,117207,103169,117210,117213],{},[422,117208,117209],{},"terminated = dist \u003C 0.05",[422,117211,117212],{},"dist \u003C 0.2","，观察是否更容易结束。",[450,117215,103166,117216,117219],{},[422,117217,117218],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[450,117221,117222,117223,117225,117226,117229],{},"在 ",[422,117224,117088],{}," 里加入 ",[422,117227,117228],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[1099,117231,103208],{"id":103207},[14,117233,117235],{"id":117234},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,117237,117238,117239,117241],{},"Gymnasium 的 ",[422,117240,107889],{}," 返回 5 个值:",[416,117243,117245],{"className":31133,"code":117244,"language":31135,"meta":395,"style":395},"obs, reward, terminated, truncated, info\n",[422,117246,117247],{"__ignoreMap":395},[425,117248,117249],{"class":427,"line":428},[425,117250,117244],{"class":701},[19,117252,117253],{},"不是旧 Gym 的 4 个值。",[14,117255,117257,117260],{"id":117256},"datactrl-action-维度错误",[422,117258,117259],{},"data.ctrl[:] = action"," 维度错误",[19,117262,103278],{},[416,117264,117266],{"className":31133,"code":117265,"language":31135,"meta":395,"style":395},"print(self.model.nu)\nprint(action.shape)\n",[422,117267,117268,117279],{"__ignoreMap":395},[425,117269,117270,117272,117274,117276],{"class":427,"line":428},[425,117271,31170],{"class":691},[425,117273,1159],{"class":701},[425,117275,31578],{"class":691},[425,117277,117278],{"class":701},".model.nu)\n",[425,117280,117281,117283],{"class":427,"line":698},[425,117282,31170],{"class":691},[425,117284,117285],{"class":701},"(action.shape)\n",[19,117287,117288],{},"两者必须匹配。",[14,117290,117292],{"id":117291},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,117294,103217],{},[416,117296,117298],{"className":31133,"code":117297,"language":31135,"meta":395,"style":395},"mujoco.mj_forward(self.model, self.data)\n",[422,117299,117300],{"__ignoreMap":395},[425,117301,117302,117305,117307,117309,117311],{"class":427,"line":428},[425,117303,117304],{"class":701},"mujoco.mj_forward(",[425,117306,31578],{"class":691},[425,117308,115336],{"class":701},[425,117310,31578],{"class":691},[425,117312,115341],{"class":701},[14,117314,117316,117318],{"id":117315},"observation_space-维度和-obs-不一致",[422,117317,114355],{}," 维度和 obs 不一致",[19,117320,103330],{},[416,117322,117324],{"className":31133,"code":117323,"language":31135,"meta":395,"style":395},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[422,117325,117326,117336,117343],{"__ignoreMap":395},[425,117327,117328,117330,117332,117334],{"class":427,"line":428},[425,117329,111609],{"class":701},[425,117331,1204],{"class":1155},[425,117333,39628],{"class":691},[425,117335,115552],{"class":701},[425,117337,117338,117340],{"class":427,"line":698},[425,117339,31170],{"class":691},[425,117341,117342],{"class":701},"(obs.shape)\n",[425,117344,117345,117347,117349,117351],{"class":427,"line":710},[425,117346,31170],{"class":691},[425,117348,1159],{"class":701},[425,117350,31578],{"class":691},[425,117352,117353],{"class":701},".observation_space.shape)\n",[19,117355,117356],{},"两者必须一致。本章观测是：",[416,117358,117361],{"className":117359,"code":117360,"language":6187,"meta":395},[6185],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[422,117362,117360],{"__ignoreMap":395},[14,117364,117366],{"id":117365},"action-超过范围","action 超过范围",[19,117368,117369],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[416,117371,117372],{"className":31133,"code":116871,"language":31135,"meta":395,"style":395},[422,117373,117374],{"__ignoreMap":395},[425,117375,117376,117378,117380,117382,117384,117386,117388],{"class":427,"line":428},[425,117377,108197],{"class":701},[425,117379,1204],{"class":1155},[425,117381,108202],{"class":701},[425,117383,31578],{"class":691},[425,117385,115473],{"class":701},[425,117387,31578],{"class":691},[425,117389,115478],{"class":701},[19,117391,117392,117393,998],{},"这能避免无效动作直接写入 ",[422,117394,101831],{},[14,117396,117398],{"id":117397},"忘记返回-info","忘记返回 info",[19,117400,117238,117401,101773,117403,117405],{},[422,117402,70811],{},[422,117404,107889],{}," 都会返回 info：",[416,117407,117408],{"className":31133,"code":114148,"language":31135,"meta":395,"style":395},[422,117409,117410,117418],{"__ignoreMap":395},[425,117411,117412,117414,117416],{"class":427,"line":428},[425,117413,114155],{"class":701},[425,117415,1204],{"class":1155},[425,117417,114160],{"class":701},[425,117419,117420,117422,117424],{"class":427,"line":698},[425,117421,114165],{"class":701},[425,117423,1204],{"class":1155},[425,117425,114170],{"class":701},[19,117427,117428,117429,998],{},"即使暂时没有额外信息，也返回 ",[422,117430,33214],{},[1099,117432,117434],{"id":117433},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,117436,117437],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[972,117439,117440,117443,117446,117449,117452,117455],{},[450,117441,117442],{},"更稳定的 reward。",[450,117444,117445],{},"合理的 episode 长度。",[450,117447,117448],{},"可重复的随机目标采样。",[450,117450,117451],{},"render 接口。",[450,117453,117454],{},"环境注册代码。",[450,117456,117457],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,117459,117460],{},"如果只是自己写训练循环，最小形式是：",[416,117462,117464],{"className":31133,"code":117463,"language":31135,"meta":395,"style":395},"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",[422,117465,117466,117474,117490,117494,117510,117519,117528,117538],{"__ignoreMap":395},[425,117467,117468,117470,117472],{"class":427,"line":428},[425,117469,117099],{"class":701},[425,117471,1204],{"class":1155},[425,117473,115697],{"class":701},[425,117475,117476,117478,117480,117482,117484,117486,117488],{"class":427,"line":698},[425,117477,114155],{"class":701},[425,117479,1204],{"class":1155},[425,117481,115707],{"class":701},[425,117483,115321],{"class":6216},[425,117485,1204],{"class":1155},[425,117487,1341],{"class":691},[425,117489,1165],{"class":701},[425,117491,117492],{"class":427,"line":710},[425,117493,3400],{"emptyLinePlaceholder":1084},[425,117495,117496,117498,117500,117502,117504,117506,117508],{"class":427,"line":721},[425,117497,4025],{"class":1155},[425,117499,102256],{"class":701},[425,117501,27034],{"class":1155},[425,117503,33198],{"class":691},[425,117505,1159],{"class":701},[425,117507,7410],{"class":691},[425,117509,31541],{"class":701},[425,117511,117512,117515,117517],{"class":427,"line":735},[425,117513,117514],{"class":701},"    action ",[425,117516,1204],{"class":1155},[425,117518,115776],{"class":701},[425,117520,117521,117524,117526],{"class":427,"line":743},[425,117522,117523],{"class":701},"    obs, reward, terminated, truncated, info ",[425,117525,1204],{"class":1155},[425,117527,114170],{"class":701},[425,117529,117530,117532,117534,117536],{"class":427,"line":751},[425,117531,4101],{"class":1155},[425,117533,115842],{"class":701},[425,117535,115845],{"class":1155},[425,117537,115848],{"class":701},[425,117539,117540,117543,117545],{"class":427,"line":759},[425,117541,117542],{"class":701},"        obs, info ",[425,117544,1204],{"class":1155},[425,117546,114160],{"class":701},[1099,117548,117550],{"id":117549},"_9本章小结","9.本章小结",[19,117552,117553],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[416,117555,117558],{"className":117556,"code":117557,"language":6187,"meta":395},[6185],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[422,117559,117557],{"__ignoreMap":395},[19,117561,117562],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[1074,117564,117565],{},"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":395,"searchDepth":698,"depth":698,"links":117567},[117568,117569,117570,117577,117581,117582,117583,117593,117594],{"id":101401,"depth":698,"text":101402},{"id":101524,"depth":698,"text":101525},{"id":101799,"depth":698,"text":101800,"children":117571},[117572,117574,117576],{"id":114379,"depth":710,"text":117573},"terminated 和 truncated 的区别",{"id":114482,"depth":710,"text":117575},"observation_space 和 action_space",{"id":114609,"depth":710,"text":114610},{"id":102007,"depth":698,"text":102008,"children":117578},[117579,117580],{"id":102327,"depth":710,"text":102327},{"id":102463,"depth":710,"text":102463},{"id":103070,"depth":698,"text":103071},{"id":103102,"depth":698,"text":103103},{"id":103207,"depth":698,"text":103208,"children":117584},[117585,117586,117588,117589,117591,117592],{"id":117234,"depth":710,"text":117235},{"id":117256,"depth":710,"text":117587},"data.ctrl[:] = action 维度错误",{"id":117291,"depth":710,"text":117292},{"id":117315,"depth":710,"text":117590},"observation_space 维度和 obs 不一致",{"id":117365,"depth":710,"text":117366},{"id":117397,"depth":710,"text":117398},{"id":117433,"depth":698,"text":117434},{"id":117549,"depth":698,"text":117550},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":114132,"description":395},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117601,"title":117602,"body":117603,"description":118026,"extension":1082,"meta":118027,"navigation":1084,"path":118028,"seo":118029,"stem":118030,"__hash__":118031},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117604,"toc":118016},[117605,117609,117612,117615,117635,117641,117647,117657,117660,117663,117683,117686,117690,117693,117699,117702,117716,117719,117722,117796,117799,117805,117808,117831,117834,117884,117887,117893,117896,117899,117902,117921,117924,117930,117933,117936,117939,117959,117962,117965,117968,118013],[10,117606,117608],{"id":117607},"mujoco-学习","MuJoCo 学习",[19,117610,117611],{},"初版",[19,117613,117614],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[972,117616,117617,117620,117623,117632],{},[450,117618,117619],{},"MuJoCo 模型文件在描述什么。",[450,117621,117622],{},"Python 代码怎样读取和推进仿真。",[450,117624,117625,1362,117627,1362,117629,117631],{},[422,117626,104785],{},[422,117628,105115],{},[422,117630,105118],{}," 这些数组为什么重要。",[450,117633,117634],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,117636,117637,117638,117640],{},"默认环境为 Fedora 44、Python >= 3.10、",[422,117639,101782],{}," 官方 Python bindings。",[19,117642,117643,117644,117646],{},"注意：本文禁止使用 ",[422,117645,101767],{},"。所有示例均使用：",[416,117648,117649],{"className":31133,"code":102333,"language":31135,"meta":395,"style":395},[422,117650,117651],{"__ignoreMap":395},[425,117652,117653,117655],{"class":427,"line":428},[425,117654,31147],{"class":1155},[425,117656,102056],{"class":701},[1099,117658,117659],{"id":117659},"适合谁阅读",[19,117661,117662],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[972,117664,117665,117668,117671,117674],{},[450,117666,117667],{},"没学过 MuJoCo，只会一点 Python。",[450,117669,117670],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[450,117672,117673],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[450,117675,117676,117677,117679,117680,117682],{},"以前接触过 ",[422,117678,101767],{},"，现在想迁移到官方 ",[422,117681,101776],{}," Python bindings。",[19,117684,117685],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[1099,117687,117689],{"id":117688},"mujoco-到底是什么","MuJoCo 到底是什么",[19,117691,117692],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[416,117694,117697],{"className":117695,"code":117696,"language":6187,"meta":395},[6185],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[422,117698,117696],{"__ignoreMap":395},[19,117700,117701],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[972,117703,117704,117707,117710,117713],{},[450,117705,117706],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[450,117708,117709],{},"快速测试控制算法，不必一开始就上真实机器人。",[450,117711,117712],{},"生成强化学习环境。",[450,117714,117715],{},"采集状态、动作、图像、奖励等训练数据。",[1099,117717,117718],{"id":117718},"学习前的心智模型",[19,117720,117721],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[35,117723,117724,117736],{},[38,117725,117726],{},[41,117727,117728,117731,117734],{},[44,117729,117730],{"align":46},"部分",[44,117732,117733],{"align":46},"负责什么",[44,117735,22184],{"align":46},[55,117737,117738,117749,117761,117773,117785],{},[41,117739,117740,117743,117746],{},[60,117741,117742],{"align":46},"MJCF XML",[60,117744,117745],{"align":46},"定义世界和机器人结构",[60,117747,117748],{"align":46},"地面、盒子、关节、电机、摄像头",[41,117750,117751,117755,117758],{},[60,117752,117753],{"align":46},[422,117754,101464],{},[60,117756,117757],{"align":46},"编译后的静态模型",[60,117759,117760],{"align":46},"有几个关节、有几个电机、时间步长是多少",[41,117762,117763,117767,117770],{},[60,117764,117765],{"align":46},[422,117766,101474],{},[60,117768,117769],{"align":46},"运行中的动态状态",[60,117771,117772],{"align":46},"当前时间、位置、速度、电机输入",[41,117774,117775,117779,117782],{},[60,117776,117777],{"align":46},[422,117778,101970],{},[60,117780,117781],{"align":46},"推进一步物理仿真",[60,117783,117784],{"align":46},"根据重力、力、碰撞更新状态",[41,117786,117787,117790,117793],{},[60,117788,117789],{"align":46},"Viewer \u002F Renderer",[60,117791,117792],{"align":46},"把仿真显示出来",[60,117794,117795],{"align":46},"打开窗口或保存图片",[19,117797,117798],{},"一句话总结：",[416,117800,117803],{"className":117801,"code":117802,"language":6187,"meta":395},[6185],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[422,117804,117802],{"__ignoreMap":395},[19,117806,117807],{},"参考来源：",[447,117809,117810,117817,117824],{},[450,117811,117812,117813],{},"MuJoCo Python 官方文档：",[22,117814,117815],{"href":117815,"rel":117816},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[26],[450,117818,117819,117820],{},"MuJoCo XML Reference：",[22,117821,117822],{"href":117822,"rel":117823},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[26],[450,117825,117826,117827],{},"MuJoCo Overview：",[22,117828,117829],{"href":117829,"rel":117830},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[26],[1099,117832,117833],{"id":117833},"章节目录",[972,117835,117836,117842,117848,117854,117860,117866,117872,117878],{},[450,117837,117838],{},[22,117839,117841],{"href":117840},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[450,117843,117844],{},[22,117845,117847],{"href":117846},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[450,117849,117850],{},[22,117851,117853],{"href":117852},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[450,117855,117856],{},[22,117857,117859],{"href":117858},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[450,117861,117862],{},[22,117863,117865],{"href":117864},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[450,117867,117868],{},[22,117869,117871],{"href":117870},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[450,117873,117874],{},[22,117875,117877],{"href":117876},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[450,117879,117880],{},[22,117881,117883],{"href":117882},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[1099,117885,117886],{"id":117886},"推荐学习路线",[416,117888,117891],{"className":117889,"code":117890,"language":6187,"meta":395},[6185],"环境安装\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",[422,117892,117890],{"__ignoreMap":395},[19,117894,117895],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[1099,117897,117898],{"id":117898},"建议的目录结构",[19,117900,117901],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[416,117903,117905],{"className":418,"code":117904,"language":420,"meta":395,"style":395},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[422,117906,117907,117915],{"__ignoreMap":395},[425,117908,117909,117911,117913],{"class":427,"line":428},[425,117910,102021],{"class":431},[425,117912,29971],{"class":691},[425,117914,102026],{"class":435},[425,117916,117917,117919],{"class":427,"line":698},[425,117918,102031],{"class":691},[425,117920,102026],{"class":435},[19,117922,117923],{},"每一章的代码都单独保存：",[416,117925,117928],{"className":117926,"code":117927,"language":6187,"meta":395},[6185],"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",[422,117929,117927],{"__ignoreMap":395},[19,117931,117932],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[1099,117934,117935],{"id":117935},"学习方法",[19,117937,117938],{},"每章建议按这个顺序操作：",[972,117940,117941,117944,117947,117950,117953,117956],{},[450,117942,117943],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[450,117945,117946],{},"复制最小可运行代码，保存成指定文件。",[450,117948,117949],{},"运行代码，确认没有报错。",[450,117951,117952],{},"对照“运行结果说明”理解输出。",[450,117954,117955],{},"做“验证步骤”，主动改一两个参数。",[450,117957,117958],{},"遇到报错先看“常见错误与解决方案”。",[19,117960,117961],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[1099,117963,117964],{"id":117964},"全局排错顺序",[19,117966,117967],{},"遇到问题时，按下面顺序查：",[972,117969,117970,117976,117982,117987,117990,117993,118000,118010],{},[450,117971,117972,117973],{},"Python 环境是否激活：",[422,117974,117975],{},"which python",[450,117977,117978,117979],{},"MuJoCo 是否能导入：",[422,117980,117981],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[450,117983,117984,117985],{},"是否误装了 ",[422,117986,101767],{},[450,117988,117989],{},"XML 标签是否闭合、属性是否拼写正确",[450,117991,117992],{},"actuator 引用的 joint 名字是否存在",[450,117994,117995,117997,117998],{},[422,117996,101831],{}," 的长度是否等于 ",[422,117999,102913],{},[450,118001,106340,118002,83294,118004,118006,118007],{},[422,118003,104785],{},[422,118005,105115],{}," 后是否调用了 ",[422,118008,118009],{},"mujoco.mj_forward",[450,118011,118012],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[1074,118014,118015],{},"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":395,"searchDepth":698,"depth":698,"links":118017},[118018,118019,118020,118021,118022,118023,118024,118025],{"id":117659,"depth":698,"text":117659},{"id":117688,"depth":698,"text":117689},{"id":117718,"depth":698,"text":117718},{"id":117833,"depth":698,"text":117833},{"id":117886,"depth":698,"text":117886},{"id":117898,"depth":698,"text":117898},{"id":117935,"depth":698,"text":117935},{"id":117964,"depth":698,"text":117964},"仿真搭建。",{"category":24376},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117602,"description":118026},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":118033,"title":118034,"body":118035,"description":24374,"extension":1082,"meta":118490,"navigation":1084,"path":118491,"seo":118492,"stem":118493,"__hash__":118494},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":118036,"toc":118488},[118037,118040,118043,118049,118485],[10,118038,118034],{"id":118039},"_1-最常用的基本操作更新",[19,118041,118042],{},"装linux系统教程：",[19,118044,118045],{},[22,118046,118047],{"href":118047,"rel":118048},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[26],[416,118050,118054],{"className":118051,"code":118052,"language":118053,"meta":395,"style":395},"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",[422,118055,118056,118061,118066,118075,118080,118089,118094,118114,118119,118130,118135,118144,118149,118177,118182,118201,118206,118225,118229,118234,118250,118254,118259,118289,118293,118298,118314,118318,118323,118338,118342,118347,118363,118367,118372,118384,118396,118400,118405,118422,118426,118431,118449,118453,118458,118467,118471,118476],{"__ignoreMap":395},[425,118057,118058],{"class":427,"line":428},[425,118059,118060],{"class":1216},"#更新相关的知识\n",[425,118062,118063],{"class":427,"line":698},[425,118064,118065],{"class":1216},"# 更新软件包列表（从服务器获取最新软件信息）\n",[425,118067,118068,118070,118073],{"class":427,"line":710},[425,118069,652],{"class":431},[425,118071,118072],{"class":435}," apt",[425,118074,27232],{"class":435},[425,118076,118077],{"class":427,"line":721},[425,118078,118079],{"class":1216},"# 升级所有可更新的软件包（不删除旧包）\n",[425,118081,118082,118084,118086],{"class":427,"line":735},[425,118083,652],{"class":431},[425,118085,118072],{"class":435},[425,118087,118088],{"class":435}," upgrade\n",[425,118090,118091],{"class":427,"line":743},[425,118092,118093],{"class":1216},"#更新和升级软件包\n",[425,118095,118096,118098,118100,118103,118105,118107,118109,118112],{"class":427,"line":751},[425,118097,652],{"class":431},[425,118099,118072],{"class":435},[425,118101,118102],{"class":435}," update",[425,118104,27180],{"class":701},[425,118106,652],{"class":431},[425,118108,118072],{"class":435},[425,118110,118111],{"class":435}," upgrade",[425,118113,101736],{"class":691},[425,118115,118116],{"class":427,"line":759},[425,118117,118118],{"class":1216},"#列出可更新的软件包及版本信息\n",[425,118120,118121,118124,118127],{"class":427,"line":770},[425,118122,118123],{"class":431},"apt",[425,118125,118126],{"class":435}," list",[425,118128,118129],{"class":691}," --upgradable\n",[425,118131,118132],{"class":427,"line":780},[425,118133,118134],{"class":1216},"#彻底升级（处理依赖关系，可能删除旧包）\n",[425,118136,118137,118139,118141],{"class":427,"line":790},[425,118138,652],{"class":431},[425,118140,118072],{"class":435},[425,118142,118143],{"class":435}," full-upgrade\n",[425,118145,118146],{"class":427,"line":805},[425,118147,118148],{"class":1216},"#设置指定版本\n",[425,118150,118151,118153,118155,118157,118159,118162,118164,118166,118168,118170,118173,118175],{"class":427,"line":818},[425,118152,652],{"class":431},[425,118154,118072],{"class":435},[425,118156,24828],{"class":435},[425,118158,29657],{"class":1155},[425,118160,118161],{"class":435},"package_nam",[425,118163,1232],{"class":701},[425,118165,2107],{"class":1155},[425,118167,1204],{"class":435},[425,118169,2057],{"class":1155},[425,118171,118172],{"class":435},"version_numbe",[425,118174,1818],{"class":701},[425,118176,52062],{"class":1155},[425,118178,118179],{"class":427,"line":831},[425,118180,118181],{"class":1216},"#只安装软件包不升级\n",[425,118183,118184,118186,118188,118190,118192,118194,118196,118198],{"class":427,"line":841},[425,118185,652],{"class":431},[425,118187,118072],{"class":435},[425,118189,24828],{"class":435},[425,118191,29657],{"class":1155},[425,118193,118161],{"class":435},[425,118195,1232],{"class":701},[425,118197,2107],{"class":1155},[425,118199,118200],{"class":691}," --no-upgrade\n",[425,118202,118203],{"class":427,"line":852},[425,118204,118205],{"class":1216},"#只升级，不存在就不安装\n",[425,118207,118208,118210,118212,118214,118216,118218,118220,118222],{"class":427,"line":862},[425,118209,652],{"class":431},[425,118211,118072],{"class":435},[425,118213,24828],{"class":435},[425,118215,29657],{"class":1155},[425,118217,118161],{"class":435},[425,118219,1232],{"class":701},[425,118221,2107],{"class":1155},[425,118223,118224],{"class":691}," --only-upgrade\n",[425,118226,118227],{"class":427,"line":878},[425,118228,3400],{"emptyLinePlaceholder":1084},[425,118230,118231],{"class":427,"line":914},[425,118232,118233],{"class":1216},"#安装指定的软件命令\n",[425,118235,118236,118238,118240,118242,118244,118246,118248],{"class":427,"line":943},[425,118237,652],{"class":431},[425,118239,118072],{"class":435},[425,118241,24828],{"class":435},[425,118243,29657],{"class":1155},[425,118245,118161],{"class":435},[425,118247,1232],{"class":701},[425,118249,52062],{"class":1155},[425,118251,118252],{"class":427,"line":956},[425,118253,3400],{"emptyLinePlaceholder":1084},[425,118255,118256],{"class":427,"line":964},[425,118257,118258],{"class":1216},"#安装多个软件包\n",[425,118260,118261,118263,118265,118267,118269,118272,118275,118277,118279,118282,118284,118286],{"class":427,"line":2733},[425,118262,652],{"class":431},[425,118264,118072],{"class":435},[425,118266,24828],{"class":435},[425,118268,29657],{"class":1155},[425,118270,118271],{"class":435},"package_",[425,118273,118274],{"class":1155},"1>",[425,118276,29657],{"class":1155},[425,118278,118271],{"class":435},[425,118280,118281],{"class":1155},"2>",[425,118283,29657],{"class":1155},[425,118285,118271],{"class":435},[425,118287,118288],{"class":1155},"3>\n",[425,118290,118291],{"class":427,"line":2750},[425,118292,3400],{"emptyLinePlaceholder":1084},[425,118294,118295],{"class":427,"line":2755},[425,118296,118297],{"class":1216},"#更新指定的软件命令\n",[425,118299,118300,118302,118304,118306,118308,118310,118312],{"class":427,"line":2760},[425,118301,652],{"class":431},[425,118303,118072],{"class":435},[425,118305,118102],{"class":435},[425,118307,29657],{"class":1155},[425,118309,118161],{"class":435},[425,118311,1232],{"class":701},[425,118313,52062],{"class":1155},[425,118315,118316],{"class":427,"line":2765},[425,118317,3400],{"emptyLinePlaceholder":1084},[425,118319,118320],{"class":427,"line":2779},[425,118321,118322],{"class":1216},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[425,118324,118325,118327,118330,118332,118334,118336],{"class":427,"line":2784},[425,118326,118123],{"class":431},[425,118328,118329],{"class":435}," show",[425,118331,29657],{"class":1155},[425,118333,118161],{"class":435},[425,118335,1232],{"class":701},[425,118337,52062],{"class":1155},[425,118339,118340],{"class":427,"line":3577},[425,118341,3400],{"emptyLinePlaceholder":1084},[425,118343,118344],{"class":427,"line":3591},[425,118345,118346],{"class":1216},"#删除软件包命令\n",[425,118348,118349,118351,118353,118355,118357,118359,118361],{"class":427,"line":3599},[425,118350,652],{"class":431},[425,118352,118072],{"class":435},[425,118354,27070],{"class":435},[425,118356,29657],{"class":1155},[425,118358,118161],{"class":435},[425,118360,1232],{"class":701},[425,118362,52062],{"class":1155},[425,118364,118365],{"class":427,"line":3604},[425,118366,3400],{"emptyLinePlaceholder":1084},[425,118368,118369],{"class":427,"line":3610},[425,118370,118371],{"class":1216},"# 清理旧版本和缓存（释放磁盘空间）\n",[425,118373,118374,118376,118378,118381],{"class":427,"line":3616},[425,118375,652],{"class":431},[425,118377,118072],{"class":435},[425,118379,118380],{"class":435}," autoremove",[425,118382,118383],{"class":1216},"  # 删除不再需要的依赖和库文件\n",[425,118385,118386,118388,118390,118393],{"class":427,"line":3621},[425,118387,652],{"class":431},[425,118389,118072],{"class":435},[425,118391,118392],{"class":435}," clean",[425,118394,118395],{"class":1216},"       # 清理下载的缓存包\n",[425,118397,118398],{"class":427,"line":8948},[425,118399,3400],{"emptyLinePlaceholder":1084},[425,118401,118402],{"class":427,"line":8972},[425,118403,118404],{"class":1216},"#移除软件包及配置文件\n",[425,118406,118407,118409,118411,118414,118416,118418,118420],{"class":427,"line":8977},[425,118408,652],{"class":431},[425,118410,118072],{"class":435},[425,118412,118413],{"class":435}," purge",[425,118415,29657],{"class":1155},[425,118417,118161],{"class":435},[425,118419,1232],{"class":701},[425,118421,52062],{"class":1155},[425,118423,118424],{"class":427,"line":8983},[425,118425,3400],{"emptyLinePlaceholder":1084},[425,118427,118428],{"class":427,"line":9010},[425,118429,118430],{"class":1216},"#查找软件包命令\n",[425,118432,118433,118435,118437,118440,118442,118445,118447],{"class":427,"line":9015},[425,118434,652],{"class":431},[425,118436,118072],{"class":435},[425,118438,118439],{"class":435}," search",[425,118441,29657],{"class":1155},[425,118443,118444],{"class":435},"keywor",[425,118446,1463],{"class":701},[425,118448,52062],{"class":1155},[425,118450,118451],{"class":427,"line":9021},[425,118452,3400],{"emptyLinePlaceholder":1084},[425,118454,118455],{"class":427,"line":9033},[425,118456,118457],{"class":1216},"#列出所有已安装的包\n",[425,118459,118460,118462,118464],{"class":427,"line":9045},[425,118461,118123],{"class":431},[425,118463,118126],{"class":435},[425,118465,118466],{"class":691}," --installed\n",[425,118468,118469],{"class":427,"line":9057},[425,118470,3400],{"emptyLinePlaceholder":1084},[425,118472,118473],{"class":427,"line":10715},[425,118474,118475],{"class":1216},"#列出所有已安装的包的版本信息\n",[425,118477,118478,118480,118482],{"class":427,"line":10740},[425,118479,118123],{"class":431},[425,118481,118126],{"class":435},[425,118483,118484],{"class":691}," --all-versions\n",[1074,118486,118487],{},"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":395,"searchDepth":698,"depth":698,"links":118489},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":118034,"description":24374},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118496,"title":118497,"body":118498,"description":24374,"extension":1082,"meta":119239,"navigation":1084,"path":119240,"seo":119241,"stem":119242,"__hash__":119243},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118499,"toc":119226},[118500,118503,118507,118510,118516,118520,118524,118530,118535,118540,118545,118550,118555,118558,118561,118564,118567,118571,118574,118579,118582,118587,118590,118595,118602,118605,118608,118611,118614,118617,118628,118632,118636,118641,118646,118650,118655,118659,118664,118668,118672,118677,118680,118725,118730,118734,118738,118743,118749,118754,118764,118769,118779,118784,118789,118816,118820,118823,118828,118831,118856,118860,118865,118868,118873,118878,118898,118903,118906,118921,118925,118978,118981,118986,118990,118993,119008,119011,119014,119019,119023,119027,119030,119034,119038,119041,119046,119051,119055,119062,119070,119073,119080,119085,119090,119093,119098,119105,119110,119117,119121,119123,119128,119132,119135,119138,119143,119146,119151,119154,119159,119164,119169,119173,119178,119182,119223],[10,118501,118497],{"id":118502},"_2-linux装机教程",[1099,118504,118506],{"id":118505},"_21-实体机","2.1 实体机",[19,118508,118509],{},"使用清华源：（Ubuntu24.04）",[19,118511,118512],{},[22,118513,118514],{"href":118514,"rel":118515},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[26],[1099,118517,118519],{"id":118518},"_22-普通虚拟机","2.2 普通虚拟机",[14,118521,118523],{"id":118522},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,118525,118526],{},[22,118527,118528],{"href":118528,"rel":118529},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[26],[19,118531,118532],{},[393,118533],{"alt":395,"src":118534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,118536,118537],{},[393,118538],{"alt":395,"src":118539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,118541,118542],{},[393,118543],{"alt":395,"src":118544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,118546,118547],{},[393,118548],{"alt":395,"src":118549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,118551,118552],{},[393,118553],{"alt":395,"src":118554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,118556,118557],{},"内存4G（4096MB）；",[19,118559,118560],{},"CPU给4个核；",[19,118562,118563],{},"硬盘动态分配60G；",[19,118565,118566],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[14,118568,118570],{"id":118569},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,118572,118573],{},"按照1.1的步骤下载Ubuntu",[19,118575,118576],{},[393,118577],{"alt":395,"src":118578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,118580,118581],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,118583,118584],{},[393,118585],{"alt":395,"src":118586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,118588,118589],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,118591,118592],{},[393,118593],{"alt":395,"src":118594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,118596,118597,118598,118601],{},"选择“正常安装”(找不到都用Alt+F7)， ",[400,118599,118600],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,118603,118604],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,118606,118607],{},"将改动写入磁盘吗 继续",[19,118609,118610],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,118612,118613],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,118615,118616],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,118618,118619,118620,118623,118624,118627],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[400,118621,118622],{},"除了"," 选不发送系统信息与不升级之外， ",[400,118625,118626],{},"其它"," 都跳过或前进）",[14,118629,118631],{"id":118630},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22995,118633,118635],{"id":118634},"_2231-全屏","2.2.3.1 全屏",[19,118637,118638],{},[393,118639],{"alt":395,"src":118640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,118642,118643],{},[393,118644],{"alt":395,"src":118645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22995,118647,118649],{"id":118648},"_2232-文件交换","2.2.3.2 文件交换",[19,118651,118652],{},[393,118653],{"alt":395,"src":118654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22995,118656,118658],{"id":118657},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,118660,118661],{},[393,118662],{"alt":395,"src":118663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[1099,118665,118667],{"id":118666},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[14,118669,118671],{"id":118670},"_231-简介与优缺点","2.3.1 简介与优缺点",[972,118673,118674],{},[450,118675,118676],{},"什么情况下推荐？",[19,118678,118679],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[972,118681,118682],{"start":698},[450,118683,118684,118685],{},"优缺点：",[972,118686,118687,118717],{},[450,118688,118689,118690],{},"优点：",[972,118691,118692,118695,118702,118705,118708,118711,118714],{},[450,118693,118694],{},"WSL2是最好的Linux发行版;(bushi)",[450,118696,118697,118698,118701],{},"性能损耗极低。且比在Windows上跑深度性能 ",[400,118699,118700],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[450,118703,118704],{},"非常方便调用USB设备，可以USB直通;",[450,118706,118707],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[450,118709,118710],{},"非常方便Win与WSL2互相传文件等协同操作;",[450,118712,118713],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[450,118715,118716],{},"非常方便使用Windows的VScode远程开发;",[450,118718,118719,118720],{},"缺点：",[972,118721,118722],{},[450,118723,118724],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,118726,118727],{},[393,118728],{"alt":395,"src":118729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[14,118731,118733],{"id":118732},"_232-安装教程","2.3.2 安装教程",[22995,118735,118737],{"id":118736},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[972,118739,118740],{},[450,118741,118742],{},"方法一(图形界面)",[19,118744,118745,118746,25611],{},"用Win+R输入",[422,118747,118748],{},"appwiz.cpl",[19,118750,118751],{},[393,118752],{"alt":395,"src":118753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,118755,118756,118757,118760,118761,27462],{},"点击OK进入 ",[400,118758,118759],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[400,118762,118763],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,118765,118766],{},[393,118767],{"alt":395,"src":118768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,118770,118771,118772,101773,118775,118778],{},"选择 ",[400,118773,118774],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[400,118776,118777],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,118780,118781],{},[393,118782],{"alt":395,"src":118783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[972,118785,118786],{"start":698},[450,118787,118788],{},"方法二(命令行)",[416,118790,118794],{"className":118791,"code":118792,"language":118793,"meta":395,"style":395},"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",[422,118795,118796,118801,118806,118811],{"__ignoreMap":395},[425,118797,118798],{"class":427,"line":428},[425,118799,118800],{},"# 开启 Linux 子系统\n",[425,118802,118803],{"class":427,"line":698},[425,118804,118805],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[425,118807,118808],{"class":427,"line":710},[425,118809,118810],{},"# 开启虚拟机平台\n",[425,118812,118813],{"class":427,"line":721},[425,118814,118815],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22995,118817,118819],{"id":118818},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,118821,118822],{},"用管理员权限打开powershell",[19,118824,118825],{},[393,118826],{"alt":395,"src":118827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,118829,118830],{},"升级WSL并设置默认版本为WSL2",[416,118832,118834],{"className":118791,"code":118833,"language":118793,"meta":395,"style":395},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[422,118835,118836,118841,118846,118851],{"__ignoreMap":395},[425,118837,118838],{"class":427,"line":428},[425,118839,118840],{},"# 更新 wsl\n",[425,118842,118843],{"class":427,"line":698},[425,118844,118845],{},"wsl --update\n",[425,118847,118848],{"class":427,"line":710},[425,118849,118850],{},"# 将 wsl 版本设置为 wsl2\n",[425,118852,118853],{"class":427,"line":721},[425,118854,118855],{},"wsl --set-default-version 2\n",[22995,118857,118859],{"id":118858},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[972,118861,118862],{},[450,118863,118864],{},"方式一(商店下载)",[19,118866,118867],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,118869,118870],{},[393,118871],{"alt":395,"src":118872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[972,118874,118875],{"start":698},[450,118876,118877],{},"方式二(命令行安装)",[416,118879,118881],{"className":118791,"code":118880,"language":118793,"meta":395,"style":395},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[422,118882,118883,118888,118893],{"__ignoreMap":395},[425,118884,118885],{"class":427,"line":428},[425,118886,118887],{},"# 列出可安装的 Linux 版本\n",[425,118889,118890],{"class":427,"line":698},[425,118891,118892],{},"#（需要科学手段）\n",[425,118894,118895],{"class":427,"line":710},[425,118896,118897],{},"wsl --list --online\n",[19,118899,118900],{},[393,118901],{"alt":395,"src":118902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,118904,118905],{},"选择对应发行版并安装",[416,118907,118909],{"className":118791,"code":118908,"language":118793,"meta":395,"style":395},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[422,118910,118911,118916],{"__ignoreMap":395},[425,118912,118913],{"class":427,"line":428},[425,118914,118915],{},"# Ubuntu安装完毕后需要重启系统\n",[425,118917,118918],{"class":427,"line":698},[425,118919,118920],{},"wsl --install -d Ubuntu-24.04\n",[22995,118922,118924],{"id":118923},"_2324-查看系统状态","2.3.2.4 查看系统状态",[416,118926,118928],{"className":118791,"code":118927,"language":118793,"meta":395,"style":395},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[422,118929,118930,118935,118940,118945,118950,118954,118958,118963,118968,118973],{"__ignoreMap":395},[425,118931,118932],{"class":427,"line":428},[425,118933,118934],{},"# 查看 wsl\n",[425,118936,118937],{"class":427,"line":698},[425,118938,118939],{},"wsl -l\n",[425,118941,118942],{"class":427,"line":710},[425,118943,118944],{},"# 查看 wsl 运行版本或模式\n",[425,118946,118947],{"class":427,"line":721},[425,118948,118949],{},"wsl -l -v\n",[425,118951,118952],{"class":427,"line":735},[425,118953,3400],{"emptyLinePlaceholder":1084},[425,118955,118956],{"class":427,"line":743},[425,118957,3400],{"emptyLinePlaceholder":1084},[425,118959,118960],{"class":427,"line":751},[425,118961,118962],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[425,118964,118965],{"class":427,"line":759},[425,118966,118967],{},"wsl --set-version \u003Cdistro> 2\n",[425,118969,118970],{"class":427,"line":770},[425,118971,118972],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[425,118974,118975],{"class":427,"line":780},[425,118976,118977],{},"wsl --unregister \u003Cdistro>\n",[19,118979,118980],{},"输出Version为2即正常",[19,118982,118983],{},[393,118984],{"alt":395,"src":118985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22995,118987,118989],{"id":118988},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,118991,118992],{},"直接在Powershell里输入wsl命令进入子系统",[416,118994,118996],{"className":118791,"code":118995,"language":118793,"meta":395,"style":395},"# 进入子系统\nwsl\n",[422,118997,118998,119003],{"__ignoreMap":395},[425,118999,119000],{"class":427,"line":428},[425,119001,119002],{},"# 进入子系统\n",[425,119004,119005],{"class":427,"line":698},[425,119006,119007],{},"wsl\n",[19,119009,119010],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,119012,119013],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,119015,119016],{},[393,119017],{"alt":395,"src":119018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[14,119020,119022],{"id":119021},"_233-配置各种环境","2.3.3 配置各种环境",[22995,119024,119026],{"id":119025},"_2331-换源","2.3.3.1 换源",[19,119028,119029],{},"(同实体机LINUX，往下找教程)",[22995,119031,119033],{"id":119032},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23907,119035,119037],{"id":119036},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,119039,119040],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,119042,119043],{},[393,119044],{"alt":395,"src":119045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,119047,119048],{},[393,119049],{"alt":395,"src":119050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23907,119052,119054],{"id":119053},"_23322-cuda","2.3.3.2.2 CUDA",[19,119056,119057,119058],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[22,119059,119060],{"href":119060,"rel":119061},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[26],[19,119063,119064,119067],{},[393,119065],{"alt":395,"src":119066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[393,119068],{"alt":395,"src":119069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,119071,119072],{},"在下方的网站，选择合适的版本。",[19,119074,119075,119076],{},"WSL2 专属 CUDA 指南：",[22,119077,119078],{"href":119078,"rel":119079},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[26],[19,119081,119082],{},[400,119083,119084],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,119086,119087],{},[393,119088],{"alt":395,"src":119089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,119091,119092],{},"挨行敲一遍",[19,119094,119095],{},[393,119096],{"alt":395,"src":119097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,119099,119100,119101,119104],{},"敲完后，输入",[422,119102,119103],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,119106,119107],{},[393,119108],{"alt":395,"src":119109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,119111,119112,119113,119116],{},"（请详看下方教程的",[400,119114,119115],{},"安装CUDA的配置环境来看","如何配置环境）",[23907,119118,119120],{"id":119119},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,119122,119029],{},[19,119124,119125],{},[393,119126],{"alt":395,"src":119127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22995,119129,119131],{"id":119130},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,119133,119134],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,119136,119137],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,119139,119140],{},[393,119141],{"alt":395,"src":119142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,119144,119145],{},"连接WSL2",[19,119147,119148],{},[393,119149],{"alt":395,"src":119150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,119152,119153],{},"远程开发成功。",[19,119155,119156],{},[393,119157],{"alt":395,"src":119158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,119160,119161],{},[393,119162],{"alt":395,"src":119163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,119165,119166],{},[393,119167],{"alt":395,"src":119168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22995,119170,119172],{"id":119171},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,119174,119175],{},[393,119176],{"alt":395,"src":119177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22995,119179,119181],{"id":119180},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[416,119183,119185],{"className":118051,"code":119184,"language":118053,"meta":395,"style":395},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[422,119186,119187,119195,119203,119214,119218],{"__ignoreMap":395},[425,119188,119189,119191,119193],{"class":427,"line":428},[425,119190,652],{"class":431},[425,119192,118072],{"class":435},[425,119194,27232],{"class":435},[425,119196,119197,119199,119201],{"class":427,"line":698},[425,119198,652],{"class":431},[425,119200,118072],{"class":435},[425,119202,118088],{"class":435},[425,119204,119205,119207,119209,119211],{"class":427,"line":710},[425,119206,652],{"class":431},[425,119208,118072],{"class":435},[425,119210,24828],{"class":435},[425,119212,119213],{"class":435}," mesa-utils\n",[425,119215,119216],{"class":427,"line":721},[425,119217,3400],{"emptyLinePlaceholder":1084},[425,119219,119220],{"class":427,"line":735},[425,119221,119222],{"class":1216},"#然后重启wsl2即可\n",[1074,119224,119225],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":395,"searchDepth":698,"depth":698,"links":119227},[119228,119229,119234],{"id":118505,"depth":698,"text":118506},{"id":118518,"depth":698,"text":118519,"children":119230},[119231,119232,119233],{"id":118522,"depth":710,"text":118523},{"id":118569,"depth":710,"text":118570},{"id":118630,"depth":710,"text":118631},{"id":118666,"depth":698,"text":118667,"children":119235},[119236,119237,119238],{"id":118670,"depth":710,"text":118671},{"id":118732,"depth":710,"text":118733},{"id":119021,"depth":710,"text":119022},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118497,"description":24374},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":119245,"title":119246,"body":119247,"description":24374,"extension":1082,"meta":122183,"navigation":1084,"path":122184,"seo":122185,"stem":122186,"__hash__":122187},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119248,"toc":122155},[119249,119252,119256,119262,119266,119272,119276,119464,119467,119472,119476,119480,119483,119486,119492,119497,119500,119503,119508,119541,119546,119550,119627,119630,119635,119639,119642,119681,119684,119693,119711,119716,119723,119840,119845,119848,119875,119880,119884,119893,119943,119950,119954,119957,119971,119978,120012,120017,120021,120044,120047,120052,120056,120059,120062,120065,120107,120111,120114,120117,120158,120162,120166,120169,120174,120179,120182,120205,120208,120216,120221,120224,120229,120234,120237,120242,120246,120251,120274,120279,120341,120349,120354,120359,120362,120367,120370,120375,120380,120398,120403,120409,120414,120428,120432,120435,120438,120441,120484,120487,120492,120593,120596,120601,120605,120609,120646,120650,120654,120658,120704,120708,120753,120757,120764,120772,120827,120830,120907,120910,120933,120937,120940,120945,120950,120958,120961,120966,120971,120976,120979,120984,120993,120996,121001,121004,121075,121080,121083,121088,121091,121096,121099,121104,121107,121112,121117,121120,121195,121198,121211,121216,121219,121233,121236,121265,121270,121299,121302,121307,121311,121316,121325,121328,121333,121336,121341,121344,121347,121352,121355,121360,121365,121368,121373,121376,121501,121506,121536,121539,121544,121549,121566,121569,121612,121615,121642,121647,121660,121803,121807,121812,121826,121829,121880,121883,121913,121916,121932,121937,121951,121954,122021,122026,122035,122040,122043,122055,122060,122067,122091,122094,122099,122102,122121,122126,122133,122145,122152],[10,119250,119246],{"id":119251},"_3-安装必备配置",[1099,119253,119255],{"id":119254},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[416,119257,119260],{"className":119258,"code":119259,"language":6187},[6185],"  打开下方网站（注意，该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",[422,119261,119259],{"__ignoreMap":395},[14,119263,119265],{"id":119264},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[416,119267,119270],{"className":119268,"code":119269,"language":6187},[6185],"  输入以下命令\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",[422,119271,119269],{"__ignoreMap":395},[14,119273,119275],{"id":119274},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[416,119277,119281],{"className":119278,"code":119279,"language":119280,"meta":395,"style":395},"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",[422,119282,119283,119291,119302,119314,119328,119332,119342,119347,119351,119355,119360,119364,119376,119380,119385,119389,119400,119404,119420,119424,119435,119439,119444,119448,119456],{"__ignoreMap":395},[425,119284,119285,119287,119289],{"class":427,"line":428},[425,119286,652],{"class":431},[425,119288,118072],{"class":435},[425,119290,27232],{"class":435},[425,119292,119293,119295,119297,119299],{"class":427,"line":698},[425,119294,652],{"class":431},[425,119296,118072],{"class":435},[425,119298,24828],{"class":435},[425,119300,119301],{"class":435}," vim\n",[425,119303,119304,119306,119309,119311],{"class":427,"line":710},[425,119305,652],{"class":431},[425,119307,119308],{"class":435}," rm",[425,119310,26316],{"class":691},[425,119312,119313],{"class":435}," \u002Fetc\u002Fapt\u002Fsources.list\n",[425,119315,119316,119318,119320,119322,119325],{"class":427,"line":721},[425,119317,652],{"class":431},[425,119319,119308],{"class":435},[425,119321,26316],{"class":691},[425,119323,119324],{"class":435}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[425,119326,119327],{"class":691},"**\n",[425,119329,119330],{"class":427,"line":735},[425,119331,3400],{"emptyLinePlaceholder":1084},[425,119333,119334,119336,119339],{"class":427,"line":743},[425,119335,652],{"class":431},[425,119337,119338],{"class":435}," vim",[425,119340,119341],{"class":435}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[425,119343,119344],{"class":427,"line":751},[425,119345,119346],{"class":435},"```\n",[425,119348,119349],{"class":427,"line":759},[425,119350,3400],{"emptyLinePlaceholder":1084},[425,119352,119353],{"class":427,"line":770},[425,119354,3400],{"emptyLinePlaceholder":1084},[425,119356,119357],{"class":427,"line":780},[425,119358,119359],{"class":431},"选择好Ubuntu版本后，复制下方的内容。\n",[425,119361,119362],{"class":427,"line":790},[425,119363,3400],{"emptyLinePlaceholder":1084},[425,119365,119366,119368,119371,119374],{"class":427,"line":805},[425,119367,1376],{"class":1155},[425,119369,119370],{"class":435},"[](",[425,119372,119373],{"class":431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[425,119375,1165],{"class":435},[425,119377,119378],{"class":427,"line":818},[425,119379,3400],{"emptyLinePlaceholder":1084},[425,119381,119382],{"class":427,"line":831},[425,119383,119384],{"class":431},"粘贴进去\n",[425,119386,119387],{"class":427,"line":841},[425,119388,3400],{"emptyLinePlaceholder":1084},[425,119390,119391,119393,119395,119398],{"class":427,"line":852},[425,119392,1376],{"class":1155},[425,119394,119370],{"class":435},[425,119396,119397],{"class":431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[425,119399,1165],{"class":435},[425,119401,119402],{"class":427,"line":862},[425,119403,3400],{"emptyLinePlaceholder":1084},[425,119405,119406,119409,119412,119415,119417],{"class":427,"line":878},[425,119407,119408],{"class":431},"按一下ESC，然后英文冒号，输入",[425,119410,119411],{"class":435}," `",[425,119413,119414],{"class":431},":wq!",[425,119416,2119],{"class":435},[425,119418,119419],{"class":431},"然后回车\n",[425,119421,119422],{"class":427,"line":914},[425,119423,3400],{"emptyLinePlaceholder":1084},[425,119425,119426,119428,119430,119433],{"class":427,"line":943},[425,119427,1376],{"class":1155},[425,119429,119370],{"class":435},[425,119431,119432],{"class":431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[425,119434,1165],{"class":435},[425,119436,119437],{"class":427,"line":956},[425,119438,3400],{"emptyLinePlaceholder":1084},[425,119440,119441],{"class":427,"line":964},[425,119442,119443],{"class":431},"输入以下命令\n",[425,119445,119446],{"class":427,"line":2733},[425,119447,3400],{"emptyLinePlaceholder":1084},[425,119449,119450,119453],{"class":427,"line":2750},[425,119451,119452],{"class":435},"```",[425,119454,119455],{"class":431},"Bash\n",[425,119457,119458,119460,119462],{"class":427,"line":2755},[425,119459,652],{"class":431},[425,119461,118072],{"class":435},[425,119463,27232],{"class":435},[19,119465,119466],{},"这里被替换成对应学校则成功",[19,119468,119469],{},[393,119470],{"alt":395,"src":119471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[1099,119473,119475],{"id":119474},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[14,119477,119479],{"id":119478},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,119481,119482],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,119484,119485],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,119487,119488],{},[22,119489,119490],{"href":119490,"rel":119491},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[26],[19,119493,119494],{},[393,119495],{"alt":395,"src":119496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,119498,119499],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,119501,119502],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,119504,119505],{},[393,119506],{"alt":395,"src":119507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[416,119509,119511],{"className":118051,"code":119510,"language":118053,"meta":395,"style":395},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[422,119512,119513,119518,119525,119530],{"__ignoreMap":395},[425,119514,119515],{"class":427,"line":428},[425,119516,119517],{"class":1216},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[425,119519,119520,119522],{"class":427,"line":698},[425,119521,102031],{"class":691},[425,119523,119524],{"class":435}," ~\u002FDownloads\n",[425,119526,119527],{"class":427,"line":710},[425,119528,119529],{"class":1216},"#下方chrome安装包名不一定是这个，根据名字来看\n",[425,119531,119532,119534,119536,119538],{"class":427,"line":721},[425,119533,652],{"class":431},[425,119535,118072],{"class":435},[425,119537,24828],{"class":435},[425,119539,119540],{"class":435}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,119542,119543],{},[393,119544],{"alt":395,"src":119545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[14,119547,119549],{"id":119548},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[416,119551,119553],{"className":118051,"code":119552,"language":118053,"meta":395,"style":395},"# 老版\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",[422,119554,119555,119560,119568,119579,119584,119588,119593,119603,119611,119622],{"__ignoreMap":395},[425,119556,119557],{"class":427,"line":428},[425,119558,119559],{"class":1216},"# 老版\n",[425,119561,119562,119564,119566],{"class":427,"line":698},[425,119563,652],{"class":431},[425,119565,118072],{"class":435},[425,119567,27232],{"class":435},[425,119569,119570,119572,119574,119576],{"class":427,"line":710},[425,119571,652],{"class":431},[425,119573,118072],{"class":435},[425,119575,24828],{"class":435},[425,119577,119578],{"class":435}," neofetch\n",[425,119580,119581],{"class":427,"line":721},[425,119582,119583],{"class":431},"neofetch\n",[425,119585,119586],{"class":427,"line":735},[425,119587,3400],{"emptyLinePlaceholder":1084},[425,119589,119590],{"class":427,"line":743},[425,119591,119592],{"class":1216},"# 新版\n",[425,119594,119595,119597,119600],{"class":427,"line":751},[425,119596,652],{"class":431},[425,119598,119599],{"class":435}," add-apt-repository",[425,119601,119602],{"class":435}," ppa:zhangsongcui3371\u002Ffastfetch\n",[425,119604,119605,119607,119609],{"class":427,"line":759},[425,119606,652],{"class":431},[425,119608,118072],{"class":435},[425,119610,27232],{"class":435},[425,119612,119613,119615,119617,119619],{"class":427,"line":770},[425,119614,652],{"class":431},[425,119616,118072],{"class":435},[425,119618,24828],{"class":435},[425,119620,119621],{"class":435}," fastfetch\n",[425,119623,119624],{"class":427,"line":780},[425,119625,119626],{"class":431},"fastfetch\n",[19,119628,119629],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,119631,119632],{},[393,119633],{"alt":395,"src":119634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[14,119636,119638],{"id":119637},"_323-移除snap应用","3.2.3 移除snap应用",[19,119640,119641],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[416,119643,119645],{"className":118051,"code":119644,"language":118053,"meta":395,"style":395},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[422,119646,119647,119659,119670],{"__ignoreMap":395},[425,119648,119649,119651,119653,119656],{"class":427,"line":428},[425,119650,652],{"class":431},[425,119652,27502],{"class":435},[425,119654,119655],{"class":435}," disable",[425,119657,119658],{"class":435}," snapd.service\n",[425,119660,119661,119663,119665,119667],{"class":427,"line":698},[425,119662,652],{"class":431},[425,119664,27502],{"class":435},[425,119666,119655],{"class":435},[425,119668,119669],{"class":435}," snapd.socket\n",[425,119671,119672,119674,119676,119678],{"class":427,"line":710},[425,119673,652],{"class":431},[425,119675,27502],{"class":435},[425,119677,119655],{"class":435},[425,119679,119680],{"class":435}," snapd.seeded.service\n",[19,119682,119683],{},"然后查看snap应用列表",[19,119685,119686,119687,119692],{},"根据你安装的选择不同（最小安装或普通安装），有",[22,119688,119691],{"href":119689,"rel":119690},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[26],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[416,119694,119696],{"className":118051,"code":119695,"language":118053,"meta":395,"style":395},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[422,119697,119698,119703],{"__ignoreMap":395},[425,119699,119700],{"class":427,"line":428},[425,119701,119702],{"class":1216},"# 查询当前系统上snap安装了哪些app\n",[425,119704,119705,119708],{"class":427,"line":698},[425,119706,119707],{"class":431},"snap",[425,119709,119710],{"class":435}," list\n",[19,119712,119713],{},[393,119714],{"alt":395,"src":119715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,119717,119718,119719,119722],{},"卸载掉图中所有应用，按照 ",[400,119720,119721],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[416,119724,119726],{"className":118051,"code":119725,"language":118053,"meta":395,"style":395},"#移除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",[422,119727,119728,119733,119745,119750,119761,119766,119777,119782,119793,119798,119802,119807,119818,119829],{"__ignoreMap":395},[425,119729,119730],{"class":427,"line":428},[425,119731,119732],{"class":1216},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[425,119734,119735,119737,119740,119742],{"class":427,"line":698},[425,119736,652],{"class":431},[425,119738,119739],{"class":435}," snap",[425,119741,27070],{"class":435},[425,119743,119744],{"class":435}," snap-store\n",[425,119746,119747],{"class":427,"line":710},[425,119748,119749],{"class":1216},"#移除firefox浏览器\n",[425,119751,119752,119754,119756,119758],{"class":427,"line":721},[425,119753,652],{"class":431},[425,119755,119739],{"class":435},[425,119757,27070],{"class":435},[425,119759,119760],{"class":435}," firefox\n",[425,119762,119763],{"class":427,"line":735},[425,119764,119765],{"class":1216},"#移除gnome-42-2204\n",[425,119767,119768,119770,119772,119774],{"class":427,"line":743},[425,119769,652],{"class":431},[425,119771,119739],{"class":435},[425,119773,27070],{"class":435},[425,119775,119776],{"class":435}," gnome-42-2204\n",[425,119778,119779],{"class":427,"line":751},[425,119780,119781],{"class":1216},"#移除gtk-common-themes\n",[425,119783,119784,119786,119788,119790],{"class":427,"line":759},[425,119785,652],{"class":431},[425,119787,119739],{"class":435},[425,119789,27070],{"class":435},[425,119791,119792],{"class":435}," gtk-common-themes\n",[425,119794,119795],{"class":427,"line":770},[425,119796,119797],{"class":1216},"#移除其它...\n",[425,119799,119800],{"class":427,"line":780},[425,119801,3674],{"class":701},[425,119803,119804],{"class":427,"line":790},[425,119805,119806],{"class":1216},"#移除core22,bare以及snapd\n",[425,119808,119809,119811,119813,119815],{"class":427,"line":805},[425,119810,652],{"class":431},[425,119812,119739],{"class":435},[425,119814,27070],{"class":435},[425,119816,119817],{"class":435}," core22\n",[425,119819,119820,119822,119824,119826],{"class":427,"line":818},[425,119821,652],{"class":431},[425,119823,119739],{"class":435},[425,119825,27070],{"class":435},[425,119827,119828],{"class":435}," bare\n",[425,119830,119831,119833,119835,119837],{"class":427,"line":831},[425,119832,652],{"class":431},[425,119834,119739],{"class":435},[425,119836,27070],{"class":435},[425,119838,119839],{"class":435}," snapd\n",[19,119841,119842],{},[393,119843],{"alt":395,"src":119844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,119846,119847],{},"输入以下命令查看是否还有snap包",[416,119849,119851],{"className":118051,"code":119850,"language":118053,"meta":395,"style":395},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[422,119852,119853,119859,119863,119867,119871],{"__ignoreMap":395},[425,119854,119855,119857],{"class":427,"line":428},[425,119856,119707],{"class":431},[425,119858,119710],{"class":435},[425,119860,119861],{"class":427,"line":698},[425,119862,119559],{"class":1216},[425,119864,119865],{"class":427,"line":710},[425,119866,119583],{"class":431},[425,119868,119869],{"class":427,"line":721},[425,119870,119592],{"class":1216},[425,119872,119873],{"class":427,"line":735},[425,119874,119626],{"class":431},[19,119876,119877],{},[393,119878],{"alt":395,"src":119879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[14,119881,119883],{"id":119882},"_324-移除snap","3.2.4 移除snap",[19,119885,119886,119887,119892],{},"在删除掉",[22,119888,119891],{"href":119889,"rel":119890},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[26],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[416,119894,119896],{"className":118051,"code":119895,"language":118053,"meta":395,"style":395}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[422,119897,119898,119903,119916,119921,119932],{"__ignoreMap":395},[425,119899,119900],{"class":427,"line":428},[425,119901,119902],{"class":1216}," #使用apt移除掉snap\n",[425,119904,119905,119907,119909,119911,119914],{"class":427,"line":698},[425,119906,652],{"class":431},[425,119908,118072],{"class":435},[425,119910,118380],{"class":435},[425,119912,119913],{"class":691}," --purge",[425,119915,119839],{"class":435},[425,119917,119918],{"class":427,"line":710},[425,119919,119920],{"class":1216},"#移除snapd的一些目录\n",[425,119922,119923,119925,119927,119929],{"class":427,"line":721},[425,119924,652],{"class":431},[425,119926,119308],{"class":435},[425,119928,26316],{"class":691},[425,119930,119931],{"class":435}," \u002Fvar\u002Fcache\u002Fsnapd\n",[425,119933,119934,119936,119938,119940],{"class":427,"line":735},[425,119935,652],{"class":431},[425,119937,119308],{"class":435},[425,119939,26316],{"class":691},[425,119941,119942],{"class":435}," ~\u002Fsnap\n",[19,119944,119945,119946,119949],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[422,119947,119948],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[14,119951,119953],{"id":119952},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,119955,119956],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[416,119958,119960],{"className":118051,"code":119959,"language":118053,"meta":395,"style":395},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[422,119961,119962],{"__ignoreMap":395},[425,119963,119964,119966,119968],{"class":427,"line":428},[425,119965,652],{"class":431},[425,119967,119338],{"class":435},[425,119969,119970],{"class":435}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,119972,119973,119974,119977],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[422,119975,119976],{},":wq"," 回车",[416,119979,119981],{"className":118051,"code":119980,"language":118053,"meta":395,"style":395},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[422,119982,119983,119990,120004],{"__ignoreMap":395},[425,119984,119985,119988],{"class":427,"line":428},[425,119986,119987],{"class":431},"Package:",[425,119989,119839],{"class":435},[425,119991,119992,119995,119998,120001],{"class":427,"line":698},[425,119993,119994],{"class":431},"Pin:",[425,119996,119997],{"class":435}," release",[425,119999,120000],{"class":435}," a=",[425,120002,120003],{"class":691},"*\n",[425,120005,120006,120009],{"class":427,"line":710},[425,120007,120008],{"class":431},"Pin-Priority:",[425,120010,120011],{"class":691}," -10\n",[19,120013,120014],{},[393,120015],{"alt":395,"src":120016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[14,120018,120020],{"id":120019},"_326-测试是否成功","3.2.6 测试是否成功",[416,120022,120024],{"className":118051,"code":120023,"language":118053,"meta":395,"style":395},"sudo apt update\nsudo apt install firefox\n",[422,120025,120026,120034],{"__ignoreMap":395},[425,120027,120028,120030,120032],{"class":427,"line":428},[425,120029,652],{"class":431},[425,120031,118072],{"class":435},[425,120033,27232],{"class":435},[425,120035,120036,120038,120040,120042],{"class":427,"line":698},[425,120037,652],{"class":431},[425,120039,118072],{"class":435},[425,120041,24828],{"class":435},[425,120043,119760],{"class":435},[19,120045,120046],{},"这里提示snapd无法被安装，就证明成功了",[19,120048,120049],{},[393,120050],{"alt":395,"src":120051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[14,120053,120055],{"id":120054},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,120057,120058],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,120060,120061],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,120063,120064],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[416,120066,120068],{"className":118051,"code":120067,"language":118053,"meta":395,"style":395},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[422,120069,120070,120075,120084,120089,120097],{"__ignoreMap":395},[425,120071,120072],{"class":427,"line":428},[425,120073,120074],{"class":1216},"# 添加Mozilla提供的源\n",[425,120076,120077,120079,120081],{"class":427,"line":698},[425,120078,652],{"class":431},[425,120080,119599],{"class":435},[425,120082,120083],{"class":435}," ppa:mozillateam\u002Fppa\n",[425,120085,120086],{"class":427,"line":710},[425,120087,120088],{"class":1216},"# 安装Firefox\n",[425,120090,120091,120093,120095],{"class":427,"line":721},[425,120092,652],{"class":431},[425,120094,118072],{"class":435},[425,120096,27232],{"class":435},[425,120098,120099,120101,120103,120105],{"class":427,"line":735},[425,120100,652],{"class":431},[425,120102,118072],{"class":435},[425,120104,24828],{"class":435},[425,120106,119760],{"class":435},[14,120108,120110],{"id":120109},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,120112,120113],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,120115,120116],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[416,120118,120120],{"className":118051,"code":120119,"language":118053,"meta":395,"style":395},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[422,120121,120122,120127,120137,120145,120149],{"__ignoreMap":395},[425,120123,120124],{"class":427,"line":428},[425,120125,120126],{"class":1216},"#删掉禁止安装snap的配置文件\n",[425,120128,120129,120131,120133,120135],{"class":427,"line":698},[425,120130,652],{"class":431},[425,120132,119308],{"class":435},[425,120134,26316],{"class":691},[425,120136,119970],{"class":435},[425,120138,120139,120141,120143],{"class":427,"line":710},[425,120140,652],{"class":431},[425,120142,118072],{"class":435},[425,120144,27232],{"class":435},[425,120146,120147],{"class":427,"line":721},[425,120148,3400],{"emptyLinePlaceholder":1084},[425,120150,120151,120153,120155],{"class":427,"line":735},[425,120152,652],{"class":431},[425,120154,118072],{"class":435},[425,120156,120157],{"class":435}," dist-update\n",[1099,120159,120161],{"id":120160},"_33-中文输入法","3.3 中文输入法",[14,120163,120165],{"id":120164},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,120167,120168],{},"官网下载搜狗输入法",[19,120170,120171],{},[393,120172],{"alt":395,"src":120173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,120175,120176],{},[393,120177],{"alt":395,"src":120178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,120180,120181],{},"打开终端输入如下",[416,120183,120185],{"className":118051,"code":120184,"language":118053,"meta":395,"style":395},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[422,120186,120187,120194],{"__ignoreMap":395},[425,120188,120189,120191],{"class":427,"line":428},[425,120190,102031],{"class":691},[425,120192,120193],{"class":435}," ~\u002FDownloads\u002F\n",[425,120195,120196,120198,120200,120202],{"class":427,"line":698},[425,120197,652],{"class":431},[425,120199,118072],{"class":435},[425,120201,24828],{"class":435},[425,120203,120204],{"class":435}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,120206,120207],{},"打开Fcitx",[19,120209,120210,120213],{},[393,120211],{"alt":395,"src":120212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[393,120214],{"alt":395,"src":120215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,120217,120218],{},[393,120219],{"alt":395,"src":120220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,120222,120223],{},"添加搜狗输入法",[19,120225,120226],{},[393,120227],{"alt":395,"src":120228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,120230,120231],{},[393,120232],{"alt":395,"src":120233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,120235,120236],{},"将搜狗输入法设置为唯一输入法",[19,120238,120239],{},[393,120240],{"alt":395,"src":120241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[14,120243,120245],{"id":120244},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[972,120247,120248],{},[450,120249,120250],{},"卸载旧输入法",[416,120252,120254],{"className":119278,"code":120253,"language":119280,"meta":395,"style":395},"sudo apt purge fcitx* ibus*\n",[422,120255,120256],{"__ignoreMap":395},[425,120257,120258,120260,120262,120264,120267,120269,120272],{"class":427,"line":428},[425,120259,652],{"class":431},[425,120261,118072],{"class":435},[425,120263,118413],{"class":435},[425,120265,120266],{"class":435}," fcitx",[425,120268,1603],{"class":691},[425,120270,120271],{"class":435}," ibus",[425,120273,120003],{"class":691},[972,120275,120276],{"start":698},[450,120277,120278],{},"安装Fcitx5",[416,120280,120282],{"className":118051,"code":120281,"language":118053,"meta":395,"style":395},"# 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",[422,120283,120284,120289,120303,120307,120312,120321,120329],{"__ignoreMap":395},[425,120285,120286],{"class":427,"line":428},[425,120287,120288],{"class":1216},"# Ubuntu22.04及以上、Debian12及以上\n",[425,120290,120291,120293,120295,120297,120300],{"class":427,"line":698},[425,120292,652],{"class":431},[425,120294,118072],{"class":435},[425,120296,24828],{"class":435},[425,120298,120299],{"class":435}," fcitx5",[425,120301,120302],{"class":435}," fcitx5-chinese-addons\n",[425,120304,120305],{"class":427,"line":710},[425,120306,3400],{"emptyLinePlaceholder":1084},[425,120308,120309],{"class":427,"line":721},[425,120310,120311],{"class":1216},"# Ubuntu20.04\n",[425,120313,120314,120316,120318],{"class":427,"line":735},[425,120315,652],{"class":431},[425,120317,119599],{"class":435},[425,120319,120320],{"class":435}," ppa:zhsj\u002Ffcitx5\n",[425,120322,120323,120325,120327],{"class":427,"line":743},[425,120324,652],{"class":431},[425,120326,118072],{"class":435},[425,120328,27232],{"class":435},[425,120330,120331,120333,120335,120337,120339],{"class":427,"line":751},[425,120332,652],{"class":431},[425,120334,118072],{"class":435},[425,120336,24828],{"class":435},[425,120338,120299],{"class":435},[425,120340,120302],{"class":435},[972,120342,120343,120346],{"start":710},[450,120344,120345],{},"Reboot System",[450,120347,120348],{},"启动Fcitx5",[19,120350,120351],{},[393,120352],{"alt":395,"src":120353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[972,120355,120356],{"start":735},[450,120357,120358],{},"修改一些设置",[19,120360,120361],{},"将Pinyin和Keyboard - English US加入到左边。",[19,120363,120364],{},[393,120365],{"alt":395,"src":120366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,120368,120369],{},"添加快捷键以便于更好切换中英文",[19,120371,120372],{},[393,120373],{"alt":395,"src":120374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[972,120376,120377],{"start":743},[450,120378,120379],{},"重启",[416,120381,120383],{"className":119278,"code":120382,"language":119280,"meta":395,"style":395},"sudo shutdown -r now\n",[422,120384,120385],{"__ignoreMap":395},[425,120386,120387,120389,120392,120395],{"class":427,"line":428},[425,120388,652],{"class":431},[425,120390,120391],{"class":435}," shutdown",[425,120393,120394],{"class":691}," -r",[425,120396,120397],{"class":435}," now\n",[972,120399,120400],{"start":751},[450,120401,120402],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,120404,120405],{},[22,120406,120407],{"href":120407,"rel":120408},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[26],[972,120410,120411],{"start":759},[450,120412,120413],{},"再重启",[416,120415,120416],{"className":119278,"code":120382,"language":119280,"meta":395,"style":395},[422,120417,120418],{"__ignoreMap":395},[425,120419,120420,120422,120424,120426],{"class":427,"line":428},[425,120421,652],{"class":431},[425,120423,120391],{"class":435},[425,120425,120394],{"class":691},[425,120427,120397],{"class":435},[1099,120429,120431],{"id":120430},"_34-pip3源替换","3.4 pip3源替换",[19,120433,120434],{},"非Debian系发行版需要做。",[19,120436,120437],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,120439,120440],{},"使用dnf的系统也可能不用做。",[416,120442,120444],{"className":118051,"code":120443,"language":118053,"meta":395,"style":395},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[422,120445,120446,120451,120458,120463,120468],{"__ignoreMap":395},[425,120447,120448],{"class":427,"line":428},[425,120449,120450],{"class":1216},"# 检查是否已安装 pip\n",[425,120452,120453,120456],{"class":427,"line":698},[425,120454,120455],{"class":431},"pip3",[425,120457,27283],{"class":691},[425,120459,120460],{"class":427,"line":710},[425,120461,120462],{"class":1216},"# 如果未安装，先安装 pip3（见下方）\n",[425,120464,120465],{"class":427,"line":721},[425,120466,120467],{"class":1216},"# 配置 pip 使用清华源\n",[425,120469,120470,120472,120475,120478,120481],{"class":427,"line":735},[425,120471,120455],{"class":431},[425,120473,120474],{"class":435}," config",[425,120476,120477],{"class":435}," set",[425,120479,120480],{"class":435}," global.index-url",[425,120482,120483],{"class":435}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,120485,120486],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,120488,120489],{},[393,120490],{"alt":395,"src":120491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[416,120493,120495],{"className":118051,"code":120494,"language":118053,"meta":395,"style":395},"#安装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",[422,120496,120497,120502,120510,120521,120525,120530,120549,120553,120558,120570,120574,120579],{"__ignoreMap":395},[425,120498,120499],{"class":427,"line":428},[425,120500,120501],{"class":1216},"#安装pip3\n",[425,120503,120504,120506,120508],{"class":427,"line":698},[425,120505,652],{"class":431},[425,120507,118072],{"class":435},[425,120509,27232],{"class":435},[425,120511,120512,120514,120516,120518],{"class":427,"line":710},[425,120513,652],{"class":431},[425,120515,27067],{"class":435},[425,120517,24828],{"class":435},[425,120519,120520],{"class":435}," python3-pip\n",[425,120522,120523],{"class":427,"line":721},[425,120524,3400],{"emptyLinePlaceholder":1084},[425,120526,120527],{"class":427,"line":735},[425,120528,120529],{"class":1216},"#更新pip3\n",[425,120531,120532,120534,120536,120538,120540,120542,120545,120547],{"class":427,"line":743},[425,120533,101634],{"class":431},[425,120535,101637],{"class":691},[425,120537,101660],{"class":435},[425,120539,24828],{"class":435},[425,120541,27419],{"class":691},[425,120543,120544],{"class":435}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[425,120546,101665],{"class":691},[425,120548,101668],{"class":435},[425,120550,120551],{"class":427,"line":751},[425,120552,3400],{"emptyLinePlaceholder":1084},[425,120554,120555],{"class":427,"line":759},[425,120556,120557],{"class":1216},"#设置pip源为清华源\n",[425,120559,120560,120562,120564,120566,120568],{"class":427,"line":770},[425,120561,120455],{"class":431},[425,120563,120474],{"class":435},[425,120565,120477],{"class":435},[425,120567,120480],{"class":435},[425,120569,120483],{"class":435},[425,120571,120572],{"class":427,"line":780},[425,120573,3400],{"emptyLinePlaceholder":1084},[425,120575,120576],{"class":427,"line":790},[425,120577,120578],{"class":1216},"#测试\n",[425,120580,120581,120583,120585,120587,120589,120591],{"class":427,"line":805},[425,120582,101634],{"class":431},[425,120584,101637],{"class":691},[425,120586,101660],{"class":435},[425,120588,24828],{"class":435},[425,120590,101665],{"class":691},[425,120592,101668],{"class":435},[19,120594,120595],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,120597,120598],{},[393,120599],{"alt":395,"src":120600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[1099,120602,120604],{"id":120603},"_35-显卡驱动安装","3.5 显卡驱动安装",[14,120606,120608],{"id":120607},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[416,120610,120612],{"className":119278,"code":120611,"language":119280,"meta":395,"style":395},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[422,120613,120614,120619,120634,120639],{"__ignoreMap":395},[425,120615,120616],{"class":427,"line":428},[425,120617,120618],{"class":1216},"# 如果是使用apt安装的驱动\n",[425,120620,120621,120623,120625,120627,120629,120632],{"class":427,"line":698},[425,120622,652],{"class":431},[425,120624,27067],{"class":435},[425,120626,27070],{"class":435},[425,120628,119913],{"class":691},[425,120630,120631],{"class":435}," nvidia",[425,120633,120003],{"class":691},[425,120635,120636],{"class":427,"line":710},[425,120637,120638],{"class":1216},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[425,120640,120641,120643],{"class":427,"line":721},[425,120642,652],{"class":431},[425,120644,120645],{"class":435}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[14,120647,120649],{"id":120648},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22995,120651,120653],{"id":120652},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23907,120655,120657],{"id":120656},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[416,120659,120661],{"className":119278,"code":120660,"language":119280,"meta":395,"style":395},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[422,120662,120663,120668,120679,120684,120694,120699],{"__ignoreMap":395},[425,120664,120665],{"class":427,"line":428},[425,120666,120667],{"class":1216},"# 安装英伟达驱动\n",[425,120669,120670,120672,120674,120676],{"class":427,"line":698},[425,120671,652],{"class":431},[425,120673,118072],{"class":435},[425,120675,24828],{"class":435},[425,120677,120678],{"class":435}," nvidia-driver-版本号\n",[425,120680,120681],{"class":427,"line":710},[425,120682,120683],{"class":1216},"# 重启 \n",[425,120685,120686,120688,120690,120692],{"class":427,"line":721},[425,120687,652],{"class":431},[425,120689,120391],{"class":435},[425,120691,120394],{"class":691},[425,120693,120397],{"class":435},[425,120695,120696],{"class":427,"line":735},[425,120697,120698],{"class":1216},"# 检查驱动是否安装成功\n",[425,120700,120701],{"class":427,"line":743},[425,120702,120703],{"class":431},"nvidia-smi\n",[23907,120705,120707],{"id":120706},"_35212-debian","3.5.2.1.2 Debian",[416,120709,120711],{"className":119278,"code":120710,"language":119280,"meta":395,"style":395},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[422,120712,120713,120717,120731,120735,120745,120749],{"__ignoreMap":395},[425,120714,120715],{"class":427,"line":428},[425,120716,120667],{"class":1216},[425,120718,120719,120721,120723,120725,120728],{"class":427,"line":698},[425,120720,652],{"class":431},[425,120722,118072],{"class":435},[425,120724,24828],{"class":435},[425,120726,120727],{"class":435}," nvidia-driver",[425,120729,120730],{"class":435}," nvidia-settings\n",[425,120732,120733],{"class":427,"line":710},[425,120734,120683],{"class":1216},[425,120736,120737,120739,120741,120743],{"class":427,"line":721},[425,120738,652],{"class":431},[425,120740,120391],{"class":435},[425,120742,120394],{"class":691},[425,120744,120397],{"class":435},[425,120746,120747],{"class":427,"line":735},[425,120748,120698],{"class":1216},[425,120750,120751],{"class":427,"line":743},[425,120752,120703],{"class":431},[22995,120754,120756],{"id":120755},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,120758,120759,120760,120763],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[400,120761,120762],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,120765,120766,120767],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[993,120768,120769],{},[400,120770,120771],{},"（也可以不禁用桌面环境，直接进行下一步。）",[416,120773,120775],{"className":119278,"code":120774,"language":119280,"meta":395,"style":395},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[422,120776,120777,120782,120792,120797,120810,120815],{"__ignoreMap":395},[425,120778,120779],{"class":427,"line":428},[425,120780,120781],{"class":1216},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[425,120783,120784,120786,120789],{"class":427,"line":698},[425,120785,652],{"class":431},[425,120787,120788],{"class":435}," telinit",[425,120790,120791],{"class":691}," 3\n",[425,120793,120794],{"class":427,"line":710},[425,120795,120796],{"class":1216},"# ubuntu 使用下方命令\n",[425,120798,120799,120801,120804,120807],{"class":427,"line":721},[425,120800,652],{"class":431},[425,120802,120803],{"class":435}," service",[425,120805,120806],{"class":435}," lightdm",[425,120808,120809],{"class":435}," stop\n",[425,120811,120812],{"class":427,"line":735},[425,120813,120814],{"class":1216},"# Fedora 使用下方命令\n",[425,120816,120817,120819,120821,120824],{"class":427,"line":743},[425,120818,652],{"class":431},[425,120820,27502],{"class":435},[425,120822,120823],{"class":435}," isolate",[425,120825,120826],{"class":435}," multi-user.target\n",[19,120828,120829],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[416,120831,120833],{"className":119278,"code":120832,"language":119280,"meta":395,"style":395},"# 编译环境+准备工作\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",[422,120834,120835,120840,120851,120856,120863,120868,120880,120885,120892,120897],{"__ignoreMap":395},[425,120836,120837],{"class":427,"line":428},[425,120838,120839],{"class":1216},"# 编译环境+准备工作\n",[425,120841,120842,120844,120846,120848],{"class":427,"line":698},[425,120843,652],{"class":431},[425,120845,118072],{"class":435},[425,120847,24828],{"class":435},[425,120849,120850],{"class":435}," build-essential\n",[425,120852,120853],{"class":427,"line":710},[425,120854,120855],{"class":1216},"# 进入到.run目录中\n",[425,120857,120858,120860],{"class":427,"line":721},[425,120859,102031],{"class":691},[425,120861,120862],{"class":435}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[425,120864,120865],{"class":427,"line":735},[425,120866,120867],{"class":1216},"# 给驱动文件增加可执行权限：\n",[425,120869,120870,120872,120874,120877],{"class":427,"line":743},[425,120871,652],{"class":431},[425,120873,25572],{"class":435},[425,120875,120876],{"class":435}," a+x",[425,120878,120879],{"class":435}," NVIDIA-Linux-x86_64-550.107.02.run\n",[425,120881,120882],{"class":427,"line":751},[425,120883,120884],{"class":1216},"# 然后执行安装：\n",[425,120886,120887,120889],{"class":427,"line":759},[425,120888,652],{"class":431},[425,120890,120891],{"class":435}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[425,120893,120894],{"class":427,"line":770},[425,120895,120896],{"class":1216},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[425,120898,120899,120901,120904],{"class":427,"line":780},[425,120900,652],{"class":431},[425,120902,120903],{"class":435}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[425,120905,120906],{"class":691},"  --no-opengl-files\n",[19,120908,120909],{},"安装完毕重启即可",[416,120911,120913],{"className":119278,"code":120912,"language":119280,"meta":395,"style":395},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[422,120914,120915,120919,120925,120929],{"__ignoreMap":395},[425,120916,120917],{"class":427,"line":428},[425,120918,120683],{"class":1216},[425,120920,120921,120923],{"class":427,"line":698},[425,120922,652],{"class":431},[425,120924,27636],{"class":435},[425,120926,120927],{"class":427,"line":710},[425,120928,120698],{"class":1216},[425,120930,120931],{"class":427,"line":721},[425,120932,120703],{"class":431},[14,120934,120936],{"id":120935},"_353-安装cuda","3.5.3 安装CUDA",[19,120938,120939],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,120941,120942],{},[393,120943],{"alt":395,"src":120944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[972,120946,120947],{},[450,120948,120949],{},"先查看显卡驱动所支持的最高CUDA版本",[416,120951,120952],{"className":119278,"code":120703,"language":119280,"meta":395,"style":395},[422,120953,120954],{"__ignoreMap":395},[425,120955,120956],{"class":427,"line":428},[425,120957,120703],{"class":431},[19,120959,120960],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,120962,120963],{},[393,120964],{"alt":395,"src":120965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[972,120967,120968],{"start":698},[450,120969,120970],{},"下载CUDA并安装CUDA",[19,120972,119057,120973],{},[22,120974,119060],{"href":119060,"rel":120975},[26],[19,120977,120978],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,120980,120981],{},[393,120982],{"alt":395,"src":120983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,120985,120986,120987,120992],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[22,120988,120991],{"href":120989,"rel":120990},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[26],"Vinci机器人队单片机教程","）",[19,120994,120995],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,120997,120998],{},[393,120999],{"alt":395,"src":121000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,121002,121003],{},"将最下方框框里的命令敲入终端",[416,121005,121007],{"className":119278,"code":121006,"language":119280,"meta":395,"style":395},"# 在当前文件夹下创建一个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",[422,121008,121009,121014,121023,121028,121035,121040,121048,121053,121064,121069],{"__ignoreMap":395},[425,121010,121011],{"class":427,"line":428},[425,121012,121013],{"class":1216},"# 在当前文件夹下创建一个ttt的子文件夹\n",[425,121015,121016,121018,121020],{"class":427,"line":698},[425,121017,102021],{"class":431},[425,121019,29971],{"class":691},[425,121021,121022],{"class":435}," .\u002Fttt\n",[425,121024,121025],{"class":427,"line":710},[425,121026,121027],{"class":1216},"# 进入ttt文件夹\n",[425,121029,121030,121032],{"class":427,"line":721},[425,121031,102031],{"class":691},[425,121033,121034],{"class":435}," ttt\n",[425,121036,121037],{"class":427,"line":735},[425,121038,121039],{"class":1216},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[425,121041,121042,121045],{"class":427,"line":743},[425,121043,121044],{"class":431},"wget",[425,121046,121047],{"class":435}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[425,121049,121050],{"class":427,"line":751},[425,121051,121052],{"class":1216},"# 给予权限\n",[425,121054,121055,121057,121059,121061],{"class":427,"line":759},[425,121056,652],{"class":431},[425,121058,25572],{"class":435},[425,121060,120876],{"class":435},[425,121062,121063],{"class":435}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[425,121065,121066],{"class":427,"line":770},[425,121067,121068],{"class":1216},"# 运行脚本\n",[425,121070,121071,121073],{"class":427,"line":780},[425,121072,652],{"class":431},[425,121074,121063],{"class":435},[19,121076,121077],{},[393,121078],{"alt":395,"src":121079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,121081,121082],{},"正在安装中：",[19,121084,121085],{},[393,121086],{"alt":395,"src":121087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,121089,121090],{},"输入accept接受即可",[19,121092,121093],{},[393,121094],{"alt":395,"src":121095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,121097,121098],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,121100,121101],{},[393,121102],{"alt":395,"src":121103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,121105,121106],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,121108,121109],{},[393,121110],{"alt":395,"src":121111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[972,121113,121114],{"start":710},[450,121115,121116],{},"配置环境",[19,121118,121119],{},"根据上方确认一下路径，比如我上面红色框起来的为",[416,121121,121123],{"className":119278,"code":121122,"language":119280,"meta":395,"style":395},"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",[422,121124,121125,121141,121156],{"__ignoreMap":395},[425,121126,121127,121130,121133,121136,121139],{"class":427,"line":428},[425,121128,121129],{"class":431},"Please",[425,121131,121132],{"class":435}," make",[425,121134,121135],{"class":435}," sure",[425,121137,121138],{"class":435}," that",[425,121140,3674],{"class":701},[425,121142,121143,121145,121148,121151,121154],{"class":427,"line":698},[425,121144,53026],{"class":431},[425,121146,121147],{"class":435},"   PATH",[425,121149,121150],{"class":435}," includes",[425,121152,121153],{"class":435}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[425,121155,3674],{"class":701},[425,121157,121158,121160,121163,121165,121168,121171,121173,121176,121179,121182,121185,121187,121190,121192],{"class":427,"line":710},[425,121159,53026],{"class":431},[425,121161,121162],{"class":435},"   LD_LIBRARY_PATH",[425,121164,121150],{"class":435},[425,121166,121167],{"class":435}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[425,121169,121170],{"class":435}," or,",[425,121172,6209],{"class":435},[425,121174,121175],{"class":435}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[425,121177,121178],{"class":435}," to",[425,121180,121181],{"class":435}," \u002Fetc\u002Fld.so.conf",[425,121183,121184],{"class":435}," and",[425,121186,688],{"class":435},[425,121188,121189],{"class":435}," ldconfig",[425,121191,65359],{"class":435},[425,121193,121194],{"class":435}," root\n",[19,121196,121197],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[416,121199,121201],{"className":119278,"code":121200,"language":119280,"meta":395,"style":395},"which nvcc\n",[422,121202,121203],{"__ignoreMap":395},[425,121204,121205,121208],{"class":427,"line":428},[425,121206,121207],{"class":691},"which",[425,121209,121210],{"class":435}," nvcc\n",[19,121212,121213],{},[393,121214],{"alt":395,"src":121215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,121217,121218],{},"所以我进行以下操作：",[416,121220,121222],{"className":119278,"code":121221,"language":119280,"meta":395,"style":395},"sudo vim ~\u002F.bashrc\n",[422,121223,121224],{"__ignoreMap":395},[425,121225,121226,121228,121230],{"class":427,"line":428},[425,121227,652],{"class":431},[425,121229,119338],{"class":435},[425,121231,121232],{"class":435}," ~\u002F.bashrc\n",[19,121234,121235],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[416,121237,121239],{"className":119278,"code":121238,"language":119280,"meta":395,"style":395},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[422,121240,121241,121253],{"__ignoreMap":395},[425,121242,121243,121245,121248,121250],{"class":427,"line":428},[425,121244,26034],{"class":1155},[425,121246,121247],{"class":701}," PATH",[425,121249,1204],{"class":1155},[425,121251,121252],{"class":701},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[425,121254,121255,121257,121260,121262],{"class":427,"line":698},[425,121256,26034],{"class":1155},[425,121258,121259],{"class":701}," LD_LIBRARY_PATH",[425,121261,1204],{"class":1155},[425,121263,121264],{"class":701},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,121266,121267],{},[393,121268],{"alt":395,"src":121269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[416,121271,121273],{"className":119278,"code":121272,"language":119280,"meta":395,"style":395},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[422,121274,121275,121280,121286,121291],{"__ignoreMap":395},[425,121276,121277],{"class":427,"line":428},[425,121278,121279],{"class":1216},"# 刷新当前终端的环境变量\n",[425,121281,121282,121284],{"class":427,"line":698},[425,121283,101648],{"class":691},[425,121285,121232],{"class":435},[425,121287,121288],{"class":427,"line":710},[425,121289,121290],{"class":1216},"# 验证CUDA是否安装成功\n",[425,121292,121293,121296],{"class":427,"line":721},[425,121294,121295],{"class":431},"nvcc",[425,121297,121298],{"class":691}," -V\n",[19,121300,121301],{},"出现下图这种则安装成功。",[19,121303,121304],{},[393,121305],{"alt":395,"src":121306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[14,121308,121310],{"id":121309},"_354-安装cudnn","3.5.4 安装cuDNN",[972,121312,121313],{},[450,121314,121315],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,121317,121318,121319,121324],{},"前往 NVIDIA cuDNN 下载页面：",[22,121320,121323],{"href":121321,"rel":121322},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[26],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,121326,121327],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,121329,121330],{},[393,121331],{"alt":395,"src":121332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,121334,121335],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,121337,121338],{},[393,121339],{"alt":395,"src":121340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,121342,121343],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,121345,121346],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,121348,121349],{},[400,121350,121351],{},"我这里选择所有Linux X86_64最通用的办法：",[19,121353,121354],{},"下载好的：",[19,121356,121357],{},[393,121358],{"alt":395,"src":121359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[972,121361,121362],{"start":698},[450,121363,121364],{},"安装cuDNN",[19,121366,121367],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,121369,121370],{},[393,121371],{"alt":395,"src":121372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,121374,121375],{},"解压文件，并复制到对应位置完成安装",[416,121377,121379],{"className":119278,"code":121378,"language":119280,"meta":395,"style":395},"# 解压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",[422,121380,121381,121386,121397,121402,121409,121414,121430,121444,121449,121460,121469,121473,121489],{"__ignoreMap":395},[425,121382,121383],{"class":427,"line":428},[425,121384,121385],{"class":1216},"# 解压cuDNN文件\n",[425,121387,121388,121391,121394],{"class":427,"line":698},[425,121389,121390],{"class":431},"tar",[425,121392,121393],{"class":691}," -xvf",[425,121395,121396],{"class":435}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[425,121398,121399],{"class":427,"line":710},[425,121400,121401],{"class":1216},"# cd进文件夹\n",[425,121403,121404,121406],{"class":427,"line":721},[425,121405,102031],{"class":691},[425,121407,121408],{"class":435}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[425,121410,121411],{"class":427,"line":735},[425,121412,121413],{"class":1216},"# 复制cuDNN文件到CUDA目录\n",[425,121415,121416,121418,121420,121423,121425,121428],{"class":427,"line":743},[425,121417,652],{"class":431},[425,121419,436],{"class":435},[425,121421,121422],{"class":435}," include\u002Fcudnn",[425,121424,1603],{"class":691},[425,121426,121427],{"class":435},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[425,121429,3674],{"class":701},[425,121431,121432,121434,121436,121439,121441],{"class":427,"line":751},[425,121433,652],{"class":431},[425,121435,436],{"class":435},[425,121437,121438],{"class":435}," lib\u002Flibcudnn",[425,121440,1603],{"class":691},[425,121442,121443],{"class":435},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[425,121445,121446],{"class":427,"line":759},[425,121447,121448],{"class":1216},"# 对比一下有没有缺文件\n",[425,121450,121451,121453,121456,121458],{"class":427,"line":770},[425,121452,27750],{"class":431},[425,121454,121455],{"class":435}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[425,121457,1603],{"class":691},[425,121459,3674],{"class":701},[425,121461,121462,121464,121467],{"class":427,"line":780},[425,121463,27750],{"class":431},[425,121465,121466],{"class":435}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[425,121468,120003],{"class":691},[425,121470,121471],{"class":427,"line":790},[425,121472,121052],{"class":1216},[425,121474,121475,121477,121479,121482,121484,121486],{"class":427,"line":805},[425,121476,652],{"class":431},[425,121478,25572],{"class":435},[425,121480,121481],{"class":435}," a+r",[425,121483,121455],{"class":435},[425,121485,1603],{"class":691},[425,121487,121488],{"class":701},"   \n",[425,121490,121491,121493,121495,121497,121499],{"class":427,"line":818},[425,121492,652],{"class":431},[425,121494,25572],{"class":435},[425,121496,121481],{"class":435},[425,121498,121466],{"class":435},[425,121500,120003],{"class":691},[972,121502,121503],{"start":710},[450,121504,121505],{},"检查是否安装成功",[416,121507,121509],{"className":119278,"code":121508,"language":119280,"meta":395,"style":395},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[422,121510,121511,121516],{"__ignoreMap":395},[425,121512,121513],{"class":427,"line":428},[425,121514,121515],{"class":1216},"# 检查cuDNN版本命令\n",[425,121517,121518,121521,121524,121526,121528,121531,121534],{"class":427,"line":698},[425,121519,121520],{"class":431},"cat",[425,121522,121523],{"class":435}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[425,121525,26100],{"class":1155},[425,121527,30991],{"class":431},[425,121529,121530],{"class":435}," CUDNN_MAJOR",[425,121532,121533],{"class":691}," -A",[425,121535,48478],{"class":691},[19,121537,121538],{},"出现下图这样的就是安装成功了",[19,121540,121541],{},[393,121542],{"alt":395,"src":121543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[972,121545,121546],{"start":721},[450,121547,121548],{},"软链接(一般不需要)",[416,121550,121552],{"className":119278,"code":121551,"language":119280,"meta":395,"style":395},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[422,121553,121554,121559],{"__ignoreMap":395},[425,121555,121556],{"class":427,"line":428},[425,121557,121558],{"class":1216},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[425,121560,121561,121563],{"class":427,"line":698},[425,121562,652],{"class":431},[425,121564,121565],{"class":435}," ldconfig\n",[19,121567,121568],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[416,121570,121575],{"className":121571,"code":121572,"language":121573,"meta":121574,"style":395},"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",[422,121576,121577,121582,121587,121592,121597,121602,121607],{"__ignoreMap":395},[425,121578,121579],{"class":427,"line":428},[425,121580,121581],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[425,121583,121584],{"class":427,"line":698},[425,121585,121586],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[425,121588,121589],{"class":427,"line":710},[425,121590,121591],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[425,121593,121594],{"class":427,"line":721},[425,121595,121596],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[425,121598,121599],{"class":427,"line":735},[425,121600,121601],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[425,121603,121604],{"class":427,"line":743},[425,121605,121606],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[425,121608,121609],{"class":427,"line":751},[425,121610,121611],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,121613,121614],{},"运行下方的命令",[416,121616,121618],{"className":119278,"code":121617,"language":119280,"meta":395,"style":395},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[422,121619,121620,121625,121632,121637],{"__ignoreMap":395},[425,121621,121622],{"class":427,"line":428},[425,121623,121624],{"class":1216},"# cd进入CUDA路径\n",[425,121626,121627,121629],{"class":427,"line":698},[425,121628,102031],{"class":691},[425,121630,121631],{"class":435}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[425,121633,121634],{"class":427,"line":710},[425,121635,121636],{"class":1216}," # 查看本路径下的需要软链接的文件名\n",[425,121638,121639],{"class":427,"line":721},[425,121640,121641],{"class":431}," ls\n",[19,121643,121644],{},[393,121645],{"alt":395,"src":121646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,121648,121649,121650,19407,121653,19407,121656,121659],{},"如上图，我需要将",[422,121651,121652],{},"libcudnn_xxx_xxxxx.so.8.9.7",[422,121654,121655],{},"libcudnn_xxx_xxxxx.so.8",[422,121657,121658],{},"libcudnn_xxx_xxxxx.so","软链接",[416,121661,121663],{"className":119278,"code":121662,"language":119280,"meta":395,"style":395},"# 创建符号链接。对于每个 .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",[422,121664,121665,121670,121686,121700,121714,121728,121742,121756,121770,121775,121781,121786],{"__ignoreMap":395},[425,121666,121667],{"class":427,"line":428},[425,121668,121669],{"class":1216},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[425,121671,121672,121674,121677,121680,121683],{"class":427,"line":698},[425,121673,652],{"class":431},[425,121675,121676],{"class":435}," ln",[425,121678,121679],{"class":691}," -sf",[425,121681,121682],{"class":435}," libcudnn_cnn_train.so.8.9.7",[425,121684,121685],{"class":435}," libcudnn_cnn_train.so.8\n",[425,121687,121688,121690,121692,121694,121697],{"class":427,"line":710},[425,121689,652],{"class":431},[425,121691,121676],{"class":435},[425,121693,121679],{"class":691},[425,121695,121696],{"class":435}," libcudnn_adv_infer.so.8.9.7",[425,121698,121699],{"class":435}," libcudnn_adv_infer.so.8\n",[425,121701,121702,121704,121706,121708,121711],{"class":427,"line":721},[425,121703,652],{"class":431},[425,121705,121676],{"class":435},[425,121707,121679],{"class":691},[425,121709,121710],{"class":435}," libcudnn_adv_train.so.8.9.7",[425,121712,121713],{"class":435}," libcudnn_adv_train.so.8\n",[425,121715,121716,121718,121720,121722,121725],{"class":427,"line":735},[425,121717,652],{"class":431},[425,121719,121676],{"class":435},[425,121721,121679],{"class":691},[425,121723,121724],{"class":435}," libcudnn_cnn_infer.so.8.9.7",[425,121726,121727],{"class":435}," libcudnn_cnn_infer.so.8\n",[425,121729,121730,121732,121734,121736,121739],{"class":427,"line":743},[425,121731,652],{"class":431},[425,121733,121676],{"class":435},[425,121735,121679],{"class":691},[425,121737,121738],{"class":435}," libcudnn.so.8.9.7",[425,121740,121741],{"class":435}," libcudnn.so.8\n",[425,121743,121744,121746,121748,121750,121753],{"class":427,"line":751},[425,121745,652],{"class":431},[425,121747,121676],{"class":435},[425,121749,121679],{"class":691},[425,121751,121752],{"class":435}," libcudnn_ops_infer.so.8.9.7",[425,121754,121755],{"class":435}," libcudnn_ops_infer.so.8\n",[425,121757,121758,121760,121762,121764,121767],{"class":427,"line":759},[425,121759,652],{"class":431},[425,121761,121676],{"class":435},[425,121763,121679],{"class":691},[425,121765,121766],{"class":435}," libcudnn_ops_train.so.8.9.7",[425,121768,121769],{"class":435}," libcudnn_ops_train.so.8\n",[425,121771,121772],{"class":427,"line":770},[425,121773,121774],{"class":1216},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[425,121776,121777,121779],{"class":427,"line":780},[425,121778,652],{"class":431},[425,121780,121565],{"class":435},[425,121782,121783],{"class":427,"line":790},[425,121784,121785],{"class":1216},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[425,121787,121788,121790,121793,121796,121798,121801],{"class":427,"line":805},[425,121789,27750],{"class":431},[425,121791,121792],{"class":691}," -l",[425,121794,121795],{"class":435}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[425,121797,1603],{"class":691},[425,121799,121800],{"class":435},".so",[425,121802,120003],{"class":691},[14,121804,121806],{"id":121805},"_355-常见问题","3.5.5 常见问题",[972,121808,121809],{},[450,121810,121811],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[416,121813,121815],{"className":119278,"code":121814,"language":119280,"meta":395,"style":395},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[422,121816,121817],{"__ignoreMap":395},[425,121818,121819,121821,121823],{"class":427,"line":428},[425,121820,652],{"class":431},[425,121822,119338],{"class":435},[425,121824,121825],{"class":435}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,121827,121828],{},"blacklist-nouveau.conf文件内容如下：",[416,121830,121832],{"className":119278,"code":121831,"language":119280,"meta":395,"style":395},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[422,121833,121834,121842,121849,121861,121871],{"__ignoreMap":395},[425,121835,121836,121839],{"class":427,"line":428},[425,121837,121838],{"class":431},"blacklist",[425,121840,121841],{"class":435}," nouveau\n",[425,121843,121844,121846],{"class":427,"line":698},[425,121845,121838],{"class":431},[425,121847,121848],{"class":435}," lbm-nouveau\n",[425,121850,121851,121853,121856,121859],{"class":427,"line":710},[425,121852,116685],{"class":431},[425,121854,121855],{"class":435}," nouveau",[425,121857,121858],{"class":435}," modeset=",[425,121860,4085],{"class":691},[425,121862,121863,121866,121868],{"class":427,"line":721},[425,121864,121865],{"class":691},"alias",[425,121867,121855],{"class":435},[425,121869,121870],{"class":435}," off\n",[425,121872,121873,121875,121878],{"class":427,"line":735},[425,121874,121865],{"class":691},[425,121876,121877],{"class":435}," lbm-nouveau",[425,121879,121870],{"class":435},[19,121881,121882],{},"接着运行下方命令",[416,121884,121886],{"className":119278,"code":121885,"language":119280,"meta":395,"style":395},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[422,121887,121888,121898,121903],{"__ignoreMap":395},[425,121889,121890,121892,121895],{"class":427,"line":428},[425,121891,652],{"class":431},[425,121893,121894],{"class":435}," update-initramfs",[425,121896,121897],{"class":691}," -u\n",[425,121899,121900],{"class":427,"line":698},[425,121901,121902],{"class":431},"或者\n",[425,121904,121905,121907,121910],{"class":427,"line":710},[425,121906,652],{"class":431},[425,121908,121909],{"class":435}," dracut",[425,121911,121912],{"class":691}," --force\n",[19,121914,121915],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[416,121917,121919],{"className":119278,"code":121918,"language":119280,"meta":395,"style":395},"lsmod | grep nouveau\n",[422,121920,121921],{"__ignoreMap":395},[425,121922,121923,121926,121928,121930],{"class":427,"line":428},[425,121924,121925],{"class":431},"lsmod",[425,121927,26100],{"class":1155},[425,121929,30991],{"class":431},[425,121931,121841],{"class":435},[972,121933,121934],{"start":698},[450,121935,121936],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[416,121938,121940],{"className":119278,"code":121939,"language":119280,"meta":395,"style":395},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[422,121941,121942],{"__ignoreMap":395},[425,121943,121944,121946,121948],{"class":427,"line":428},[425,121945,652],{"class":431},[425,121947,119338],{"class":435},[425,121949,121950],{"class":435}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,121952,121953],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[416,121955,121957],{"className":119278,"code":121956,"language":119280,"meta":395,"style":395},"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",[422,121958,121959,121967,121975,121983,121990,121998,122008,122016],{"__ignoreMap":395},[425,121960,121961,121964],{"class":427,"line":428},[425,121962,121963],{"class":431},"Section",[425,121965,121966],{"class":435}," \"OutputClass\"\n",[425,121968,121969,121972],{"class":427,"line":698},[425,121970,121971],{"class":431},"   Identifier",[425,121973,121974],{"class":435}," \"nvidia\"\n",[425,121976,121977,121980],{"class":427,"line":710},[425,121978,121979],{"class":431},"   MatchDriver",[425,121981,121982],{"class":435}," \"nvidia-drm\"\n",[425,121984,121985,121988],{"class":427,"line":721},[425,121986,121987],{"class":431},"   Driver",[425,121989,121974],{"class":435},[425,121991,121992,121995],{"class":427,"line":735},[425,121993,121994],{"class":431},"   Option",[425,121996,121997],{"class":435}," \"AllowEmptyInitialConfiguration\"\n",[425,121999,122000,122002,122005],{"class":427,"line":743},[425,122001,121994],{"class":431},[425,122003,122004],{"class":435}," \"PrimaryGPU\"",[425,122006,122007],{"class":435}," \"yes\"\n",[425,122009,122010,122013],{"class":427,"line":751},[425,122011,122012],{"class":431},"   ModulePath",[425,122014,122015],{"class":435}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[425,122017,122018],{"class":427,"line":759},[425,122019,122020],{"class":431},"EndSection\n",[972,122022,122023],{"start":710},[450,122024,122025],{},"安装N卡驱动提示错误",[416,122027,122029],{"className":121571,"code":122028,"language":121573,"meta":121574,"style":395},"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",[422,122030,122031],{"__ignoreMap":395},[425,122032,122033],{"class":427,"line":428},[425,122034,122028],{},[972,122036,122037],{},[450,122038,122039],{},"检查当前运行的内核版本：",[19,122041,122042],{},"运行以下命令以查看你当前正在使用的内核版本：",[416,122044,122046],{"className":118051,"code":122045,"language":118053,"meta":395,"style":395},"uname -r\n",[422,122047,122048],{"__ignoreMap":395},[425,122049,122050,122052],{"class":427,"line":428},[425,122051,70959],{"class":431},[425,122053,122054],{"class":691}," -r\n",[972,122056,122057],{"start":698},[450,122058,122059],{},"安装内核开发文件：",[19,122061,122062,122063,122066],{},"确保你已经安装了与当前内核版本相匹配的 ",[422,122064,122065],{},"kernel-devel"," 包。运行以下命令来安装：",[416,122068,122070],{"className":118051,"code":122069,"language":118053,"meta":395,"style":395},"sudo dnf install kernel-devel-$(uname -r)\n",[422,122071,122072],{"__ignoreMap":395},[425,122073,122074,122076,122078,122080,122083,122085,122087,122089],{"class":427,"line":428},[425,122075,652],{"class":431},[425,122077,27305],{"class":435},[425,122079,24828],{"class":435},[425,122081,122082],{"class":435}," kernel-devel-",[425,122084,886],{"class":701},[425,122086,70959],{"class":431},[425,122088,120394],{"class":691},[425,122090,1165],{"class":701},[19,122092,122093],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[972,122095,122096],{"start":710},[450,122097,122098],{},"安装内核源代码（如果需要）：",[19,122100,122101],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[416,122103,122105],{"className":118051,"code":122104,"language":118053,"meta":395,"style":395},"sudo dnf install kernel-headers kernel-source\n",[422,122106,122107],{"__ignoreMap":395},[425,122108,122109,122111,122113,122115,122118],{"class":427,"line":428},[425,122110,652],{"class":431},[425,122112,27305],{"class":435},[425,122114,24828],{"class":435},[425,122116,122117],{"class":435}," kernel-headers",[425,122119,122120],{"class":435}," kernel-source\n",[972,122122,122123],{"start":721},[450,122124,122125],{},"检查安装：",[19,122127,122128,122129,122132],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[422,122130,122131],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[416,122134,122136],{"className":118051,"code":122135,"language":118053,"meta":395,"style":395},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[422,122137,122138],{"__ignoreMap":395},[425,122139,122140,122142],{"class":427,"line":428},[425,122141,27750],{"class":431},[425,122143,122144],{"class":435}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,122146,122147,122148,122151],{},"如果仍然遇到问题，可以通过 ",[422,122149,122150],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[1074,122153,122154],{},"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":395,"searchDepth":698,"depth":698,"links":122156},[122157,122161,122171,122175,122176],{"id":119254,"depth":698,"text":119255,"children":122158},[122159,122160],{"id":119264,"depth":710,"text":119265},{"id":119274,"depth":710,"text":119275},{"id":119474,"depth":698,"text":119475,"children":122162},[122163,122164,122165,122166,122167,122168,122169,122170],{"id":119478,"depth":710,"text":119479},{"id":119548,"depth":710,"text":119549},{"id":119637,"depth":710,"text":119638},{"id":119882,"depth":710,"text":119883},{"id":119952,"depth":710,"text":119953},{"id":120019,"depth":710,"text":120020},{"id":120054,"depth":710,"text":120055},{"id":120109,"depth":710,"text":120110},{"id":120160,"depth":698,"text":120161,"children":122172},[122173,122174],{"id":120164,"depth":710,"text":120165},{"id":120244,"depth":710,"text":120245},{"id":120430,"depth":698,"text":120431},{"id":120603,"depth":698,"text":120604,"children":122177},[122178,122179,122180,122181,122182],{"id":120607,"depth":710,"text":120608},{"id":120648,"depth":710,"text":120649},{"id":120935,"depth":710,"text":120936},{"id":121309,"depth":710,"text":121310},{"id":121805,"depth":710,"text":121806},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119246,"description":24374},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":122189,"title":122190,"body":122191,"description":24374,"extension":1082,"meta":122531,"navigation":1084,"path":122532,"seo":122533,"stem":122534,"__hash__":122535},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":122192,"toc":122529},[122193,122196,122201,122204,122450,122455,122458,122494,122497,122526],[10,122194,122190],{"id":122195},"_4-命令教程长期积累",[972,122197,122198],{},[450,122199,122200],{},"大多数命令",[19,122202,122203],{},"常用 Linux 命令速查：",[416,122205,122207],{"className":118051,"code":122206,"language":118053,"meta":395,"style":395},"# 文件与目录\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",[422,122208,122209,122214,122221,122228,122236,122243,122250,122258,122266,122273,122280,122288,122292,122297,122304,122312,122319,122323,122328,122335,122343,122351,122359,122367,122371,122376,122384,122391,122398,122406,122414,122418,122423,122432,122441],{"__ignoreMap":395},[425,122210,122211],{"class":427,"line":428},[425,122212,122213],{"class":1216},"# 文件与目录\n",[425,122215,122216,122218],{"class":427,"line":698},[425,122217,27750],{"class":431},[425,122219,122220],{"class":1216},"        # 列出目录内容\n",[425,122222,122223,122225],{"class":427,"line":710},[425,122224,102031],{"class":691},[425,122226,122227],{"class":1216},"        # 切换目录\n",[425,122229,122230,122233],{"class":427,"line":721},[425,122231,122232],{"class":691},"pwd",[425,122234,122235],{"class":1216},"       # 显示当前路径\n",[425,122237,122238,122240],{"class":427,"line":735},[425,122239,102021],{"class":431},[425,122241,122242],{"class":1216},"     # 创建目录\n",[425,122244,122245,122247],{"class":427,"line":743},[425,122246,26313],{"class":431},[425,122248,122249],{"class":1216},"        # 删除文件或目录\n",[425,122251,122252,122255],{"class":427,"line":751},[425,122253,122254],{"class":431},"cp",[425,122256,122257],{"class":1216},"        # 复制文件或目录\n",[425,122259,122260,122263],{"class":427,"line":759},[425,122261,122262],{"class":431},"mv",[425,122264,122265],{"class":1216},"        # 移动\u002F重命名文件或目录\n",[425,122267,122268,122270],{"class":427,"line":770},[425,122269,102038],{"class":431},[425,122271,122272],{"class":1216},"     # 创建空文件\n",[425,122274,122275,122277],{"class":427,"line":780},[425,122276,121520],{"class":431},[425,122278,122279],{"class":1216},"       # 查看文件内容\n",[425,122281,122282,122285],{"class":427,"line":790},[425,122283,122284],{"class":431},"head\u002Ftail",[425,122286,122287],{"class":1216}," # 查看文件头部\u002F尾部\n",[425,122289,122290],{"class":427,"line":805},[425,122291,3400],{"emptyLinePlaceholder":1084},[425,122293,122294],{"class":427,"line":818},[425,122295,122296],{"class":1216},"# 权限管理\n",[425,122298,122299,122301],{"class":427,"line":831},[425,122300,25604],{"class":431},[425,122302,122303],{"class":1216},"     # 修改文件权限\n",[425,122305,122306,122309],{"class":427,"line":841},[425,122307,122308],{"class":431},"chown",[425,122310,122311],{"class":1216},"     # 修改文件所有者\n",[425,122313,122314,122316],{"class":427,"line":852},[425,122315,652],{"class":431},[425,122317,122318],{"class":1216},"      # 以管理员身份执行\n",[425,122320,122321],{"class":427,"line":862},[425,122322,3400],{"emptyLinePlaceholder":1084},[425,122324,122325],{"class":427,"line":878},[425,122326,122327],{"class":1216},"# 系统信息\n",[425,122329,122330,122332],{"class":427,"line":914},[425,122331,70959],{"class":431},[425,122333,122334],{"class":1216},"     # 系统信息\n",[425,122336,122337,122340],{"class":427,"line":943},[425,122338,122339],{"class":431},"df",[425,122341,122342],{"class":1216},"        # 磁盘使用情况\n",[425,122344,122345,122348],{"class":427,"line":956},[425,122346,122347],{"class":431},"free",[425,122349,122350],{"class":1216},"      # 内存使用情况\n",[425,122352,122353,122356],{"class":427,"line":964},[425,122354,122355],{"class":431},"top\u002Fhtop",[425,122357,122358],{"class":1216},"  # 进程监控\n",[425,122360,122361,122364],{"class":427,"line":2733},[425,122362,122363],{"class":431},"ps",[425,122365,122366],{"class":1216},"        # 查看进程\n",[425,122368,122369],{"class":427,"line":2750},[425,122370,3400],{"emptyLinePlaceholder":1084},[425,122372,122373],{"class":427,"line":2755},[425,122374,122375],{"class":1216},"# 网络\n",[425,122377,122378,122381],{"class":427,"line":2760},[425,122379,122380],{"class":431},"ping",[425,122382,122383],{"class":1216},"      # 测试网络连通性\n",[425,122385,122386,122388],{"class":427,"line":2765},[425,122387,27838],{"class":431},[425,122389,122390],{"class":1216},"      # 发送 HTTP 请求\n",[425,122392,122393,122395],{"class":427,"line":2779},[425,122394,121044],{"class":431},[425,122396,122397],{"class":1216},"      # 下载文件\n",[425,122399,122400,122403],{"class":427,"line":2784},[425,122401,122402],{"class":431},"ssh",[425,122404,122405],{"class":1216},"       # 远程登录\n",[425,122407,122408,122411],{"class":427,"line":3577},[425,122409,122410],{"class":431},"scp",[425,122412,122413],{"class":1216},"       # 远程文件传输\n",[425,122415,122416],{"class":427,"line":3591},[425,122417,3400],{"emptyLinePlaceholder":1084},[425,122419,122420],{"class":427,"line":3599},[425,122421,122422],{"class":1216},"# 包管理（Debian\u002FUbuntu）\n",[425,122424,122425,122427,122429],{"class":427,"line":3604},[425,122426,118123],{"class":431},[425,122428,118102],{"class":435},[425,122430,122431],{"class":1216},"   # 更新软件源\n",[425,122433,122434,122436,122438],{"class":427,"line":3610},[425,122435,118123],{"class":431},[425,122437,24828],{"class":435},[425,122439,122440],{"class":1216},"  # 安装软件包\n",[425,122442,122443,122445,122447],{"class":427,"line":3616},[425,122444,118123],{"class":431},[425,122446,27070],{"class":435},[425,122448,122449],{"class":1216},"   # 卸载软件包\n",[972,122451,122452],{"start":698},[450,122453,122454],{},"KDE Dolphin 以root打开",[19,122456,122457],{},"kde5",[416,122459,122461],{"className":118051,"code":122460,"language":118053,"meta":395,"style":395},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[422,122462,122463],{"__ignoreMap":395},[425,122464,122465,122468,122471,122474,122476,122478,122481,122484,122486,122489,122491],{"class":427,"line":428},[425,122466,122467],{"class":431},"pkexec",[425,122469,122470],{"class":435}," env",[425,122472,122473],{"class":435}," DISPLAY=",[425,122475,729],{"class":701},[425,122477,795],{"class":435},[425,122479,122480],{"class":701},"$XAUTHORITY ",[425,122482,122483],{"class":435},"KDE_SESSION_VERSION=",[425,122485,1468],{"class":691},[425,122487,122488],{"class":435}," KDE_FULL_SESSION=",[425,122490,2376],{"class":691},[425,122492,122493],{"class":435}," dolphin\n",[19,122495,122496],{},"kde6",[416,122498,122500],{"className":118051,"code":122499,"language":118053,"meta":395,"style":395},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[422,122501,122502],{"__ignoreMap":395},[425,122503,122504,122506,122508,122510,122512,122514,122516,122518,122520,122522,122524],{"class":427,"line":428},[425,122505,122467],{"class":431},[425,122507,122470],{"class":435},[425,122509,122473],{"class":435},[425,122511,729],{"class":701},[425,122513,795],{"class":435},[425,122515,122480],{"class":701},[425,122517,122483],{"class":435},[425,122519,1493],{"class":691},[425,122521,122488],{"class":435},[425,122523,2376],{"class":691},[425,122525,122493],{"class":435},[1074,122527,122528],{},"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":395,"searchDepth":698,"depth":698,"links":122530},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":122190,"description":24374},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":122537,"title":122538,"body":122539,"description":24374,"extension":1082,"meta":122553,"navigation":1084,"path":122554,"seo":122555,"stem":122556,"__hash__":122557},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122540,"toc":122551},[122541,122544],[10,122542,122538],{"id":122543},"_5-各种环境配置",[19,122545,122546],{},[22,122547,122550],{"href":122548,"rel":122549},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[26],"电控组环境搭建大全",{"title":395,"searchDepth":698,"depth":698,"links":122552},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122538,"description":24374},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122559,"title":122560,"body":122561,"description":24374,"extension":1082,"meta":122909,"navigation":1084,"path":122910,"seo":122911,"stem":122912,"__hash__":122913},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122562,"toc":122901},[122563,122566,122570,122574,122578,122583,122590,122594,122887,122891,122898],[10,122564,122560],{"id":122565},"_6-拓展功能",[1099,122567,122569],{"id":122568},"_61-wine","6.1 Wine",[1099,122571,122573],{"id":122572},"_62-android","6.2 Android",[14,122575,122577],{"id":122576},"_621-i卡a卡","6.2.1 I卡、A卡",[972,122579,122580],{},[450,122581,122582],{},"Wayland-Waydroid(体验超级好)",[19,122584,122585,122586],{},"Waydroid 官网与安装指南：",[22,122587,122588],{"href":122588,"rel":122589},"https:\u002F\u002Fwaydro.id\u002F",[26],[14,122591,122593],{"id":122592},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[972,122595,122596],{},[450,122597,122598,122599,122601,122602,122606,122608,122611,122616,122813],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54471,122600],{},"BlissOS 官网下载：",[22,122603,122604],{"href":122604,"rel":122605},"https:\u002F\u002Fblissos.org\u002F",[26],[54471,122607],{},[393,122609],{"alt":395,"src":122610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[972,122612,122613],{"start":710},[450,122614,122615],{},"比较推荐的配置",[416,122617,122619],{"className":118051,"code":122618,"language":118053,"meta":395,"style":395},"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",[422,122620,122621,122628,122638,122648,122658,122670,122680,122687,122697,122706,122715,122725,122735,122744,122754,122764,122776,122786,122795,122805],{"__ignoreMap":395},[425,122622,122623,122626],{"class":427,"line":428},[425,122624,122625],{"class":431},"qemu-system-x86_64",[425,122627,695],{"class":691},[425,122629,122630,122633,122636],{"class":427,"line":698},[425,122631,122632],{"class":691},"        -M",[425,122634,122635],{"class":435}," q35,vmport=off",[425,122637,695],{"class":691},[425,122639,122640,122643,122646],{"class":427,"line":710},[425,122641,122642],{"class":691},"        -accel",[425,122644,122645],{"class":435}," kvm",[425,122647,695],{"class":691},[425,122649,122650,122653,122656],{"class":427,"line":721},[425,122651,122652],{"class":691},"        -cpu",[425,122654,122655],{"class":435}," qemu64,+sse3,+sse4.2",[425,122657,695],{"class":691},[425,122659,122660,122663,122666,122668],{"class":427,"line":735},[425,122661,122662],{"class":691},"        -smp",[425,122664,122665],{"class":435}," 8,cores=",[425,122667,1442],{"class":691},[425,122669,695],{"class":691},[425,122671,122672,122675,122678],{"class":427,"line":743},[425,122673,122674],{"class":691},"        -m",[425,122676,122677],{"class":435}," 6G",[425,122679,695],{"class":691},[425,122681,122682,122685],{"class":427,"line":751},[425,122683,122684],{"class":691},"        -usb",[425,122686,695],{"class":691},[425,122688,122689,122692,122695],{"class":427,"line":759},[425,122690,122691],{"class":691},"        -device",[425,122693,122694],{"class":435}," virtio-tablet",[425,122696,695],{"class":691},[425,122698,122699,122701,122704],{"class":427,"line":770},[425,122700,122691],{"class":691},[425,122702,122703],{"class":435}," virtio-keyboard",[425,122705,695],{"class":691},[425,122707,122708,122710,122713],{"class":427,"line":780},[425,122709,122691],{"class":691},[425,122711,122712],{"class":435}," usb-tablet",[425,122714,695],{"class":691},[425,122716,122717,122720,122723],{"class":427,"line":790},[425,122718,122719],{"class":691},"        -bios",[425,122721,122722],{"class":435}," OVMF-pure-efi64.fd",[425,122724,695],{"class":691},[425,122726,122727,122730,122733],{"class":427,"line":805},[425,122728,122729],{"class":691},"        -net",[425,122731,122732],{"class":435}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[425,122734,695],{"class":691},[425,122736,122737,122739,122742],{"class":427,"line":818},[425,122738,122729],{"class":691},[425,122740,122741],{"class":435}," nic,model=virtio",[425,122743,695],{"class":691},[425,122745,122746,122749,122752],{"class":427,"line":831},[425,122747,122748],{"class":691},"        -audio",[425,122750,122751],{"class":435}," sdl,model=hda",[425,122753,695],{"class":691},[425,122755,122756,122759,122762],{"class":427,"line":841},[425,122757,122758],{"class":691},"        -display",[425,122760,122761],{"class":435}," sdl,gl=on,show-cursor=on",[425,122763,695],{"class":691},[425,122765,122766,122768,122771,122774],{"class":427,"line":852},[425,122767,122691],{"class":691},[425,122769,122770],{"class":435}," virtio-vga-gl,xres=1920,yres=",[425,122772,122773],{"class":691},"1080",[425,122775,695],{"class":691},[425,122777,122778,122781,122784],{"class":427,"line":862},[425,122779,122780],{"class":691},"        -drive",[425,122782,122783],{"class":435}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[425,122785,695],{"class":691},[425,122787,122788,122790,122793],{"class":427,"line":878},[425,122789,122780],{"class":691},[425,122791,122792],{"class":435}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[425,122794,695],{"class":691},[425,122796,122797,122800,122803],{"class":427,"line":914},[425,122798,122799],{"class":691},"        -monitor",[425,122801,122802],{"class":435}," stdio",[425,122804,695],{"class":691},[425,122806,122807,122810],{"class":427,"line":943},[425,122808,122809],{"class":691},"        -serial",[425,122811,122812],{"class":435}," none\n",[972,122814,122815],{"start":735},[450,122816,122817,122818],{},"常用操作：",[972,122819,122820,122823,122879],{},[450,122821,122822],{},"全屏：Ctrl+Alt+F",[450,122824,122825,122826,122831],{},"adb调试",[972,122827,122828],{},[450,122829,122830],{},"使Linux与Android用ADB连接。",[416,122832,122834],{"className":118051,"code":122833,"language":118053,"meta":395,"style":395},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[422,122835,122836,122841,122852,122857,122869,122874],{"__ignoreMap":395},[425,122837,122838],{"class":427,"line":428},[425,122839,122840],{"class":1216},"# 连接安卓\n",[425,122842,122843,122846,122849],{"class":427,"line":698},[425,122844,122845],{"class":431},"adb",[425,122847,122848],{"class":435}," connect",[425,122850,122851],{"class":691}," 127.0.0.1\n",[425,122853,122854],{"class":427,"line":710},[425,122855,122856],{"class":1216},"# 打开shell\n",[425,122858,122859,122861,122863,122866],{"class":427,"line":721},[425,122860,122845],{"class":431},[425,122862,27872],{"class":691},[425,122864,122865],{"class":435}," 127.0.0.1:5555",[425,122867,122868],{"class":435}," shell\n",[425,122870,122871],{"class":427,"line":735},[425,122872,122873],{"class":1216},"# 使用root权限\n",[425,122875,122876],{"class":427,"line":743},[425,122877,122878],{"class":431},"su\n",[450,122880,122881,122882],{},"中文输入法",[972,122883,122884],{},[450,122885,122886],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[1099,122888,122890],{"id":122889},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,122892,122893,122894],{},"rEFInd 官网与文档：",[22,122895,122896],{"href":122896,"rel":122897},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[26],[1074,122899,122900],{},"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":395,"searchDepth":698,"depth":698,"links":122902},[122903,122904,122908],{"id":122568,"depth":698,"text":122569},{"id":122572,"depth":698,"text":122573,"children":122905},[122906,122907],{"id":122576,"depth":710,"text":122577},{"id":122592,"depth":710,"text":122593},{"id":122889,"depth":698,"text":122890},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122560,"description":24374},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122915,"title":122916,"body":122917,"description":24374,"extension":1082,"meta":126216,"navigation":1084,"path":126217,"seo":126218,"stem":126219,"__hash__":126220},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122918,"toc":126190},[122919,122922,122926,122929,122936,123186,123189,123261,123264,123268,123272,123277,123280,123283,123286,123291,123294,123297,123300,123305,123308,123313,123316,123319,123324,123327,123332,123335,123339,123343,123346,123351,123354,123368,123371,123374,123383,123386,123395,123398,123401,123410,123413,123422,123425,123428,123437,123440,123443,123458,123461,123464,123473,123478,123481,123484,123493,123496,123505,123508,123517,123520,123529,123534,123537,123545,123550,123553,123562,123565,123573,123578,123581,123590,123593,123596,123600,123603,123608,123611,123616,123630,123635,123640,123651,123656,123662,123667,123682,123687,123690,123695,123700,123705,123713,123718,123725,123730,123741,123746,123749,123753,123756,123759,123764,123767,123786,123791,123794,123803,123808,123811,123833,123836,123866,123869,123874,123877,123891,123896,123915,123918,123921,123926,123938,123943,123948,123951,123956,123959,123974,123977,123982,123987,123991,123996,124036,124039,124043,124049,124055,124060,124063,124070,124075,124082,124085,124088,124095,124109,124112,124172,124175,124189,124201,124204,124207,124210,124274,124277,124280,124283,124303,124306,124311,124318,124322,124325,124329,124334,124339,124343,124346,124349,124391,124396,124399,124421,124436,124438,124443,124455,124515,124517,124519,124573,124575,124577,124583,124588,124591,124596,124600,124603,124665,124670,124673,124675,124679,124691,124773,124775,124777,124831,124837,124839,124843,124848,124850,124855,124859,124879,124914,124918,124921,124924,124927,124934,124937,124949,124952,124967,124970,124989,125037,125040,125057,125060,125074,125079,125082,125091,125106,125118,125156,125161,125170,125175,125180,125206,125215,125219,125223,125228,125231,125235,125239,125244,125247,125252,125255,125260,125263,125268,125271,125275,125280,125283,125288,125291,125295,125300,125303,125308,125311,125316,125319,125323,125328,125331,125336,125339,125344,125347,125351,125356,125359,125364,125367,125372,125375,125380,125383,125388,125391,125396,125399,125403,125408,125411,125416,125423,125427,125432,125435,125440,125443,125447,125452,125455,125458,125461,125464,125467,125471,125474,125484,125489,125494,125516,125521,125526,125533,125537,125542,125545,125548,125553,125556,125559,125562,125565,125568,125571,125574,125577,125580,125583,125586,125589,125594,125599,125604,125609,125614,125619,125624,125627,125631,125634,125638,125643,125648,125653,125658,125662,125668,125676,125681,125684,125689,125704,125707,125712,125746,125761,125764,125819,125845,125857,125860,125869,125872,125887,125892,125895,125901,125906,125909,125914,125917,125922,125927,125934,125937,125952,125955,125990,125995,126003,126041,126044,126047,126052,126055,126060,126071,126105,126110,126113,126122,126127,126133,126136,126141,126150,126155,126158,126161,126166,126174,126177,126182,126187],[10,122920,122916],{"id":122921},"_7-其他操作",[1099,122923,122925],{"id":122924},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,122927,122928],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,122930,122931,122932,122935],{},"进入工控机的硬盘目录，进入",[422,122933,122934],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[416,122937,122941],{"className":122938,"code":122939,"language":122940,"meta":395,"style":395},"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",[422,122942,122943,122951,122962,122969,122976,122988,122995,123007,123018,123029,123036,123043,123050,123062,123074,123081,123093,123105,123112,123124,123136,123148,123159,123166,123177],{"__ignoreMap":395},[425,122944,122945,122948],{"class":427,"line":428},[425,122946,122947],{"class":52055},"network",[425,122949,122950],{"class":701},": \n",[425,122952,122953,122956,122958,122960],{"class":427,"line":698},[425,122954,122955],{"class":52055},"  version",[425,122957,52192],{"class":701},[425,122959,1235],{"class":691},[425,122961,3674],{"class":701},[425,122963,122964,122967],{"class":427,"line":710},[425,122965,122966],{"class":52055},"  wifis",[425,122968,122950],{"class":701},[425,122970,122971,122974],{"class":427,"line":721},[425,122972,122973],{"class":52055},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[425,122975,122950],{"class":701},[425,122977,122978,122981,122983,122986],{"class":427,"line":735},[425,122979,122980],{"class":52055},"      renderer",[425,122982,52192],{"class":701},[425,122984,122985],{"class":435},"NetworkManager",[425,122987,3674],{"class":701},[425,122989,122990,122993],{"class":427,"line":743},[425,122991,122992],{"class":52055},"      match",[425,122994,122950],{"class":701},[425,122996,122997,123000,123002,123005],{"class":427,"line":751},[425,122998,122999],{"class":52055},"        name",[425,123001,52192],{"class":701},[425,123003,123004],{"class":435},"\"wlan0\"",[425,123006,3674],{"class":701},[425,123008,123009,123012,123014,123016],{"class":427,"line":759},[425,123010,123011],{"class":52055},"      dhcp4",[425,123013,52192],{"class":701},[425,123015,2376],{"class":691},[425,123017,3674],{"class":701},[425,123019,123020,123023,123025,123027],{"class":427,"line":770},[425,123021,123022],{"class":52055},"      dhcp6",[425,123024,52192],{"class":701},[425,123026,2376],{"class":691},[425,123028,3674],{"class":701},[425,123030,123031,123034],{"class":427,"line":780},[425,123032,123033],{"class":52055},"      access-points",[425,123035,122950],{"class":701},[425,123037,123038,123041],{"class":427,"line":790},[425,123039,123040],{"class":435},"        \"EMIS_Vinci_Robocon_5G\"",[425,123042,122950],{"class":701},[425,123044,123045,123048],{"class":427,"line":805},[425,123046,123047],{"class":52055},"          auth",[425,123049,122950],{"class":701},[425,123051,123052,123055,123057,123060],{"class":427,"line":818},[425,123053,123054],{"class":52055},"            key-management",[425,123056,52192],{"class":701},[425,123058,123059],{"class":435},"\"psk\"",[425,123061,3674],{"class":701},[425,123063,123064,123067,123069,123072],{"class":427,"line":831},[425,123065,123066],{"class":52055},"            password",[425,123068,52192],{"class":701},[425,123070,123071],{"class":435},"\"vinci666\"",[425,123073,3674],{"class":701},[425,123075,123076,123079],{"class":427,"line":841},[425,123077,123078],{"class":52055},"          networkmanager",[425,123080,122950],{"class":701},[425,123082,123083,123086,123088,123091],{"class":427,"line":852},[425,123084,123085],{"class":52055},"            uuid",[425,123087,52192],{"class":701},[425,123089,123090],{"class":435},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[425,123092,3674],{"class":701},[425,123094,123095,123098,123100,123103],{"class":427,"line":862},[425,123096,123097],{"class":52055},"            name",[425,123099,52192],{"class":701},[425,123101,123102],{"class":435},"\"EMIS_Vinci_Robocon_5G\"",[425,123104,3674],{"class":701},[425,123106,123107,123110],{"class":427,"line":878},[425,123108,123109],{"class":52055},"            passthrough",[425,123111,122950],{"class":701},[425,123113,123114,123117,123119,123122],{"class":427,"line":914},[425,123115,123116],{"class":52055},"              wifi-security.auth-alg",[425,123118,52192],{"class":701},[425,123120,123121],{"class":435},"\"open\"",[425,123123,3674],{"class":701},[425,123125,123126,123129,123131,123134],{"class":427,"line":943},[425,123127,123128],{"class":52055},"              ipv6.addr-gen-mode",[425,123130,52192],{"class":701},[425,123132,123133],{"class":435},"\"default\"",[425,123135,3674],{"class":701},[425,123137,123138,123141,123143,123146],{"class":427,"line":956},[425,123139,123140],{"class":52055},"              ipv6.ip6-privacy",[425,123142,52192],{"class":701},[425,123144,123145],{"class":435},"\"-1\"",[425,123147,3674],{"class":701},[425,123149,123150,123153,123155,123157],{"class":427,"line":964},[425,123151,123152],{"class":52055},"              proxy._",[425,123154,52192],{"class":701},[425,123156,8652],{"class":435},[425,123158,3674],{"class":701},[425,123160,123161,123164],{"class":427,"line":2733},[425,123162,123163],{"class":52055},"      networkmanager",[425,123165,122950],{"class":701},[425,123167,123168,123171,123173,123175],{"class":427,"line":2750},[425,123169,123170],{"class":52055},"        uuid",[425,123172,52192],{"class":701},[425,123174,123090],{"class":435},[425,123176,3674],{"class":701},[425,123178,123179,123181,123183],{"class":427,"line":2755},[425,123180,122999],{"class":52055},[425,123182,52192],{"class":701},[425,123184,123185],{"class":435},"\"EMIS_Vinci_Robocon_5G\"\n",[19,123187,123188],{},"将其改为新wifi的名和密码：",[416,123190,123192],{"className":122938,"code":123191,"language":122940,"meta":395,"style":395},"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",[422,123193,123194,123200,123209,123215,123222,123231,123239,123245,123251],{"__ignoreMap":395},[425,123195,123196,123198],{"class":427,"line":428},[425,123197,122947],{"class":52055},[425,123199,4739],{"class":701},[425,123201,123202,123204,123206],{"class":427,"line":698},[425,123203,122955],{"class":52055},[425,123205,52192],{"class":701},[425,123207,123208],{"class":691},"2\n",[425,123210,123211,123213],{"class":427,"line":710},[425,123212,122966],{"class":52055},[425,123214,4739],{"class":701},[425,123216,123217,123220],{"class":427,"line":721},[425,123218,123219],{"class":52055},"    wlan0",[425,123221,4739],{"class":701},[425,123223,123224,123226,123228],{"class":427,"line":735},[425,123225,123011],{"class":52055},[425,123227,52192],{"class":701},[425,123229,123230],{"class":691},"true\n",[425,123232,123233,123235,123237],{"class":427,"line":743},[425,123234,123022],{"class":52055},[425,123236,52192],{"class":701},[425,123238,123230],{"class":691},[425,123240,123241,123243],{"class":427,"line":751},[425,123242,123033],{"class":52055},[425,123244,4739],{"class":701},[425,123246,123247,123249],{"class":427,"line":759},[425,123248,123040],{"class":435},[425,123250,4739],{"class":701},[425,123252,123253,123256,123258],{"class":427,"line":770},[425,123254,123255],{"class":52055},"          password",[425,123257,52192],{"class":701},[425,123259,123260],{"class":435},"\"vinci666\"\n",[19,123262,123263],{},"工控机开机即可连上网。",[1099,123265,123267],{"id":123266},"_72-ssh远程开发","7.2 SSH远程开发",[14,123269,123271],{"id":123270},"_721-环境准备","7.2.1 环境准备",[19,123273,123274],{},[400,123275,123276],{},"1.硬件准备",[19,123278,123279],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,123281,123282],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,123284,123285],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,123287,123288],{},[400,123289,123290],{},"2.设置固定IP",[19,123292,123293],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,123295,123296],{},"1.进入设置界面",[19,123298,123299],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,123301,123302],{},[393,123303],{"alt":395,"src":123304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,123306,123307],{},"2.配置所连接的网络",[19,123309,123310],{},[393,123311],{"alt":395,"src":123312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,123314,123315],{},"3.设置固定IP",[19,123317,123318],{},"查看当前IP地址。",[19,123320,123321],{},[393,123322],{"alt":395,"src":123323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,123325,123326],{},"设置固定IP。",[19,123328,123329],{},[393,123330],{"alt":395,"src":123331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,123333,123334],{},"至此，IP配置完毕。",[14,123336,123338],{"id":123337},"_722-环境搭建","7.2.2 环境搭建",[19,123340,123341],{},[400,123342,26744],{},[19,123344,123345],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,123347,123348],{},[400,123349,123350],{},"实现",[19,123352,123353],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[972,123355,123356,123359,123362,123365],{},[450,123357,123358],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[450,123360,123361],{},"远程主机启动SSH服务；",[450,123363,123364],{},"本地主机登陆远程主机；",[450,123366,123367],{},"实现数据传输。",[19,123369,123370],{},"1.安装SSH客户端与服务端",[19,123372,123373],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[416,123375,123377],{"className":121571,"code":123376,"language":121573,"meta":121574,"style":395}," sudo apt install openssh-server\n",[422,123378,123379],{"__ignoreMap":395},[425,123380,123381],{"class":427,"line":428},[425,123382,123376],{},[19,123384,123385],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[416,123387,123389],{"className":121571,"code":123388,"language":121573,"meta":121574,"style":395},"sudo apt install openssh-client\n",[422,123390,123391],{"__ignoreMap":395},[425,123392,123393],{"class":427,"line":428},[425,123394,123388],{},[19,123396,123397],{},"2.远程主机启动SSH服务",[19,123399,123400],{},"远程主机启动 ssh 服务命令如下：",[416,123402,123404],{"className":121571,"code":123403,"language":121573,"meta":121574,"style":395},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[422,123405,123406],{"__ignoreMap":395},[425,123407,123408],{"class":427,"line":428},[425,123409,123403],{},[19,123411,123412],{},"启动后可使用如下命令查看服务是否正常运行：",[416,123414,123416],{"className":121571,"code":123415,"language":121573,"meta":121574,"style":395},"ps -e | grep ssh\n",[422,123417,123418],{"__ignoreMap":395},[425,123419,123420],{"class":427,"line":428},[425,123421,123415],{},[19,123423,123424],{},"如果启动成功，会包含 sshd 程序。",[19,123426,123427],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[416,123429,123431],{"className":121571,"code":123430,"language":121573,"meta":121574,"style":395},"sudo systemctl enable ssh\n",[422,123432,123433],{"__ignoreMap":395},[425,123434,123435],{"class":427,"line":428},[425,123436,123430],{},[19,123438,123439],{},"3.本地远程登录",[19,123441,123442],{},"登录远程主机可以调用如下命令:",[416,123444,123446],{"className":118051,"code":123445,"language":118053,"meta":395,"style":395},"ssh -X 用户名@ip地址\n",[422,123447,123448],{"__ignoreMap":395},[425,123449,123450,123452,123455],{"class":427,"line":428},[425,123451,122402],{"class":431},[425,123453,123454],{"class":691}," -X",[425,123456,123457],{"class":435}," 用户名@ip地址\n",[19,123459,123460],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,123462,123463],{},"如果退出，可以调用exit命令：",[416,123465,123467],{"className":121571,"code":123466,"language":121573,"meta":121574,"style":395},"exit\n",[422,123468,123469],{"__ignoreMap":395},[425,123470,123471],{"class":427,"line":428},[425,123472,123466],{},[19,123474,123475],{},[400,123476,123477],{},"4.实现数据传输",[19,123479,123480],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,123482,123483],{},"上传文件指令格式如下：",[416,123485,123487],{"className":121571,"code":123486,"language":121573,"meta":121574,"style":395},"scp 本地文件路径 账号@ip:路径\n",[422,123488,123489],{"__ignoreMap":395},[425,123490,123491],{"class":427,"line":428},[425,123492,123486],{},[19,123494,123495],{},"上传文件夹指令格式如下：",[416,123497,123499],{"className":121571,"code":123498,"language":121573,"meta":121574,"style":395},"scp -r 本地文件夹路径 账号@ip:路径\n",[422,123500,123501],{"__ignoreMap":395},[425,123502,123503],{"class":427,"line":428},[425,123504,123498],{},[19,123506,123507],{},"下载文件指令格式如下：",[416,123509,123511],{"className":121571,"code":123510,"language":121573,"meta":121574,"style":395},"scp 账号@ip:路径 本地文件夹路径\n",[422,123512,123513],{"__ignoreMap":395},[425,123514,123515],{"class":427,"line":428},[425,123516,123510],{},[19,123518,123519],{},"下载文件夹指令格式如下：",[416,123521,123523],{"className":121571,"code":123522,"language":121573,"meta":121574,"style":395},"scp -r 账号@ip:路径 本地文件夹路径\n",[422,123524,123525],{"__ignoreMap":395},[425,123526,123527],{"class":427,"line":428},[425,123528,123522],{},[19,123530,123531],{},[400,123532,123533],{},"优化",[19,123535,123536],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[972,123538,123539,123542],{},[450,123540,123541],{},"本地生成密钥对；",[450,123543,123544],{},"将公钥上传至远程主机。",[19,123546,123547],{},[400,123548,123549],{},"1.生成密钥对",[19,123551,123552],{},"本地客户端生成公私钥：（一路回车默认即可）",[416,123554,123556],{"className":121571,"code":123555,"language":121573,"meta":121574,"style":395},"ssh-keygen\n",[422,123557,123558],{"__ignoreMap":395},[425,123559,123560],{"class":427,"line":428},[425,123561,123555],{},[19,123563,123564],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[972,123566,123567,123570],{},[450,123568,123569],{},"id_rsa （私钥）；",[450,123571,123572],{},"id_rsa.pub (公钥)。",[19,123574,123575],{},[400,123576,123577],{},"2.公钥上传",[19,123579,123580],{},"上传指令如下：",[416,123582,123584],{"className":121571,"code":123583,"language":121573,"meta":121574,"style":395},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[422,123585,123586],{"__ignoreMap":395},[425,123587,123588],{"class":427,"line":428},[425,123589,123583],{},[19,123591,123592],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,123594,123595],{},"以后再远程登录就无需录入密码了。",[14,123597,123599],{"id":123598},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,123601,123602],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,123604,123605],{},[400,123606,123607],{},"1.准备工作",[19,123609,123610],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,123612,123613],{},[400,123614,123615],{},"2.为VScode安装远程开发插件",[19,123617,123618,123619,123622,123623,123626,123627,998],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[422,123620,123621],{},"扩展：商店","的搜索栏输入",[422,123624,123625],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[422,123628,123629],{},"安装",[19,123631,123632],{},[393,123633],{"alt":395,"src":123634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,123636,123637],{},[400,123638,123639],{},"3.配置远程连接",[19,123641,123642,123643,123646,123647,123650],{},"步骤1：使用快捷键",[422,123644,123645],{},"ctrl + shift + p","打开命令输入窗口，并输入",[422,123648,123649],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,123652,123653],{},[393,123654],{"alt":395,"src":123655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,123657,123658,123659,998],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[422,123660,123661],{},"Add New SSH Host",[19,123663,123664],{},[393,123665],{"alt":395,"src":123666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,123668,123669,123670,123673,123674,123677,123678,123681],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[422,123671,123672],{},"ssh +X ubuntu@192.168.43.164","，其中，",[422,123675,123676],{},"ubuntu","需要替换为你的登录用户名，",[422,123679,123680],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,123683,123684],{},[393,123685],{"alt":395,"src":123686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,123688,123689],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,123691,123692],{},[393,123693],{"alt":395,"src":123694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,123696,123697],{},[393,123698],{"alt":395,"src":123699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,123701,123702],{},[400,123703,123704],{},"4.使用",[19,123706,123707,123708,123646,123710,123712],{},"步骤1：继续使用快捷键",[422,123709,123645],{},[422,123711,123649],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,123714,123715],{},[393,123716],{"alt":395,"src":123717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,123719,123720,123721,123724],{},"或者，也可以点击侧边栏的",[422,123722,123723],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,123726,123727],{},[393,123728],{"alt":395,"src":123729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,123731,123732,123733,123736,123737,123740],{},"步骤2：选择菜单栏的",[422,123734,123735],{},"文件","下的",[422,123738,123739],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,123742,123743],{},[393,123744],{"alt":395,"src":123745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,123747,123748],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[1099,123750,123752],{"id":123751},"_73-远程桌面","7.3 远程桌面",[19,123754,123755],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,123757,123758],{},"我们选择使用VNC来看。",[972,123760,123761],{},[450,123762,123763],{},"安装VNC服务器：",[19,123765,123766],{},"这里以TigerVNC为例进行安装：",[416,123768,123770],{"className":118051,"code":123769,"language":118053,"meta":395,"style":395},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[422,123771,123772],{"__ignoreMap":395},[425,123773,123774,123776,123778,123780,123783],{"class":427,"line":428},[425,123775,652],{"class":431},[425,123777,118072],{"class":435},[425,123779,24828],{"class":435},[425,123781,123782],{"class":435}," tigervnc-standalone-server",[425,123784,123785],{"class":435}," tigervnc-common\n",[972,123787,123788],{"start":698},[450,123789,123790],{},"设置VNC密码：",[19,123792,123793],{},"为VNC用户设置密码，运行以下命令：",[416,123795,123797],{"className":118051,"code":123796,"language":118053,"meta":395,"style":395},"vncpasswd\n",[422,123798,123799],{"__ignoreMap":395},[425,123800,123801],{"class":427,"line":428},[425,123802,123796],{"class":431},[972,123804,123805],{"start":710},[450,123806,123807],{},"配置VNC启动脚本:",[19,123809,123810],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[416,123812,123814],{"className":118051,"code":123813,"language":118053,"meta":395,"style":395},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[422,123815,123816,123825],{"__ignoreMap":395},[425,123817,123818,123820,123822],{"class":427,"line":428},[425,123819,102021],{"class":431},[425,123821,29971],{"class":691},[425,123823,123824],{"class":435}," ~\u002F.vnc\n",[425,123826,123827,123830],{"class":427,"line":698},[425,123828,123829],{"class":431},"nano",[425,123831,123832],{"class":435}," ~\u002F.vnc\u002Fxstartup\n",[19,123834,123835],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[416,123837,123839],{"className":118051,"code":123838,"language":118053,"meta":395,"style":395},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[422,123840,123841,123846,123854,123861],{"__ignoreMap":395},[425,123842,123843],{"class":427,"line":428},[425,123844,123845],{"class":1216},"#!\u002Fbin\u002Fsh\n",[425,123847,123848,123851],{"class":427,"line":698},[425,123849,123850],{"class":691},"unset",[425,123852,123853],{"class":435}," SESSION_MANAGER\n",[425,123855,123856,123858],{"class":427,"line":710},[425,123857,123850],{"class":691},[425,123859,123860],{"class":435}," DBUS_SESSION_BUS_ADDRESS\n",[425,123862,123863],{"class":427,"line":721},[425,123864,123865],{"class":431},"gnome-session\n",[19,123867,123868],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[972,123870,123871],{"start":721},[450,123872,123873],{},"给予执行权限：",[19,123875,123876],{},"为xstartup文件设置执行权限：",[416,123878,123880],{"className":118051,"code":123879,"language":118053,"meta":395,"style":395},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[422,123881,123882],{"__ignoreMap":395},[425,123883,123884,123886,123889],{"class":427,"line":428},[425,123885,25604],{"class":431},[425,123887,123888],{"class":435}," +x",[425,123890,123832],{"class":435},[972,123892,123893],{"start":735},[450,123894,123895],{},"启动VNC服务器：",[416,123897,123899],{"className":118051,"code":123898,"language":118053,"meta":395,"style":395},"vncserver -geometry 1920x1080 -localhost=0\n",[422,123900,123901],{"__ignoreMap":395},[425,123902,123903,123906,123909,123912],{"class":427,"line":428},[425,123904,123905],{"class":431},"vncserver",[425,123907,123908],{"class":691}," -geometry",[425,123910,123911],{"class":435}," 1920x1080",[425,123913,123914],{"class":691}," -localhost=0\n",[19,123916,123917],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,123919,123920],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[972,123922,123923],{"start":743},[450,123924,123925],{},"查看已开启的VNC服务器：",[416,123927,123929],{"className":118051,"code":123928,"language":118053,"meta":395,"style":395},"vncserver -list\n",[422,123930,123931],{"__ignoreMap":395},[425,123932,123933,123935],{"class":427,"line":428},[425,123934,123905],{"class":431},[425,123936,123937],{"class":691}," -list\n",[19,123939,123940],{},[393,123941],{"alt":395,"src":123942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[972,123944,123945],{"start":751},[450,123946,123947],{},"连接到VNC服务器：",[19,123949,123950],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[972,123952,123953],{"start":759},[450,123954,123955],{},"停止VNC服务器：",[19,123957,123958],{},"如果需要停止VNC服务器，可以使用以下命令：",[416,123960,123962],{"className":118051,"code":123961,"language":118053,"meta":395,"style":395},"vncserver -kill :1\n",[422,123963,123964],{"__ignoreMap":395},[425,123965,123966,123968,123971],{"class":427,"line":428},[425,123967,123905],{"class":431},[425,123969,123970],{"class":691}," -kill",[425,123972,123973],{"class":435}," :1\n",[19,123975,123976],{},"将:1替换为你实际使用的显示编号。",[19,123978,123979],{},[393,123980],{"alt":395,"src":123981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,123983,123984],{},[393,123985],{"alt":395,"src":123986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[1099,123988,123990],{"id":123989},"_74-usb端口设置","7.4 USB端口设置",[19,123992,123993],{},[400,123994,123995],{},"首先先配置好权限",[416,123997,123999],{"className":118051,"code":123998,"language":118053,"meta":395,"style":395},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[422,124000,124001,124006,124019,124026,124031],{"__ignoreMap":395},[425,124002,124003],{"class":427,"line":428},[425,124004,124005],{"class":1216},"# 将用户权限提高\n",[425,124007,124008,124010,124012,124014,124017],{"class":427,"line":698},[425,124009,652],{"class":431},[425,124011,27563],{"class":435},[425,124013,27566],{"class":691},[425,124015,124016],{"class":435}," dialout",[425,124018,27571],{"class":701},[425,124020,124021,124023],{"class":427,"line":710},[425,124022,27590],{"class":431},[425,124024,124025],{"class":435}," dialout\n",[425,124027,124028],{"class":427,"line":721},[425,124029,124030],{"class":1216},"# 查看下面命令是否输出dialout（若输出才正常）\n",[425,124032,124033],{"class":427,"line":735},[425,124034,124035],{"class":431},"groups\n",[19,124037,124038],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[14,124040,124042],{"id":124041},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,124044,124045,124048],{},[400,124046,124047],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,124050,124051,124054],{},[400,124052,124053],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,124056,124057],{},[400,124058,124059],{},"流程如下：",[19,124061,124062],{},"（1）.查找设备idVendor和idProduct",[19,124064,124065,124066,124069],{},"接入两个USB设备，在终端调用指令",[422,124067,124068],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,124071,124072],{},[393,124073],{"alt":395,"src":124074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,124076,124077,124078,124081],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[422,124079,124080],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,124083,124084],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,124086,124087],{},"（2）.编写映射规则",[19,124089,124090,124091,124094],{},"在",[422,124092,124093],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[416,124096,124098],{"className":118051,"code":124097,"language":118053,"meta":395,"style":395},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[422,124099,124100],{"__ignoreMap":395},[425,124101,124102,124104,124106],{"class":427,"line":428},[425,124103,652],{"class":431},[425,124105,119338],{"class":435},[425,124107,124108],{"class":435}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,124110,124111],{},"输入如下内容：",[416,124113,124115],{"className":118051,"code":124114,"language":118053,"meta":395,"style":395},"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",[422,124116,124117,124147],{"__ignoreMap":395},[425,124118,124119,124122,124124,124127,124130,124133,124136,124138,124141,124144],{"class":427,"line":428},[425,124120,124121],{"class":701},"KERNEL",[425,124123,1204],{"class":1155},[425,124125,124126],{"class":435},"=\"ttyUSB*\",",[425,124128,124129],{"class":431}," ATTRS",[425,124131,124132],{"class":435},"{idVendor}==",[425,124134,124135],{"class":431},"\"10c4\"",[425,124137,1527],{"class":431},[425,124139,124140],{"class":435}," ATTRS{idProduct}==\"ea60\",",[425,124142,124143],{"class":435}," MODE:=\"0777\",",[425,124145,124146],{"class":435}," SYMLINK+=\"mylidar\"\n",[425,124148,124149,124151,124153,124155,124157,124159,124162,124164,124167,124169],{"class":427,"line":698},[425,124150,124121],{"class":701},[425,124152,1204],{"class":1155},[425,124154,124126],{"class":435},[425,124156,124129],{"class":431},[425,124158,124132],{"class":435},[425,124160,124161],{"class":431},"\"1a86\"",[425,124163,1527],{"class":431},[425,124165,124166],{"class":435}," ATTRS{idProduct}==\"7523\",",[425,124168,124143],{"class":435},[425,124170,124171],{"class":435}," SYMLINK+=\"mycar\"\n",[19,124173,124174],{},"代码解释：",[447,124176,124177,124180,124183,124186],{},[450,124178,124179],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[450,124181,124182],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[450,124184,124185],{},"SYMLINK是符号连接，即绑定的别名；",[450,124187,124188],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,124190,124191,124192,124195,124198],{},"***小提示：***",[993,124193,124194],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[422,124196,124197],{},"\u002Fetc\u002Fudev\u002Frule.d",[993,124199,124200],{},"目录即可。",[19,124202,124203],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,124205,124206],{},"（3）.使规则生效",[19,124208,124209],{},"在终端下输入如下指令：",[416,124211,124213],{"className":118051,"code":124212,"language":118053,"meta":395,"style":395},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[422,124214,124215,124220,124232,124243,124247,124252,124265],{"__ignoreMap":395},[425,124216,124217],{"class":427,"line":428},[425,124218,124219],{"class":1216},"# Ubuntu用下方命令\n",[425,124221,124222,124224,124226,124229],{"class":427,"line":698},[425,124223,652],{"class":431},[425,124225,120803],{"class":435},[425,124227,124228],{"class":435}," udev",[425,124230,124231],{"class":435}," reload\n",[425,124233,124234,124236,124238,124240],{"class":427,"line":710},[425,124235,652],{"class":431},[425,124237,120803],{"class":435},[425,124239,124228],{"class":435},[425,124241,124242],{"class":435}," restart\n",[425,124244,124245],{"class":427,"line":721},[425,124246,3400],{"emptyLinePlaceholder":1084},[425,124248,124249],{"class":427,"line":735},[425,124250,124251],{"class":1216},"#Fedora用下方命令\n",[425,124253,124254,124256,124259,124262],{"class":427,"line":743},[425,124255,652],{"class":431},[425,124257,124258],{"class":435}," udevadm",[425,124260,124261],{"class":435}," control",[425,124263,124264],{"class":691}," --reload\n",[425,124266,124267,124269,124271],{"class":427,"line":751},[425,124268,652],{"class":431},[425,124270,124258],{"class":435},[425,124272,124273],{"class":435}," trigger\n",[19,124275,124276],{},"再重新插拔设备即可。",[19,124278,124279],{},"（4）.测试",[19,124281,124282],{},"终端下输入如下指令",[416,124284,124286],{"className":118051,"code":124285,"language":118053,"meta":395,"style":395},"ll \u002Fdev | grep ttyUSB\n",[422,124287,124288],{"__ignoreMap":395},[425,124289,124290,124293,124296,124298,124300],{"class":427,"line":428},[425,124291,124292],{"class":431},"ll",[425,124294,124295],{"class":435}," \u002Fdev",[425,124297,26100],{"class":1155},[425,124299,30991],{"class":431},[425,124301,124302],{"class":435}," ttyUSB\n",[19,124304,124305],{},"运行结果如下：",[19,124307,124308],{},[393,124309],{"alt":395,"src":124310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,124312,124313,124314,124317],{},"也可以多次插拔USB设备，会发现设备端口",[422,124315,124316],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,124319,124320],{},[400,124321,118719],{},[19,124323,124324],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[14,124326,124328],{"id":124327},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,124330,124331,124333],{},[400,124332,124047],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,124335,124336,124338],{},[400,124337,124053],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,124340,124341],{},[400,124342,124059],{},[19,124344,124345],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,124347,124348],{},"调用如下指令查看第一台雷达的USB信息：",[416,124350,124352],{"className":118051,"code":124351,"language":118053,"meta":395,"style":395},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[422,124353,124354,124374],{"__ignoreMap":395},[425,124355,124356,124359,124361,124364,124367,124369,124371],{"class":427,"line":428},[425,124357,124358],{"class":431},"udevadm",[425,124360,70576],{"class":435},[425,124362,124363],{"class":691}," --attribute-walk",[425,124365,124366],{"class":691}," --name=\u002Fdev\u002FttyUSB0",[425,124368,26100],{"class":1155},[425,124370,30991],{"class":431},[425,124372,124373],{"class":435}," KERNELS\n",[425,124375,124376,124378,124380,124382,124385,124387,124389],{"class":427,"line":698},[425,124377,124358],{"class":431},[425,124379,70576],{"class":435},[425,124381,124363],{"class":691},[425,124383,124384],{"class":691}," --name=\u002Fdev\u002FttyACM0",[425,124386,26100],{"class":1155},[425,124388,30991],{"class":431},[425,124390,124373],{"class":435},[19,124392,124393],{},[393,124394],{"alt":395,"src":124395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,124397,124398],{},"调用如下指令查看第二台雷达的USB信息：",[416,124400,124402],{"className":118051,"code":124401,"language":118053,"meta":395,"style":395},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[422,124403,124404],{"__ignoreMap":395},[425,124405,124406,124408,124410,124412,124415,124417,124419],{"class":427,"line":428},[425,124407,124358],{"class":431},[425,124409,70576],{"class":435},[425,124411,124363],{"class":691},[425,124413,124414],{"class":691}," --name=\u002Fdev\u002FttyUSB1",[425,124416,26100],{"class":1155},[425,124418,30991],{"class":431},[425,124420,124373],{"class":435},[19,124422,124423,124424,124427,124428,124431,124432,124435],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[422,124425,124426],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[422,124429,124430],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[400,124433,124434],{},"唯一性标识","”。",[19,124437,124087],{},[19,124439,124090,124440,124442],{},[422,124441,124093],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[416,124444,124445],{"className":118051,"code":124097,"language":118053,"meta":395,"style":395},[422,124446,124447],{"__ignoreMap":395},[425,124448,124449,124451,124453],{"class":427,"line":428},[425,124450,652],{"class":431},[425,124452,119338],{"class":435},[425,124454,124108],{"class":435},[416,124456,124458],{"className":118051,"code":124457,"language":118053,"meta":395,"style":395},"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",[422,124459,124460,124489],{"__ignoreMap":395},[425,124461,124462,124464,124466,124468,124471,124473,124476,124479,124481,124484,124486],{"class":427,"line":428},[425,124463,124121],{"class":701},[425,124465,1204],{"class":1155},[425,124467,124126],{"class":435},[425,124469,124470],{"class":701}," KERNELS",[425,124472,1204],{"class":1155},[425,124474,124475],{"class":435},"=\"1-1.3:1.0\",",[425,124477,124478],{"class":431}," MODE:",[425,124480,1204],{"class":435},[425,124482,124483],{"class":431},"\"0777\"",[425,124485,1527],{"class":431},[425,124487,124488],{"class":435}," SYMLINK+=\"rplidar_front\"\n",[425,124490,124491,124493,124495,124497,124499,124501,124504,124506,124508,124510,124512],{"class":427,"line":698},[425,124492,124121],{"class":701},[425,124494,1204],{"class":1155},[425,124496,124126],{"class":435},[425,124498,124470],{"class":701},[425,124500,1204],{"class":1155},[425,124502,124503],{"class":435},"=\"1-1.4:1.0\",",[425,124505,124478],{"class":431},[425,124507,1204],{"class":435},[425,124509,124483],{"class":431},[425,124511,1527],{"class":431},[425,124513,124514],{"class":435}," SYMLINK+=\"rplidar_back\"\n",[19,124516,124206],{},[19,124518,124209],{},[416,124520,124521],{"className":118051,"code":124212,"language":118053,"meta":395,"style":395},[422,124522,124523,124527,124537,124547,124551,124555,124565],{"__ignoreMap":395},[425,124524,124525],{"class":427,"line":428},[425,124526,124219],{"class":1216},[425,124528,124529,124531,124533,124535],{"class":427,"line":698},[425,124530,652],{"class":431},[425,124532,120803],{"class":435},[425,124534,124228],{"class":435},[425,124536,124231],{"class":435},[425,124538,124539,124541,124543,124545],{"class":427,"line":710},[425,124540,652],{"class":431},[425,124542,120803],{"class":435},[425,124544,124228],{"class":435},[425,124546,124242],{"class":435},[425,124548,124549],{"class":427,"line":721},[425,124550,3400],{"emptyLinePlaceholder":1084},[425,124552,124553],{"class":427,"line":735},[425,124554,124251],{"class":1216},[425,124556,124557,124559,124561,124563],{"class":427,"line":743},[425,124558,652],{"class":431},[425,124560,124258],{"class":435},[425,124562,124261],{"class":435},[425,124564,124264],{"class":691},[425,124566,124567,124569,124571],{"class":427,"line":751},[425,124568,652],{"class":431},[425,124570,124258],{"class":435},[425,124572,124273],{"class":435},[19,124574,124276],{},[19,124576,124279],{},[19,124578,124282,124579,124582],{},[422,124580,124581],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,124584,124585],{},[393,124586],{"alt":395,"src":124587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,124589,124590],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,124592,124593,124595],{},[400,124594,118719],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[14,124597,124599],{"id":124598},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,124601,124602],{},"（1）.查看所连接的主机USB接口的信息",[416,124604,124606],{"className":118051,"code":124605,"language":118053,"meta":395,"style":395},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[422,124607,124608,124638],{"__ignoreMap":395},[425,124609,124610,124612,124614,124617,124619,124621,124623,124625,124628,124631,124633,124636],{"class":427,"line":428},[425,124611,124358],{"class":431},[425,124613,70576],{"class":435},[425,124615,124616],{"class":691}," -a",[425,124618,29971],{"class":691},[425,124620,1035],{"class":701},[425,124622,124358],{"class":431},[425,124624,70576],{"class":435},[425,124626,124627],{"class":691}," -q",[425,124629,124630],{"class":435}," path",[425,124632,26106],{"class":691},[425,124634,124635],{"class":435}," \u002Fdev\u002FttyACM0",[425,124637,1165],{"class":701},[425,124639,124640,124642,124644,124646,124648,124650,124652,124654,124656,124658,124660,124663],{"class":427,"line":698},[425,124641,124358],{"class":431},[425,124643,70576],{"class":435},[425,124645,124616],{"class":691},[425,124647,29971],{"class":691},[425,124649,1035],{"class":701},[425,124651,124358],{"class":431},[425,124653,70576],{"class":435},[425,124655,124627],{"class":691},[425,124657,124630],{"class":435},[425,124659,26106],{"class":691},[425,124661,124662],{"class":435}," \u002Fdev\u002FttyUSB0",[425,124664,1165],{"class":701},[19,124666,124667],{},[393,124668],{"alt":395,"src":124669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,124671,124672],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,124674,124087],{},[19,124676,124090,124677,124442],{},[422,124678,124093],{},[416,124680,124681],{"className":118051,"code":124097,"language":118053,"meta":395,"style":395},[422,124682,124683],{"__ignoreMap":395},[425,124684,124685,124687,124689],{"class":427,"line":428},[425,124686,652],{"class":431},[425,124688,119338],{"class":435},[425,124690,124108],{"class":435},[416,124692,124694],{"className":118051,"code":124693,"language":118053,"meta":395,"style":395},"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",[422,124695,124696,124724,124750],{"__ignoreMap":395},[425,124697,124698,124700,124702,124705,124707,124709,124711,124713,124716,124719,124721],{"class":427,"line":428},[425,124699,124121],{"class":701},[425,124701,1204],{"class":1155},[425,124703,124704],{"class":435},"=\"ttyACM*\",",[425,124706,124129],{"class":431},[425,124708,124132],{"class":435},[425,124710,124161],{"class":431},[425,124712,1527],{"class":431},[425,124714,124715],{"class":435}," ATTRS{idProduct}==\"55d4\",",[425,124717,124718],{"class":435}," ATTRS{serial}==\"0001\",",[425,124720,124143],{"class":435},[425,124722,124723],{"class":435}," SYMLINK+=\"ttyACM_MCU\"\n",[425,124725,124726,124728,124730,124732,124734,124736,124738,124740,124742,124745,124747],{"class":427,"line":698},[425,124727,124121],{"class":701},[425,124729,1204],{"class":1155},[425,124731,124704],{"class":435},[425,124733,124129],{"class":431},[425,124735,124132],{"class":435},[425,124737,124161],{"class":431},[425,124739,1527],{"class":431},[425,124741,124715],{"class":435},[425,124743,124744],{"class":435}," ATTRS{serial}==\"0002\",",[425,124746,124143],{"class":435},[425,124748,124749],{"class":435}," SYMLINK+=\"ttyACM_Lidar\"\n",[425,124751,124752,124754,124756,124758,124760,124762,124764,124766,124768,124770],{"class":427,"line":710},[425,124753,124121],{"class":701},[425,124755,1204],{"class":1155},[425,124757,124126],{"class":435},[425,124759,124129],{"class":431},[425,124761,124132],{"class":435},[425,124763,124161],{"class":431},[425,124765,1527],{"class":431},[425,124767,124166],{"class":435},[425,124769,124143],{"class":435},[425,124771,124772],{"class":435}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,124774,124206],{},[19,124776,124209],{},[416,124778,124779],{"className":118051,"code":124212,"language":118053,"meta":395,"style":395},[422,124780,124781,124785,124795,124805,124809,124813,124823],{"__ignoreMap":395},[425,124782,124783],{"class":427,"line":428},[425,124784,124219],{"class":1216},[425,124786,124787,124789,124791,124793],{"class":427,"line":698},[425,124788,652],{"class":431},[425,124790,120803],{"class":435},[425,124792,124228],{"class":435},[425,124794,124231],{"class":435},[425,124796,124797,124799,124801,124803],{"class":427,"line":710},[425,124798,652],{"class":431},[425,124800,120803],{"class":435},[425,124802,124228],{"class":435},[425,124804,124242],{"class":435},[425,124806,124807],{"class":427,"line":721},[425,124808,3400],{"emptyLinePlaceholder":1084},[425,124810,124811],{"class":427,"line":735},[425,124812,124251],{"class":1216},[425,124814,124815,124817,124819,124821],{"class":427,"line":743},[425,124816,652],{"class":431},[425,124818,124258],{"class":435},[425,124820,124261],{"class":435},[425,124822,124264],{"class":691},[425,124824,124825,124827,124829],{"class":427,"line":751},[425,124826,652],{"class":431},[425,124828,124258],{"class":435},[425,124830,124273],{"class":435},[19,124832,124833,124834],{},"再重新插拔设备即可，或者 ",[400,124835,124836],{},"直接重启系统。",[19,124838,124279],{},[19,124840,124282,124841,124582],{},[422,124842,124581],{},[19,124844,124845],{},[393,124846],{"alt":395,"src":124847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,124849,124590],{},[19,124851,124852,124854],{},[400,124853,118719],{}," 一些设备可能没有串口号等。",[14,124856,124858],{"id":124857},"_744-其他注意事项","7.4.4 其他注意事项",[19,124860,124861,124862,124864,124865,124868,124869,19407,124872,124875,124876,124878],{},"并非所有的USB设备端口号都是",[422,124863,124316],{},"的格式，比如Arduino的端口号可能是",[422,124866,124867],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[422,124870,124871],{},"videon",[422,124873,124874],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[422,124877,124871],{},"端口，绑定时需要关联的也是该接口。",[19,124880,124881,124882,124885,124886,124889,124890,124892,124893,124896,124897,124900,124901,124904,124905,124904,124908,124904,124911,998],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[422,124883,124884],{},"KERNEL==\"ttyUSB*\"","修改为",[422,124887,124888],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[422,124891,124884],{},"修改为类似于",[422,124894,124895],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[422,124898,124899],{},"video[0,2,4,6]","表示可以绑定的端口为",[422,124902,124903],{},"video0","或",[422,124906,124907],{},"video2",[422,124909,124910],{},"video4",[422,124912,124913],{},"video6",[1099,124915,124917],{"id":124916},"_75-挂载内网网页","7.5 挂载内网网页",[19,124919,124920],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,124922,124923],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,124925,124926],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,124928,124929,124930],{},"Termux 下载地址（F-Droid）：",[22,124931,124932],{"href":124932,"rel":124933},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[26],[19,124935,124936],{},"首先打开app后，先更新软件缓存：",[416,124938,124940],{"className":118051,"code":124939,"language":118053,"meta":395,"style":395},"pkg update\n",[422,124941,124942],{"__ignoreMap":395},[425,124943,124944,124947],{"class":427,"line":428},[425,124945,124946],{"class":431},"pkg",[425,124948,27232],{"class":435},[19,124950,124951],{},"然后换源",[416,124953,124955],{"className":118051,"code":124954,"language":118053,"meta":395,"style":395},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[422,124956,124957],{"__ignoreMap":395},[425,124958,124959,124961,124964],{"class":427,"line":428},[425,124960,123829],{"class":431},[425,124962,124963],{"class":701}," $PREFIX",[425,124965,124966],{"class":435},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,124968,124969],{},"将该文件内容替换为下面：",[416,124971,124973],{"className":118051,"code":124972,"language":118053,"meta":395,"style":395},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[422,124974,124975],{"__ignoreMap":395},[425,124976,124977,124980,124983,124986],{"class":427,"line":428},[425,124978,124979],{"class":431},"deb",[425,124981,124982],{"class":435}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[425,124984,124985],{"class":435}," stable",[425,124987,124988],{"class":435}," main\n",[447,124990,124991,125018],{},[450,124992,124993,124994,124996,124997],{},"如果你使用的是",[422,124995,123829],{},"编辑器：",[447,124998,124999,125006,125012],{},[450,125000,125001,125002,125005],{},"按 ",[422,125003,125004],{},"Ctrl+O"," 保存文件。",[450,125007,125001,125008,125011],{},[422,125009,125010],{},"Enter"," 确认文件名。",[450,125013,125001,125014,125017],{},[422,125015,125016],{},"Ctrl+X"," 退出编辑器。",[450,125019,124993,125020,124996,125023],{},[422,125021,125022],{},"vim",[447,125024,125025,125031],{},[450,125026,125001,125027,125030],{},[422,125028,125029],{},"Esc"," 退出编辑模式。",[450,125032,125033,125034,125036],{},"输入 ",[422,125035,119976],{}," 保存并退出。",[19,125038,125039],{},"接下来重新更新软件源：",[416,125041,125043],{"className":118051,"code":125042,"language":118053,"meta":395,"style":395},"pkg update && pkg upgrade\n",[422,125044,125045],{"__ignoreMap":395},[425,125046,125047,125049,125051,125053,125055],{"class":427,"line":428},[425,125048,124946],{"class":431},[425,125050,118102],{"class":435},[425,125052,27180],{"class":701},[425,125054,124946],{"class":431},[425,125056,118088],{"class":435},[19,125058,125059],{},"安装python：",[416,125061,125063],{"className":118051,"code":125062,"language":118053,"meta":395,"style":395},"pkg install python\n",[422,125064,125065],{"__ignoreMap":395},[425,125066,125067,125069,125071],{"class":427,"line":428},[425,125068,124946],{"class":431},[425,125070,24828],{"class":435},[425,125072,125073],{"class":435}," python\n",[19,125075,125076,27462],{},[400,125077,125078],{},"通过Termux访问设备存储",[19,125080,125081],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[416,125083,125085],{"className":118051,"code":125084,"language":118053,"meta":395,"style":395},"termux-setup-storage\n",[422,125086,125087],{"__ignoreMap":395},[425,125088,125089],{"class":427,"line":428},[425,125090,125084],{"class":431},[972,125092,125093],{},[450,125094,125095,27462,125098],{},[400,125096,125097],{},"进入HTML文件所在的目录",[972,125099,125100],{},[450,125101,125102,125103,125105],{},"使用",[422,125104,102031],{},"命令进入HTML文件所在的目录：",[416,125107,125109],{"className":118051,"code":125108,"language":118053,"meta":395,"style":395},"cd ~\u002Fyour_html_folder\n",[422,125110,125111],{"__ignoreMap":395},[425,125112,125113,125115],{"class":427,"line":428},[425,125114,102031],{"class":691},[425,125116,125117],{"class":435}," ~\u002Fyour_html_folder\n",[972,125119,125120],{"start":698},[450,125121,125122,27462,125125,125130,125147],{},[400,125123,125124],{},"启动Python HTTP服务器",[972,125126,125127],{},[450,125128,125129],{},"运行以下命令启动一个简单的HTTP服务器：",[416,125131,125133],{"className":118051,"code":125132,"language":118053,"meta":395,"style":395},"python -m http.server 8000\n",[422,125134,125135],{"__ignoreMap":395},[425,125136,125137,125139,125141,125144],{"class":427,"line":428},[425,125138,31135],{"class":431},[425,125140,101637],{"class":691},[425,125142,125143],{"class":435}," http.server",[425,125145,125146],{"class":691}," 8000\n",[972,125148,125149],{"start":710},[450,125150,125151,125152,125155],{},"这会在端口",[422,125153,125154],{},"8000","上启动一个Web服务器。",[447,125157,125158],{},[450,125159,125160],{},"启动服务器后，Termux会显示日志信息，例如：",[416,125162,125164],{"className":121571,"code":125163,"language":121573,"meta":121574,"style":395},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[422,125165,125166],{"__ignoreMap":395},[425,125167,125168],{"class":427,"line":428},[425,125169,125163],{},[447,125171,125172],{},[450,125173,125174],{},"这表示服务器已成功启动。",[19,125176,125177],{},[400,125178,125179],{},"在浏览器中访问HTML文件",[972,125181,125182],{},[450,125183,125184,27462,125187,125192],{},[400,125185,125186],{},"在同一设备上访问",[972,125188,125189],{},[450,125190,125191],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[416,125193,125196],{"className":125194,"code":125195,"language":72419,"meta":395,"style":395},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[422,125197,125198],{"__ignoreMap":395},[425,125199,125200,125203],{"class":427,"line":428},[425,125201,125202],{"class":701},"http:",[425,125204,125205],{"class":1216},"\u002F\u002Flocalhost:8000\n",[447,125207,125208],{},[450,125209,125210,125211,125214],{},"如果HTML文件中有",[422,125212,125213],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[1099,125216,125218],{"id":125217},"_76-linux重点知识","7.6 Linux重点知识",[14,125220,125222],{"id":125221},"_761-关于点的说明","7.6.1 关于点的说明",[19,125224,125225],{},[393,125226],{"alt":395,"src":125227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,125229,125230],{},"一点本目录，两点上目录",[14,125232,125234],{"id":125233},"_762-目录","7.6.2 目录",[22995,125236,125238],{"id":125237},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,125240,125241],{},[400,125242,125243],{},"\u002Fboot:",[19,125245,125246],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,125248,125249],{},[400,125250,125251],{},"\u002Fetc:",[19,125253,125254],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,125256,125257],{},[400,125258,125259],{},"\u002Flib：",[19,125261,125262],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,125264,125265],{},[400,125266,125267],{},"\u002Fsys:",[19,125269,125270],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22995,125272,125274],{"id":125273},"_7622-指令集合","7.6.2.2 指令集合",[19,125276,125277],{},[400,125278,125279],{},"\u002Fbin:",[19,125281,125282],{},"为二进制文件的缩写，存放最经常使用的命令",[19,125284,125285],{},[400,125286,125287],{},"\u002Fsbin:",[19,125289,125290],{},"只有系统管理员才能使用的程序和指令",[22995,125292,125294],{"id":125293},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,125296,125297],{},[400,125298,125299],{},"\u002Fdev:",[19,125301,125302],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,125304,125305],{},[400,125306,125307],{},"\u002Fmedia:",[19,125309,125310],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,125312,125313],{},[400,125314,125315],{},"\u002Fmnt:",[19,125317,125318],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22995,125320,125322],{"id":125321},"_7624-临时文件","7.6.2.4 临时文件",[19,125324,125325],{},[400,125326,125327],{},"\u002Frun:",[19,125329,125330],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,125332,125333],{},[400,125334,125335],{},"\u002Flost+found:",[19,125337,125338],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,125340,125341],{},[400,125342,125343],{},"\u002Ftmp:",[19,125345,125346],{},"这个目录是用来存放一些临时文件的",[22995,125348,125350],{"id":125349},"_7625-账户","7.6.2.5 账户",[19,125352,125353],{},[400,125354,125355],{},"\u002Froot：",[19,125357,125358],{},"系统管理员的用户主目录",[19,125360,125361,27462],{},[400,125362,125363],{},"\u002Fhome",[19,125365,125366],{},"用户的主目录，以用户的账号命名的",[19,125368,125369,27462],{},[400,125370,125371],{},"\u002Fusr",[19,125373,125374],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,125376,125377],{},[400,125378,125379],{},"\u002Fusr\u002Fbin：",[19,125381,125382],{},"系统用户使用的应用程序与指令",[19,125384,125385],{},[400,125386,125387],{},"\u002Fusr\u002Fsbin：",[19,125389,125390],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,125392,125393],{},[400,125394,125395],{},"\u002Fusr\u002Fsrc：",[19,125397,125398],{},"内核源代码默认的放置目录",[22995,125400,125402],{"id":125401},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,125404,125405],{},[400,125406,125407],{},"\u002Fvar：",[19,125409,125410],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,125412,125413],{},[400,125414,125415],{},"\u002Fproc:",[19,125417,125418,125419,125422],{},"管理 ",[400,125420,125421],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22995,125424,125426],{"id":125425},"_7627-扩展用的","7.6.2.7 扩展用的",[19,125428,125429],{},[400,125430,125431],{},"\u002Fopt:",[19,125433,125434],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,125436,125437],{},[400,125438,125439],{},"\u002Fsrv:",[19,125441,125442],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[14,125444,125446],{"id":125445},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,125448,125449],{},[393,125450],{"alt":395,"src":125451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,125453,125454],{},"windows-->linux:",[19,125456,125457],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,125459,125460],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,125462,125463],{},"linux传输文件到windows",[19,125465,125466],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[14,125468,125470],{"id":125469},"_764-易忘知识","7.6.4 易忘知识",[19,125472,125473],{},"操作系统内核查看",[416,125475,125476],{"className":118051,"code":122045,"language":118053,"meta":395,"style":395},[422,125477,125478],{"__ignoreMap":395},[425,125479,125480,125482],{"class":427,"line":428},[425,125481,70959],{"class":431},[425,125483,122054],{"class":691},[19,125485,125486],{},[393,125487],{"alt":395,"src":125488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,125490,125491],{},[393,125492],{"alt":395,"src":125493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[416,125495,125497],{"className":118051,"code":125496,"language":118053,"meta":395,"style":395},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[422,125498,125499,125511],{"__ignoreMap":395},[425,125500,125501,125503,125506,125509],{"class":427,"line":428},[425,125502,122262],{"class":431},[425,125504,125505],{"class":435}," mvtest",[425,125507,125508],{"class":435}," mvtest2",[425,125510,3674],{"class":701},[425,125512,125513],{"class":427,"line":698},[425,125514,125515],{"class":431},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,125517,125518],{},[393,125519],{"alt":395,"src":125520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,125522,125523],{},[393,125524],{"alt":395,"src":125525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,125527,125528,125529,125532],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[422,125530,125531],{},"du -a"," 可以快速查看磁盘使用细节。",[14,125534,125536],{"id":125535},"_765-vim","7.6.5 Vim",[19,125538,125539],{},[393,125540],{"alt":395,"src":125541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,125543,125544],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,125546,125547],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,125549,125550],{},[400,125551,125552],{},"1.命令模式：",[19,125554,125555],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,125557,125558],{},"x 删除当前光标所在处的字符",[19,125560,125561],{},"：切换到底线命令模式，以在最底一行输入命令",[19,125563,125564],{},"a 进行插入模式，在光标下一个位置输入文本",[19,125566,125567],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,125569,125570],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,125572,125573],{},"dd 剪切当前行",[19,125575,125576],{},"yy 复制当前行",[19,125578,125579],{},"p 粘贴剪贴板内容到光标下方",[19,125581,125582],{},"P 粘贴剪贴板内容到光标上方",[19,125584,125585],{},"u 撤销上一次操作",[19,125587,125588],{},"ctrl+r 重做上一次操作",[19,125590,125591,125593],{},[1943,125592],{}," 保存文件",[19,125595,125596,125598],{},[1793,125597],{}," 退出Vim编辑器",[19,125600,125601,125603],{},[1793,125602],{},"! 强制退出Vim编辑器，不保存修改",[19,125605,125606],{},[400,125607,125608],{},"2.输入模式：",[19,125610,125611],{},[393,125612],{"alt":395,"src":125613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,125615,125616],{},[400,125617,125618],{},"3.底线命令模式：",[19,125620,125621],{},[393,125622],{"alt":395,"src":125623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,125625,125626],{},"按下esc可以退出底线命令模式",[14,125628,125630],{"id":125629},"_766-apt","7.6.6 apt",[19,125632,125633],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[14,125635,125637],{"id":125636},"_767-home与root的区别","7.6.7 home与root的区别",[19,125639,125640],{},[393,125641],{"alt":395,"src":125642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,125644,125645],{},[393,125646],{"alt":395,"src":125647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,125649,125650],{},[393,125651],{"alt":395,"src":125652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,125654,125655],{},[393,125656],{"alt":395,"src":125657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[14,125659,125661],{"id":125660},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,125663,125664],{},[22,125665,125666],{"href":125666,"rel":125667},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[26],[972,125669,125670,125673],{},[450,125671,125672],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[450,125674,125675],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,125677,125678],{},[393,125679],{"alt":395,"src":125680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,125682,125683],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,125685,125686],{},[393,125687],{"alt":395,"src":125688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[416,125690,125692],{"className":121571,"code":125691,"language":121573,"meta":121574,"style":395},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[422,125693,125694,125699],{"__ignoreMap":395},[425,125695,125696],{"class":427,"line":428},[425,125697,125698],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[425,125700,125701],{"class":427,"line":698},[425,125702,125703],{},".\u002Fpycharm.sh\n",[19,125705,125706],{},"3️⃣创建.desktop文件",[19,125708,125709],{},[400,125710,125711],{},"原理：",[447,125713,125714,125724],{},[450,125715,125716,125717,125723],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[400,125718,125719,125722],{},[422,125720,125721],{},".desktop"," 文件"," 来识别应用。",[450,125725,125726,125728,125729],{},[422,125727,125721],{}," 文件相当于一个“应用注册表”，告诉系统：",[447,125730,125731,125734,125737,125740,125743],{},[450,125732,125733],{},"应用名字（Name）",[450,125735,125736],{},"图标（Icon）",[450,125738,125739],{},"执行命令（Exec）",[450,125741,125742],{},"分类（Categories）",[450,125744,125745],{},"是否需要终端（Terminal）",[416,125747,125749],{"className":121571,"code":125748,"language":121573,"meta":121574,"style":395},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[422,125750,125751,125756],{"__ignoreMap":395},[425,125752,125753],{"class":427,"line":428},[425,125754,125755],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[425,125757,125758],{"class":427,"line":698},[425,125759,125760],{},"nano pycharm.desktop\n",[19,125762,125763],{},"nano是一个命令行下的编辑器，也可以使用vim",[416,125765,125767],{"className":121571,"code":125766,"language":121573,"meta":121574,"style":395},"[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",[422,125768,125769,125774,125779,125784,125789,125794,125799,125804,125809,125814],{"__ignoreMap":395},[425,125770,125771],{"class":427,"line":428},[425,125772,125773],{},"[Desktop Entry]\n",[425,125775,125776],{"class":427,"line":698},[425,125777,125778],{},"Version=1.0\n",[425,125780,125781],{"class":427,"line":710},[425,125782,125783],{},"Type=Application\n",[425,125785,125786],{"class":427,"line":721},[425,125787,125788],{},"Name=PyCharm\n",[425,125790,125791],{"class":427,"line":735},[425,125792,125793],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[425,125795,125796],{"class":427,"line":743},[425,125797,125798],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[425,125800,125801],{"class":427,"line":751},[425,125802,125803],{},"Comment=JetBrains PyCharm IDE\n",[425,125805,125806],{"class":427,"line":759},[425,125807,125808],{},"Categories=Development;IDE;\n",[425,125810,125811],{"class":427,"line":770},[425,125812,125813],{},"Terminal=false\n",[425,125815,125816],{"class":427,"line":780},[425,125817,125818],{},"StartupWMClass=jetbrains-pycharm\n",[447,125820,125821,125827,125833,125839],{},[450,125822,125823,125826],{},[422,125824,125825],{},"Exec"," → 点击图标时执行的命令",[450,125828,125829,125832],{},[422,125830,125831],{},"Icon"," → 显示在菜单和桌面上的图标",[450,125834,125835,125838],{},[422,125836,125837],{},"Terminal=false"," → 不打开终端",[450,125840,125841,125844],{},[422,125842,125843],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125846,125847,125848],"blockquote",{},[19,125849,125850,125851,125853,125854],{},"可以理解成 ",[422,125852,125721],{}," 文件是 Linux 的 ",[400,125855,125856],{},"快捷方式配置文件",[19,125858,125859],{},"4️⃣设置可执行权限",[416,125861,125863],{"className":121571,"code":125862,"language":121573,"meta":121574,"style":395},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[422,125864,125865],{"__ignoreMap":395},[425,125866,125867],{"class":427,"line":428},[425,125868,125862],{},[19,125870,125871],{},"5️⃣桌面图标启动的话如下：",[416,125873,125875],{"className":121571,"code":125874,"language":121573,"meta":121574,"style":395},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[422,125876,125877,125882],{"__ignoreMap":395},[425,125878,125879],{"class":427,"line":428},[425,125880,125881],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[425,125883,125884],{"class":427,"line":698},[425,125885,125886],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[972,125888,125889],{"start":710},[450,125890,125891],{},"下载Appimage文件实现软件的安装",[19,125893,125894],{},"1️⃣先下载appimage",[19,125896,125897],{},[22,125898,125899],{"href":125899,"rel":125900},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[26],[19,125902,125903],{},[393,125904],{"alt":395,"src":125905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,125907,125908],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,125910,125911],{},[393,125912],{"alt":395,"src":125913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,125915,125916],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,125918,125919],{},[393,125920],{"alt":395,"src":125921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,125923,125924],{},[393,125925],{"alt":395,"src":125926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,125928,125929,125930,125933],{},"3️⃣给他们放在",[422,125931,125932],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,125935,125936],{},"4️⃣给软件执行权限",[416,125938,125940],{"className":121571,"code":125939,"language":121573,"meta":121574,"style":395},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[422,125941,125942,125947],{"__ignoreMap":395},[425,125943,125944],{"class":427,"line":428},[425,125945,125946],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[425,125948,125949],{"class":427,"line":698},[425,125950,125951],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,125953,125954],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[416,125956,125958],{"className":118051,"code":125957,"language":118053,"meta":395,"style":395},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[422,125959,125960,125967,125974,125980],{"__ignoreMap":395},[425,125961,125962,125964],{"class":427,"line":428},[425,125963,102031],{"class":691},[425,125965,125966],{"class":435}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[425,125968,125969,125971],{"class":427,"line":698},[425,125970,102038],{"class":431},[425,125972,125973],{"class":435}," .\u002Fqqmusic.desktop\n",[425,125975,125976,125978],{"class":427,"line":710},[425,125977,125022],{"class":431},[425,125979,125973],{"class":435},[425,125981,125982,125984,125986,125988],{"class":427,"line":721},[425,125983,652],{"class":431},[425,125985,25572],{"class":435},[425,125987,123888],{"class":435},[425,125989,125973],{"class":435},[19,125991,125992,125994],{},[422,125993,102038],{},"：一个 Linux 命令，主要功能是：",[447,125996,125997,126000],{},[450,125998,125999],{},"如果文件不存在，就创建一个新的空文件",[450,126001,126002],{},"如果文件已存在，就更新该文件的最后修改时间",[416,126004,126006],{"className":121571,"code":126005,"language":121573,"meta":121574,"style":395},"[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",[422,126007,126008,126012,126017,126022,126027,126031,126036],{"__ignoreMap":395},[425,126009,126010],{"class":427,"line":428},[425,126011,125773],{},[425,126013,126014],{"class":427,"line":698},[425,126015,126016],{},"Name=QQ音乐\n",[425,126018,126019],{"class":427,"line":710},[425,126020,126021],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[425,126023,126024],{"class":427,"line":721},[425,126025,126026],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[425,126028,126029],{"class":427,"line":735},[425,126030,125783],{},[425,126032,126033],{"class":427,"line":743},[425,126034,126035],{},"Categories=Audio;Music;Player;\n",[425,126037,126038],{"class":427,"line":751},[425,126039,126040],{},"Comment=QQ Music Client for Linux\n",[19,126042,126043],{},"将文件复制进去",[19,126045,126046],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,126048,126049],{},[393,126050],{"alt":395,"src":126051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,126053,126054],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,126056,126057],{},[393,126058],{"alt":395,"src":126059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,126061,126062,126063,126066,126067,126070],{},"如果你用的不是KDE，那么也可以直接修改",[422,126064,126065],{},"qqmuic.desktop","：在exec的末尾加上",[422,126068,126069],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[416,126072,126074],{"className":121571,"code":126073,"language":121573,"meta":121574,"style":395},"[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",[422,126075,126076,126080,126084,126089,126093,126097,126101],{"__ignoreMap":395},[425,126077,126078],{"class":427,"line":428},[425,126079,125773],{},[425,126081,126082],{"class":427,"line":698},[425,126083,126016],{},[425,126085,126086],{"class":427,"line":710},[425,126087,126088],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[425,126090,126091],{"class":427,"line":721},[425,126092,126026],{},[425,126094,126095],{"class":427,"line":735},[425,126096,125783],{},[425,126098,126099],{"class":427,"line":743},[425,126100,126035],{},[425,126102,126103],{"class":427,"line":751},[425,126104,126040],{},[19,126106,126107],{},[393,126108],{"alt":395,"src":126109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,126111,126112],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[416,126114,126116],{"className":121571,"code":126115,"language":121573,"meta":121574,"style":395},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[422,126117,126118],{"__ignoreMap":395},[425,126119,126120],{"class":427,"line":428},[425,126121,126115],{},[972,126123,126124],{"start":721},[450,126125,126126],{},"去Flathub上安装软件",[19,126128,126129],{},[22,126130,126131],{"href":126131,"rel":126132},"https:\u002F\u002Fflathub.org\u002F",[26],[19,126134,126135],{},"1️⃣去上面的官网搜索软件+下载软件",[19,126137,126138],{},[393,126139],{"alt":395,"src":126140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[416,126142,126144],{"className":121571,"code":126143,"language":121573,"meta":121574,"style":395},"flatpak install flathub com.obsproject.Studio\n",[422,126145,126146],{"__ignoreMap":395},[425,126147,126148],{"class":427,"line":428},[425,126149,126143],{},[19,126151,126152],{},[393,126153],{"alt":395,"src":126154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,126156,126157],{},"2️⃣运行软件",[19,126159,126160],{},"a.官方方式：",[19,126162,126163],{},[393,126164],{"alt":395,"src":126165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[416,126167,126168],{"className":121571,"code":126143,"language":121573,"meta":121574,"style":395},[422,126169,126170],{"__ignoreMap":395},[425,126171,126172],{"class":427,"line":428},[425,126173,126143],{},[19,126175,126176],{},"b.当普通软件运行：",[19,126178,126179],{},[393,126180],{"alt":395,"src":126181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,126183,126184],{},[393,126185],{"alt":395,"src":126186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[1074,126188,126189],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":395,"searchDepth":698,"depth":698,"links":126191},[126192,126193,126198,126199,126205,126206],{"id":122924,"depth":698,"text":122925},{"id":123266,"depth":698,"text":123267,"children":126194},[126195,126196,126197],{"id":123270,"depth":710,"text":123271},{"id":123337,"depth":710,"text":123338},{"id":123598,"depth":710,"text":123599},{"id":123751,"depth":698,"text":123752},{"id":123989,"depth":698,"text":123990,"children":126200},[126201,126202,126203,126204],{"id":124041,"depth":710,"text":124042},{"id":124327,"depth":710,"text":124328},{"id":124598,"depth":710,"text":124599},{"id":124857,"depth":710,"text":124858},{"id":124916,"depth":698,"text":124917},{"id":125217,"depth":698,"text":125218,"children":126207},[126208,126209,126210,126211,126212,126213,126214,126215],{"id":125221,"depth":710,"text":125222},{"id":125233,"depth":710,"text":125234},{"id":125445,"depth":710,"text":125446},{"id":125469,"depth":710,"text":125470},{"id":125535,"depth":710,"text":125536},{"id":125629,"depth":710,"text":125630},{"id":125636,"depth":710,"text":125637},{"id":125660,"depth":710,"text":125661},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122916,"description":24374},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":126222,"title":126223,"body":126224,"description":24374,"extension":1082,"meta":126228,"navigation":1084,"path":126229,"seo":126230,"stem":126231,"__hash__":126232},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":126225,"toc":126226},[],{"title":395,"searchDepth":698,"depth":698,"links":126227},[],{"category":31018},"\u002Fwiki\u002F2025-01-27-linux",{"title":126223,"description":24374},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":126234,"title":126235,"body":126236,"description":126240,"extension":1082,"meta":126631,"navigation":1084,"path":126632,"seo":126633,"stem":126634,"__hash__":126635},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":126237,"toc":126629},[126238,126241,126245,126262,126265,126318,126322,126324,126364,126373,126377,126380,126621,126626],[19,126239,126240],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,126242,126244],{"id":126243},"_1ubuntu环境配置","1.Ubuntu环境配置",[972,126246,126247,126250,126253,126256,126259],{},[450,126248,126249],{},"ubuntu环境换源",[450,126251,126252],{},"安装cuda",[450,126254,126255],{},"安装miniconda",[450,126257,126258],{},"安装pytorch",[450,126260,126261],{},"安装genesis",[19,126263,126264],{},"参考链接：",[416,126266,126268],{"className":418,"code":126267,"language":420,"meta":395,"style":395},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[422,126269,126270],{"__ignoreMap":395},[425,126271,126272,126275,126278,126281,126283,126286,126289,126291,126294,126297,126299,126302,126305,126307,126310,126313,126315],{"class":427,"line":428},[425,126273,126274],{"class":431},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[425,126276,126277],{"class":435},"=blogdetail",[425,126279,126280],{"class":701},"&sharetype",[425,126282,1204],{"class":1155},[425,126284,126285],{"class":435},"blogdetail",[425,126287,126288],{"class":701},"&sharerId",[425,126290,1204],{"class":1155},[425,126292,126293],{"class":435},"144728092",[425,126295,126296],{"class":701},"&sharerefer",[425,126298,1204],{"class":1155},[425,126300,126301],{"class":435},"PC",[425,126303,126304],{"class":701},"&sharesource",[425,126306,1204],{"class":1155},[425,126308,126309],{"class":435},"qq_69379513",[425,126311,126312],{"class":701},"&sharefrom",[425,126314,1204],{"class":1155},[425,126316,126317],{"class":435},"from_link\n",[10,126319,126321],{"id":126320},"_2genesis-报错issue","2.Genesis 报错issue",[19,126323,126264],{},[416,126325,126326],{"className":418,"code":126267,"language":420,"meta":395,"style":395},[422,126327,126328],{"__ignoreMap":395},[425,126329,126330,126332,126334,126336,126338,126340,126342,126344,126346,126348,126350,126352,126354,126356,126358,126360,126362],{"class":427,"line":428},[425,126331,126274],{"class":431},[425,126333,126277],{"class":435},[425,126335,126280],{"class":701},[425,126337,1204],{"class":1155},[425,126339,126285],{"class":435},[425,126341,126288],{"class":701},[425,126343,1204],{"class":1155},[425,126345,126293],{"class":435},[425,126347,126296],{"class":701},[425,126349,1204],{"class":1155},[425,126351,126301],{"class":435},[425,126353,126304],{"class":701},[425,126355,1204],{"class":1155},[425,126357,126309],{"class":435},[425,126359,126312],{"class":701},[425,126361,1204],{"class":1155},[425,126363,126317],{"class":435},[416,126365,126367],{"className":418,"code":126366,"language":420,"meta":395,"style":395},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[422,126368,126369],{"__ignoreMap":395},[425,126370,126371],{"class":427,"line":428},[425,126372,126366],{"class":431},[10,126374,126376],{"id":126375},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,126378,126379],{},"hello_robot.py",[416,126381,126383],{"className":31133,"code":126382,"language":31135,"meta":395,"style":395},"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",[422,126384,126385,126391,126406,126410,126422,126434,126438,126451,126455,126474,126484,126494,126508,126512,126516,126521,126525,126535,126542,126556,126563,126573,126578,126582,126600,126605,126609,126616],{"__ignoreMap":395},[425,126386,126387,126389],{"class":427,"line":428},[425,126388,31147],{"class":1155},[425,126390,46060],{"class":701},[425,126392,126393,126396,126399,126401,126403],{"class":427,"line":698},[425,126394,126395],{"class":701},"os.environ[",[425,126397,126398],{"class":435},"'PYOPENGL_PLATFORM'",[425,126400,5443],{"class":701},[425,126402,1204],{"class":1155},[425,126404,126405],{"class":435}," 'glx'\n",[425,126407,126408],{"class":427,"line":710},[425,126409,3400],{"emptyLinePlaceholder":1084},[425,126411,126412,126414,126417,126419],{"class":427,"line":721},[425,126413,31147],{"class":1155},[425,126415,126416],{"class":701}," genesis ",[425,126418,32138],{"class":1155},[425,126420,126421],{"class":701}," gs\n",[425,126423,126424,126426,126429,126431],{"class":427,"line":735},[425,126425,31492],{"class":1155},[425,126427,126428],{"class":701}," pynput ",[425,126430,31147],{"class":1155},[425,126432,126433],{"class":701}," keyboard\n",[425,126435,126436],{"class":427,"line":743},[425,126437,3400],{"emptyLinePlaceholder":1084},[425,126439,126440,126443,126446,126448],{"class":427,"line":751},[425,126441,126442],{"class":701},"gs.init(",[425,126444,126445],{"class":6216},"backend",[425,126447,1204],{"class":1155},[425,126449,126450],{"class":701},"gs.gpu)\n",[425,126452,126453],{"class":427,"line":759},[425,126454,3400],{"emptyLinePlaceholder":1084},[425,126456,126457,126460,126462,126465,126468,126470,126472],{"class":427,"line":770},[425,126458,126459],{"class":701},"scene ",[425,126461,1204],{"class":1155},[425,126463,126464],{"class":701}," gs.Scene(",[425,126466,126467],{"class":6216},"show_viewer",[425,126469,1204],{"class":1155},[425,126471,32231],{"class":691},[425,126473,1165],{"class":701},[425,126475,126476,126479,126481],{"class":427,"line":780},[425,126477,126478],{"class":701},"plane ",[425,126480,1204],{"class":1155},[425,126482,126483],{"class":701}," scene.add_entity(gs.morphs.Plane())\n",[425,126485,126486,126489,126491],{"class":427,"line":790},[425,126487,126488],{"class":701},"franka ",[425,126490,1204],{"class":1155},[425,126492,126493],{"class":701}," scene.add_entity(\n",[425,126495,126496,126499,126501,126503,126506],{"class":427,"line":805},[425,126497,126498],{"class":701},"    gs.morphs.MJCF(",[425,126500,46109],{"class":6216},[425,126502,1204],{"class":1155},[425,126504,126505],{"class":435},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[425,126507,38802],{"class":701},[425,126509,126510],{"class":427,"line":818},[425,126511,1165],{"class":701},[425,126513,126514],{"class":427,"line":831},[425,126515,3400],{"emptyLinePlaceholder":1084},[425,126517,126518],{"class":427,"line":841},[425,126519,126520],{"class":701},"scene.build()\n",[425,126522,126523],{"class":427,"line":852},[425,126524,3400],{"emptyLinePlaceholder":1084},[425,126526,126527,126529,126532],{"class":427,"line":862},[425,126528,32702],{"class":1155},[425,126530,126531],{"class":431}," on_press",[425,126533,126534],{"class":701},"(key):\n",[425,126536,126537,126540],{"class":427,"line":878},[425,126538,126539],{"class":1155},"    try",[425,126541,4739],{"class":701},[425,126543,126544,126546,126549,126551,126554],{"class":427,"line":914},[425,126545,3497],{"class":1155},[425,126547,126548],{"class":701}," key.char ",[425,126550,3949],{"class":1155},[425,126552,126553],{"class":435}," 'q'",[425,126555,4739],{"class":701},[425,126557,126558,126560],{"class":427,"line":943},[425,126559,16729],{"class":1155},[425,126561,126562],{"class":691}," False\n",[425,126564,126565,126568,126571],{"class":427,"line":956},[425,126566,126567],{"class":1155},"    except",[425,126569,126570],{"class":691}," AttributeError",[425,126572,4739],{"class":701},[425,126574,126575],{"class":427,"line":964},[425,126576,126577],{"class":1155},"        pass\n",[425,126579,126580],{"class":427,"line":2733},[425,126581,3400],{"emptyLinePlaceholder":1084},[425,126583,126584,126587,126589,126592,126595,126597],{"class":427,"line":2750},[425,126585,126586],{"class":701},"listener ",[425,126588,1204],{"class":1155},[425,126590,126591],{"class":701}," keyboard.Listener(",[425,126593,126594],{"class":6216},"on_press",[425,126596,1204],{"class":1155},[425,126598,126599],{"class":701},"on_press)\n",[425,126601,126602],{"class":427,"line":2755},[425,126603,126604],{"class":701},"listener.start()\n",[425,126606,126607],{"class":427,"line":2760},[425,126608,3400],{"emptyLinePlaceholder":1084},[425,126610,126611,126613],{"class":427,"line":2765},[425,126612,109418],{"class":1155},[425,126614,126615],{"class":701}," listener.running:\n",[425,126617,126618],{"class":427,"line":2779},[425,126619,126620],{"class":701},"    scene.step()\n",[19,126622,126623],{},[393,126624],{"alt":395,"src":126625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[1074,126627,126628],{},"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":395,"searchDepth":698,"depth":698,"links":126630},[],{"category":24376},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":126235,"description":126240},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126637,"title":126638,"body":126639,"description":24374,"extension":1082,"meta":126654,"navigation":1084,"path":126655,"seo":126656,"stem":126657,"__hash__":126658},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126640,"toc":126651},[126641,126644,126648],[10,126642,126638],{"id":126643},"_1-基础知识",[1099,126645,126647],{"id":126646},"_11-js的组成","1.1 js的组成",[19,126649,126650],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":395,"searchDepth":698,"depth":698,"links":126652},[126653],{"id":126646,"depth":698,"text":126647},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126638,"description":24374},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126660,"title":126661,"body":126662,"description":24374,"extension":1082,"meta":126801,"navigation":1084,"path":126802,"seo":126803,"stem":126804,"__hash__":126805},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126663,"toc":126789},[126664,126667,126671,126674,126678,126688,126692,126695,126698,126701,126705,126712,126718,126722,126728,126739,126743,126746,126750,126753,126757,126760,126764,126767,126771,126774,126777,126780,126783,126786],[10,126665,126661],{"id":126666},"_2-vscode必备内容",[1099,126668,126670],{"id":126669},"_21-标签分类","2.1 标签分类",[19,126672,126673],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[1099,126675,126677],{"id":126676},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,126679,126680,126681,126683,126684,126687],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[422,126682,1376],{}," 然后按 ",[422,126685,126686],{},"Tab","，快速自动生成基本结构。",[1099,126689,126691],{"id":126690},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,126693,126694],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,126696,126697],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,126699,126700],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[1099,126702,126704],{"id":126703},"_24-视图缩放","2.4 视图缩放",[19,126706,126707,126708,126711],{},"缩放视图 ",[422,126709,126710],{},"ctrl+"," 可实现代码增大。",[19,126713,126714,126717],{},[422,126715,126716],{},"ctrl-"," 可实现代码减小。",[1099,126719,126721],{"id":126720},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,126723,126724,126725,998],{},"VSCode 新建文件快捷键为 ",[422,126726,126727],{},"ctrl+N",[19,126729,126730,126731,126734,126735,126738],{},"保存快捷键为 ",[422,126732,126733],{},"ctrl+S","，将文本保存为 ",[422,126736,126737],{},".html"," 文件。",[1099,126740,126742],{"id":126741},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,126744,126745],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[1099,126747,126749],{"id":126748},"_27-vscode-icons","2.7 vscode-icons",[19,126751,126752],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[1099,126754,126756],{"id":126755},"_28-easy-less","2.8 Easy LESS",[19,126758,126759],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[1099,126761,126763],{"id":126762},"_29-会了吧插件","2.9 会了吧插件",[19,126765,126766],{},"会了吧插件可以展示代码中英语单词的意思。",[1099,126768,126770],{"id":126769},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,126772,126773],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,126775,126776],{},"②选定多个相同的单词:ctrl+D",[19,126778,126779],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,126781,126782],{},"④全局替换某些单词:ctrl+h",[19,126784,126785],{},"⑤快速定位到某一行:ctrl+g",[19,126787,126788],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":395,"searchDepth":698,"depth":698,"links":126790},[126791,126792,126793,126794,126795,126796,126797,126798,126799,126800],{"id":126669,"depth":698,"text":126670},{"id":126676,"depth":698,"text":126677},{"id":126690,"depth":698,"text":126691},{"id":126703,"depth":698,"text":126704},{"id":126720,"depth":698,"text":126721},{"id":126741,"depth":698,"text":126742},{"id":126748,"depth":698,"text":126749},{"id":126755,"depth":698,"text":126756},{"id":126762,"depth":698,"text":126763},{"id":126769,"depth":698,"text":126770},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126661,"description":24374},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126807,"title":126808,"body":126809,"description":24374,"extension":1082,"meta":126968,"navigation":1084,"path":126969,"seo":126970,"stem":126971,"__hash__":126972},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126810,"toc":126960},[126811,126814,126818,126828,126834,126840,126844,126853,126857,126862,126865,126868,126872,126875,126885,126894,126903,126912,126922,126929,126934,126939,126952],[10,126812,126808],{"id":126813},"_3-html文本与容器标签",[1099,126815,126817],{"id":126816},"_31-标题标签","3.1 标题标签",[19,126819,126820,126823,126824,126827],{},[422,126821,126822],{},"\u003Ch1>","我是一级标签",[422,126825,126826],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,126829,126830,126823,126832],{},[422,126831,126822],{},[422,126833,126826],{},[19,126835,124090,126836,126839],{},[422,126837,126838],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[1099,126841,126843],{"id":126842},"_32-段落标签","3.2 段落标签",[19,126845,126846,126849,126850],{},[422,126847,126848],{},"\u003Cp>","....",[422,126851,126852],{},"\u003C\u002Fp>",[1099,126854,126856],{"id":126855},"_33-换行标签","3.3 换行标签",[19,126858,126859],{},[422,126860,126861],{},"\u003Cbr \u002F>",[19,126863,126864],{},"具有强制换行的作用",[19,126866,126867],{},"单标签",[1099,126869,126871],{"id":126870},"_34-文本格式化标签","3.4 文本格式化标签",[19,126873,126874],{},"提供粗体、斜体和下划线等效果",[19,126876,126877,126878,83294,126881,126884],{},"加粗：",[422,126879,126880],{},"\u003Cstrong>...\u003C\u002Fstrong>",[422,126882,126883],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,126886,126887,126888,83294,126891,126884],{},"斜体：",[422,126889,126890],{},"\u003Cem>...\u003C\u002Fem>",[422,126892,126893],{},"\u003Ci>...\u003C\u002Fi>",[19,126895,126896,126897,83294,126900,126884],{},"删除线：",[422,126898,126899],{},"\u003Cdel>...\u003C\u002Fdel>",[422,126901,126902],{},"\u003Cs>...\u003C\u002Fs>",[19,126904,126905,126906,83294,126909,126884],{},"下划线：",[422,126907,126908],{},"\u003Cins>...\u003C\u002Fins>",[422,126910,126911],{},"\u003Cu>...\u003C\u002Fu>",[1099,126913,126915,126916,19407,126919,103448],{"id":126914},"_35-div和span标签","3.5 ",[422,126917,126918],{},"\u003Cdiv>",[422,126920,126921],{},"\u003Cspan>",[19,126923,126924,101773,126926,126928],{},[422,126925,126918],{},[422,126927,126921],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,126930,126931],{},[422,126932,126933],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,126935,126936],{},[422,126937,126938],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,126940,126941,126942,126944,126945,126947,126948,126951],{},"两者特点：①",[422,126943,126918],{}," 标签用来布局，但一行通常只放一个 ",[422,126946,126918],{},"。可以理解为一个大盒子，独占一行，在 ",[422,126949,126950],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,126953,78004,126954,126956,126957,126959],{},[422,126955,126921],{}," 标签也可用于布局，一行可以放多个 ",[422,126958,126921],{},"，可理解为小盒子。",{"title":395,"searchDepth":698,"depth":698,"links":126961},[126962,126963,126964,126965,126966],{"id":126816,"depth":698,"text":126817},{"id":126842,"depth":698,"text":126843},{"id":126855,"depth":698,"text":126856},{"id":126870,"depth":698,"text":126871},{"id":126914,"depth":698,"text":126967},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126808,"description":24374},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126974,"title":126975,"body":126976,"description":24374,"extension":1082,"meta":127173,"navigation":1084,"path":127174,"seo":127175,"stem":127176,"__hash__":127177},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126977,"toc":127165},[126978,126981,126985,126988,126994,127001,127007,127013,127016,127019,127022,127025,127028,127031,127034,127038,127041,127044,127047,127053,127059,127065,127072,127076,127082,127088,127091,127094,127100,127106,127112,127115,127118,127122,127125,127135,127141,127145,127154,127158,127161],[10,126979,126975],{"id":126980},"_4-html图像与链接",[1099,126982,126984],{"id":126983},"_41-图像标签","4.1 图像标签",[19,126986,126987],{},"（1）标签",[19,126989,126990,126993],{},[422,126991,126992],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,126995,126996,126997,127000],{},"src是",[422,126998,126999],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,127002,127003,127004],{},"alt:文本，替换文本。图像不能显示的文字 ",[422,127005,127006],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,127008,127009,127010],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[422,127011,127012],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,127014,127015],{},"width:像素，设置图像的宽度",[19,127017,127018],{},"height:像素，设置图像的高度",[19,127020,127021],{},"border：像素，设置图像的边框粗细",[19,127023,127024],{},"（2）图像标签属性的注意点：",[19,127026,127027],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,127029,127030],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,127032,127033],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[1099,127035,127037],{"id":127036},"_42-路径注意要点","4.2 路径注意要点：",[19,127039,127040],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,127042,127043],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,127045,127046],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,127048,127049,127050],{},"①同一级路径：图像文件位于HTML文件同一级，如",[422,127051,127052],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,127054,127055,127056],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[422,127057,127058],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,127060,127061,127062],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[422,127063,127064],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,127066,127067,127068,1400],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[22,127069,127070],{"href":127070,"rel":127071},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[26],[1099,127073,127075],{"id":127074},"_43-超链接标签","4.3 超链接标签",[19,127077,127078,127081],{},[422,127079,127080],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,127083,127084,127085],{},"①语法格式：",[422,127086,127087],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,127089,127090],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,127092,127093],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,127095,127096,127097],{},"③链接分类：外部链接：",[422,127098,127099],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,127101,127102,127103],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[422,127104,127105],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,127107,127108,127109],{},"空链接：如果当时没有确定链接目标时，",[422,127110,127111],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,127113,127114],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,127116,127117],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[1099,127119,127121],{"id":127120},"_44-锚点链接","4.4 锚点链接",[19,127123,127124],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,127126,127127,127128,127131,127132],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[422,127129,127130],{},"\u003Ca href=\"#two\">","第二级",[422,127133,127134],{},"\u003C\u002Fa>",[19,127136,127137,127138],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[422,127139,127140],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[1099,127142,127144],{"id":127143},"_45-注释标签","4.5 注释标签",[19,127146,127147,127150,127151],{},[422,127148,127149],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[422,127152,127153],{},"ctrl+\u002F",[1099,127155,127157],{"id":127156},"_46-特殊字符","4.6 特殊字符",[19,127159,127160],{},"可以实现添加多个空格",[393,127162],{"style":127163,"src":127164},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":395,"searchDepth":698,"depth":698,"links":127166},[127167,127168,127169,127170,127171,127172],{"id":126983,"depth":698,"text":126984},{"id":127036,"depth":698,"text":127037},{"id":127074,"depth":698,"text":127075},{"id":127120,"depth":698,"text":127121},{"id":127143,"depth":698,"text":127144},{"id":127156,"depth":698,"text":127157},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126975,"description":24374},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":127179,"title":127180,"body":127181,"description":24374,"extension":1082,"meta":127474,"navigation":1084,"path":127475,"seo":127476,"stem":127477,"__hash__":127478},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":127182,"toc":127465},[127183,127186,127190,127193,127196,127199,127202,127205,127208,127211,127214,127217,127237,127243,127247,127250,127253,127256,127259,127262,127265,127269,127272,127275,127278,127281,127294,127299,127302,127305,127320,127323,127326,127329,127332,127335,127339,127342,127349,127352,127355,127358,127361,127364,127370,127373,127376,127382,127385,127388,127391,127397,127400,127403,127417,127424,127427,127430,127437,127446,127449,127452,127455,127459,127462],[10,127184,127180],{"id":127185},"_5-html表格列表与表单",[1099,127187,127189],{"id":127188},"_51-表格标签","5.1 表格标签",[19,127191,127192],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,127194,127195],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,127197,127198],{},"②表格基本语法：",[393,127200],{"style":127163,"src":127201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,127203,127204],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[393,127206],{"style":127163,"src":127207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,127209,127210],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[393,127212],{"style":127163,"src":127213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,127215,127216],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,127218,127219,127222,127223,127225,127226,127229,127230,127232,127233,127236],{},[422,127220,127221],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[422,127224,127221],{},"内部必须拥有",[422,127227,127228],{},"\u003Ctr>","标签，一般位于第一行，",[422,127231,127221],{},"比",[422,127234,127235],{},"\u003Cth>","范围广",[19,127238,127239,127242],{},[422,127240,127241],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[1099,127244,127246],{"id":127245},"_52-合并单元格","5.2 合并单元格",[19,127248,127249],{},"（1）合并单元格方式：",[19,127251,127252],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,127254,127255],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,127257,127258],{},"（2）目标单元格：",[19,127260,127261],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,127263,127264],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[1099,127266,127268],{"id":127267},"_53-列表标签","5.3 列表标签",[19,127270,127271],{},"（1）分类：无序列表、有序列表、自定义列表",[19,127273,127274],{},"①无序列表：",[393,127276],{"style":127163,"src":127277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,127279,127280],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,127282,127283,127286,127287,127290,127291,127293],{},[422,127284,127285],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[422,127288,127289],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[422,127292,127285],{},"中输入其他标签或文字是不对的",[19,127295,127296,127298],{},[422,127297,127289],{},"之间相当于一个容器，可以容纳所有元素",[19,127300,127301],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,127303,127304],{},"在css中去除前边的小圆点采用如下代码:",[416,127306,127310],{"className":127307,"code":127308,"language":127309,"meta":395,"style":395},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[422,127311,127312],{"__ignoreMap":395},[425,127313,127314,127317],{"class":427,"line":428},[425,127315,127316],{"class":52055},"list-style",[425,127318,127319],{"class":701},": none;\n",[19,127321,127322],{},"②有序列表：",[393,127324],{"style":127163,"src":127325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,127327,127328],{},"③自定义列表：",[393,127330],{"style":127163,"src":127331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[393,127333],{"style":127163,"src":127334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[1099,127336,127338],{"id":127337},"_54-表单标签","5.4 表单标签",[19,127340,127341],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,127343,127344,127345,127348],{},"（1）表单域：包含单元素的区域，",[422,127346,127347],{},"\u003Cform>","标签可以实现信息的收集和传递。",[393,127350],{"style":127163,"src":127351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,127353,127354],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,127356,127357],{},"表单元素提交必须有name属性",[19,127359,127360],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,127362,127363],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,127365,77981,127366,127369],{},[422,127367,127368],{},"\u003Cinput>","输入表单元素",[393,127371],{"style":127163,"src":127372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[393,127374],{"style":127163,"src":127375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,127377,127378,127379],{},"单选按钮：",[422,127380,127381],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[393,127383],{"style":127163,"src":127384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,127386,127387],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[393,127389],{"style":127163,"src":127390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,127392,127393,127396],{},[400,127394,127395],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,127398,127399],{},"②select下拉表单元素：可以节约页面控件",[393,127401],{"style":127163,"src":127402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,127404,127405,978,127407,127410,127411,127413,127414,127416],{},[400,127406,1188],{},[422,127408,127409],{},"\u003Cselect>","中至少包含一对",[422,127412,103469],{},"；在",[422,127415,103469],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,127418,127419,127420,127423],{},"③",[422,127421,127422],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[393,127425],{"style":127163,"src":127426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,127428,127429],{},"3行20列",[1099,127431,127433,127434,103448],{"id":127432},"_55-lable标签","5.5 ",[422,127435,127436],{},"\u003Clable>",[19,127438,127439,127440,127442,127443,127445],{},"它不是表单标签，但常常与表单标签搭配使用，",[422,127441,127436],{},"标签用于绑定一个表单标签，当点击",[422,127444,127436],{},"标签内的文本",[19,127447,127448],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[393,127450],{"style":127163,"src":127451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[393,127453],{"style":127163,"src":127454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[1099,127456,127458],{"id":127457},"_56-实例","5.6 实例",[393,127460],{"style":127163,"src":127461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[1074,127463,127464],{},"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":395,"searchDepth":698,"depth":698,"links":127466},[127467,127468,127469,127470,127471,127473],{"id":127188,"depth":698,"text":127189},{"id":127245,"depth":698,"text":127246},{"id":127267,"depth":698,"text":127268},{"id":127337,"depth":698,"text":127338},{"id":127432,"depth":698,"text":127472},"5.5 \u003Clable>标签",{"id":127457,"depth":698,"text":127458},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":127180,"description":24374},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127480,"title":127481,"body":127482,"description":24374,"extension":1082,"meta":128031,"navigation":1084,"path":128032,"seo":128033,"stem":128034,"__hash__":128035},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127483,"toc":128006},[127484,127487,127491,127494,127497,127501,127504,127507,127510,127513,127516,127519,127522,127526,127529,127533,127536,127539,127542,127546,127549,127552,127555,127561,127564,127567,127570,127573,127576,127579,127582,127615,127619,127622,127625,127628,127632,127635,127638,127641,127644,127647,127651,127654,127657,127660,127664,127667,127671,127674,127678,127681,127686,127690,127693,127697,127700,127703,127706,127709,127736,127739,127743,127746,127749,127754,127757,127760,127764,127767,127772,127775,127778,127781,127785,127788,127791,127794,127798,127801,127804,127807,127811,127815,127818,127858,127861,127865,127872,127875,127879,127882,127928,127932,127935,127938,127941,127969,127973,127976,128003],[10,127485,127481],{"id":127486},"_6-css语法与文本样式",[1099,127488,127490],{"id":127489},"_61-css语法规范","6.1 css语法规范",[19,127492,127493],{},"由两部分组成，选择器及一条或多条声明",[393,127495],{"style":127163,"src":127496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,127498,127499],{},[400,127500,1188],{},[19,127502,127503],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,127505,127506],{},"②属性与属性值以“键值对”的形式出现",[19,127508,127509],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,127511,127512],{},"④属性和属性值之间用英文“;”分开",[393,127514],{"style":127163,"src":127515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[393,127517],{"style":127163,"src":127518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[393,127520],{"style":127163,"src":127521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[1099,127523,127525],{"id":127524},"_62-css选择器","6.2 css选择器",[19,127527,127528],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[14,127530,127532],{"id":127531},"_621-标签选择器","6.2.1 标签选择器",[19,127534,127535],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,127537,127538],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[393,127540],{"style":127163,"src":127541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[14,127543,127545],{"id":127544},"_622-类选择器","6.2.2 类选择器",[19,127547,127548],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,127550,127551],{},"②样例",[393,127553],{"style":127163,"src":127554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,127556,127557,127558,127560],{},"③ ",[400,127559,127395],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,127562,127563],{},"可以理解为给这个标签起了个名字，来表示；",[19,127565,127566],{},"长名称或词组可以使用横线来为选择器命名；",[19,127568,127569],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,127571,127572],{},"命名要有意义；",[393,127574],{"style":127163,"src":127575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,127577,127578],{},"类选择器也可以指定特殊的元素p.center{}",[19,127580,127581],{},"p.center和.center都对",[416,127583,127585],{"className":127307,"code":127584,"language":127309,"meta":395,"style":395},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[422,127586,127587,127592,127601,127611],{"__ignoreMap":395},[425,127588,127589],{"class":427,"line":428},[425,127590,127591],{"class":1216},"\u002F* 类选择器指定特殊元素 *\u002F\n",[425,127593,127594,127596,127599],{"class":427,"line":698},[425,127595,19],{"class":52055},[425,127597,127598],{"class":431},".center",[425,127600,16569],{"class":701},[425,127602,127603,127605,127607,127609],{"class":427,"line":710},[425,127604,71281],{"class":691},[425,127606,52192],{"class":701},[425,127608,52347],{"class":691},[425,127610,2307],{"class":701},[425,127612,127613],{"class":427,"line":721},[425,127614,2578],{"class":701},[14,127616,127618],{"id":127617},"_623-多类名使用","6.2.3 多类名使用",[19,127620,127621],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[393,127623],{"style":127163,"src":127624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,127626,127627],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[14,127629,127631],{"id":127630},"_624-id选择器","6.2.4 id选择器",[19,127633,127634],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,127636,127637],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[393,127639],{"style":127163,"src":127640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,127642,127643],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,127645,127646],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[14,127648,127650],{"id":127649},"_625-通配符选择器","6.2.5 通配符选择器",[19,127652,127653],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,127655,127656],{},"* {",[19,127658,127659],{},"color=\"red\"}",[14,127661,127663],{"id":127662},"_626-总结","6.2.6 总结",[393,127665],{"style":127163,"src":127666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[1099,127668,127670],{"id":127669},"_63-css字体属性","6.3 css字体属性",[19,127672,127673],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[14,127675,127677],{"id":127676},"_631-字体系列","6.3.1 字体系列",[19,127679,127680],{},"font-family: '宋体';",[19,127682,127683,127685],{},[400,127684,1188],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[14,127687,127689],{"id":127688},"_632-字体大小","6.3.2 字体大小",[19,127691,127692],{},"font-size: 20px",[19,127694,127695,27462],{},[400,127696,127395],{},[19,127698,127699],{},"①px（像素）大小是网页的最常用单位",[19,127701,127702],{},"②谷歌浏览器默认为16px",[19,127704,127705],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,127707,127708],{},"④可以给body指定整个页面的大小：会自动引用",[416,127710,127712],{"className":127307,"code":127711,"language":127309,"meta":395,"style":395},"body {\n  font-size: 16px;\n}\n",[422,127713,127714,127720,127732],{"__ignoreMap":395},[425,127715,127716,127718],{"class":427,"line":428},[425,127717,52555],{"class":52055},[425,127719,16569],{"class":701},[425,127721,127722,127724,127726,127728,127730],{"class":427,"line":698},[425,127723,71381],{"class":691},[425,127725,52192],{"class":701},[425,127727,1749],{"class":691},[425,127729,52247],{"class":1155},[425,127731,2307],{"class":701},[425,127733,127734],{"class":427,"line":710},[425,127735,2578],{"class":701},[19,127737,127738],{},"⑤标题标签比较特殊，需要单独指定大小",[14,127740,127742],{"id":127741},"_633-字体粗细","6.3.3 字体粗细",[19,127744,127745],{},"font-weight: bold;",[19,127747,127748],{},"font-weight: 100；",[19,127750,127751,127753],{},[400,127752,1188],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,127755,127756],{},"font-weight= 400;",[19,127758,127759],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[14,127761,127763],{"id":127762},"_634-文字样式","6.3.4 文字样式",[19,127765,127766],{},"font-style: normal；",[19,127768,127769,27462],{},[400,127770,127771],{},"属性值",[19,127773,127774],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,127776,127777],{},"②italic：浏览器会显示斜体的字体样式",[393,127779],{"style":127163,"src":127780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[14,127782,127784],{"id":127783},"_635-字体符合属性","6.3.5 字体符合属性",[393,127786],{"style":127163,"src":127787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[393,127789],{"style":127163,"src":127790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,127792,127793],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,127795,127796,27462],{},[400,127797,127395],{},[19,127799,127800],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,127802,127803],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,127805,127806],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[1099,127808,127810],{"id":127809},"_64-css-test文本属性","6.4 css test文本属性",[14,127812,127814],{"id":127813},"_641-文本颜色","6.4.1 文本颜色",[19,127816,127817],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[416,127819,127821],{"className":127307,"code":127820,"language":127309,"meta":395,"style":395},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[422,127822,127823,127828,127834,127844,127849,127854],{"__ignoreMap":395},[425,127824,127825],{"class":427,"line":428},[425,127826,127827],{"class":1216},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[425,127829,127830,127832],{"class":427,"line":698},[425,127831,19],{"class":52055},[425,127833,16569],{"class":701},[425,127835,127836,127838,127840,127842],{"class":427,"line":710},[425,127837,71660],{"class":691},[425,127839,52192],{"class":701},[425,127841,58176],{"class":691},[425,127843,2307],{"class":701},[425,127845,127846],{"class":427,"line":721},[425,127847,127848],{"class":1216},"  \u002F* color: #ff0000; *\u002F\n",[425,127850,127851],{"class":427,"line":735},[425,127852,127853],{"class":1216},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[425,127855,127856],{"class":427,"line":743},[425,127857,2578],{"class":701},[393,127859],{"style":127163,"src":127860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[14,127862,127864],{"id":127863},"_642-对齐文本","6.4.2 对齐文本",[19,127866,127867,127868,127871],{},"text-align属于用于设置元素内文本内容的 ",[400,127869,127870],{},"水平对齐"," 方式",[19,127873,127874],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[14,127876,127878],{"id":127877},"_643-装饰文本","6.4.3 装饰文本",[19,127880,127881],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[416,127883,127885],{"className":127307,"code":127884,"language":127309,"meta":395,"style":395},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[422,127886,127887,127893,127903,127907,127913,127924],{"__ignoreMap":395},[425,127888,127889,127891],{"class":427,"line":428},[425,127890,22],{"class":52055},[425,127892,16569],{"class":701},[425,127894,127895,127897,127899,127901],{"class":427,"line":698},[425,127896,71257],{"class":691},[425,127898,52192],{"class":701},[425,127900,55492],{"class":691},[425,127902,2307],{"class":701},[425,127904,127905],{"class":427,"line":710},[425,127906,2578],{"class":701},[425,127908,127909,127911],{"class":427,"line":721},[425,127910,19],{"class":52055},[425,127912,16569],{"class":701},[425,127914,127915,127917,127919,127922],{"class":427,"line":735},[425,127916,71257],{"class":691},[425,127918,52192],{"class":701},[425,127920,127921],{"class":691},"underline",[425,127923,2307],{"class":701},[425,127925,127926],{"class":427,"line":743},[425,127927,2578],{"class":701},[14,127929,127931],{"id":127930},"_644-文本缩进","6.4.4 文本缩进",[19,127933,127934],{},"实现文本的第一行首行缩进自己指定的距离",[19,127936,127937],{},"20px往右边走；-20px往左边走",[19,127939,127940],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[416,127942,127944],{"className":127307,"code":127943,"language":127309,"meta":395,"style":395},"p {\n  text-indent: 2em;\n}\n",[422,127945,127946,127952,127965],{"__ignoreMap":395},[425,127947,127948,127950],{"class":427,"line":428},[425,127949,19],{"class":52055},[425,127951,16569],{"class":701},[425,127953,127954,127957,127959,127961,127963],{"class":427,"line":698},[425,127955,127956],{"class":691},"  text-indent",[425,127958,52192],{"class":701},[425,127960,1235],{"class":691},[425,127962,993],{"class":1155},[425,127964,2307],{"class":701},[425,127966,127967],{"class":427,"line":710},[425,127968,2578],{"class":701},[14,127970,127972],{"id":127971},"_645-行间距","6.4.5 行间距",[19,127974,127975],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[416,127977,127979],{"className":127307,"code":127978,"language":127309,"meta":395,"style":395},"p {\n  line-height: 1.6;\n}\n",[422,127980,127981,127987,127999],{"__ignoreMap":395},[425,127982,127983,127985],{"class":427,"line":428},[425,127984,19],{"class":52055},[425,127986,16569],{"class":701},[425,127988,127989,127992,127994,127997],{"class":427,"line":698},[425,127990,127991],{"class":691},"  line-height",[425,127993,52192],{"class":701},[425,127995,127996],{"class":691},"1.6",[425,127998,2307],{"class":701},[425,128000,128001],{"class":427,"line":710},[425,128002,2578],{"class":701},[1074,128004,128005],{},"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":395,"searchDepth":698,"depth":698,"links":128007},[128008,128009,128017,128024],{"id":127489,"depth":698,"text":127490},{"id":127524,"depth":698,"text":127525,"children":128010},[128011,128012,128013,128014,128015,128016],{"id":127531,"depth":710,"text":127532},{"id":127544,"depth":710,"text":127545},{"id":127617,"depth":710,"text":127618},{"id":127630,"depth":710,"text":127631},{"id":127649,"depth":710,"text":127650},{"id":127662,"depth":710,"text":127663},{"id":127669,"depth":698,"text":127670,"children":128018},[128019,128020,128021,128022,128023],{"id":127676,"depth":710,"text":127677},{"id":127688,"depth":710,"text":127689},{"id":127741,"depth":710,"text":127742},{"id":127762,"depth":710,"text":127763},{"id":127783,"depth":710,"text":127784},{"id":127809,"depth":698,"text":127810,"children":128025},[128026,128027,128028,128029,128030],{"id":127813,"depth":710,"text":127814},{"id":127863,"depth":710,"text":127864},{"id":127877,"depth":710,"text":127878},{"id":127930,"depth":710,"text":127931},{"id":127971,"depth":710,"text":127972},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127481,"description":24374},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":128037,"title":128038,"body":128039,"description":24374,"extension":1082,"meta":128688,"navigation":1084,"path":128689,"seo":128690,"stem":128691,"__hash__":128692},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":128040,"toc":128669},[128041,128044,128048,128052,128112,128116,128126,128129,128132,128136,128161,128165,128168,128171,128174,128177,128180,128184,128187,128190,128232,128235,128261,128267,128270,128274,128278,128284,128287,128290,128293,128296,128299,128302,128347,128351,128354,128357,128361,128365,128394,128397,128402,128405,128408,128411,128414,128418,128422,128425,128427,128430,128434,128437,128441,128444,128447,128450,128454,128458,128464,128474,128477,128480,128483,128486,128489,128612,128620,128628,128666],[10,128042,128038],{"id":128043},"_7-css引入方式与选择器进阶",[1099,128045,128047],{"id":128046},"_71-css引入方式","7.1 css引入方式",[14,128049,128051],{"id":128050},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[416,128053,128057],{"className":128054,"code":128055,"language":128056,"meta":395,"style":395},"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",[422,128058,128059,128067,128074,128086,128099,128104],{"__ignoreMap":395},[425,128060,128061,128063,128065],{"class":427,"line":428},[425,128062,2057],{"class":701},[425,128064,1074],{"class":52055},[425,128066,52062],{"class":701},[425,128068,128069,128072],{"class":427,"line":698},[425,128070,128071],{"class":52055},"  h1",[425,128073,16569],{"class":701},[425,128075,128076,128079,128081,128084],{"class":427,"line":710},[425,128077,128078],{"class":691},"    color",[425,128080,52192],{"class":701},[425,128082,128083],{"class":691},"blue",[425,128085,2307],{"class":701},[425,128087,128088,128091,128093,128095,128097],{"class":427,"line":721},[425,128089,128090],{"class":691},"    font-size",[425,128092,52192],{"class":701},[425,128094,1948],{"class":691},[425,128096,52247],{"class":1155},[425,128098,2307],{"class":701},[425,128100,128101],{"class":427,"line":735},[425,128102,128103],{"class":701},"  }\n",[425,128105,128106,128108,128110],{"class":427,"line":743},[425,128107,52540],{"class":701},[425,128109,1074],{"class":52055},[425,128111,52062],{"class":701},[19,128113,128114,27462],{},[400,128115,127395],{},[19,128117,77981,128118,128121,128122,128125],{},[422,128119,128120],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[422,128123,128124],{},"\u003Chead>","标签中",[19,128127,128128],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,128130,128131],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[14,128133,128135],{"id":128134},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[416,128137,128139],{"className":128054,"code":128138,"language":128056,"meta":395,"style":395},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[422,128140,128141],{"__ignoreMap":395},[425,128142,128143,128145,128147,128149,128151,128154,128157,128159],{"class":427,"line":428},[425,128144,2057],{"class":701},[425,128146,19],{"class":52055},[425,128148,63381],{"class":431},[425,128150,1204],{"class":701},[425,128152,128153],{"class":435},"\"color: red; font-size: 16px;\"",[425,128155,128156],{"class":701},">这是一个段落\u003C\u002F",[425,128158,19],{"class":52055},[425,128160,52062],{"class":701},[19,128162,128163,27462],{},[400,128164,127395],{},[19,128166,128167],{},"①style其实就是标签的属性",[19,128169,128170],{},"②在双引号中间，写法要符合css规范",[19,128172,128173],{},"③可以控制当前的标签设置样式",[19,128175,128176],{},"④书写繁琐，简单时才用",[19,128178,128179],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[14,128181,128183],{"id":128182},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,128185,128186],{},"使用最多，单独建一个css文件，然后html引用",[19,128188,128189],{},"①css文件部分： style.css",[416,128191,128193],{"className":127307,"code":128192,"language":127309,"meta":395,"style":395},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[422,128194,128195,128200,128206,128216,128228],{"__ignoreMap":395},[425,128196,128197],{"class":427,"line":428},[425,128198,128199],{"class":1216},"\u002F* style.css *\u002F\n",[425,128201,128202,128204],{"class":427,"line":698},[425,128203,10],{"class":52055},[425,128205,16569],{"class":701},[425,128207,128208,128210,128212,128214],{"class":427,"line":710},[425,128209,71660],{"class":691},[425,128211,52192],{"class":701},[425,128213,128083],{"class":691},[425,128215,2307],{"class":701},[425,128217,128218,128220,128222,128224,128226],{"class":427,"line":721},[425,128219,71381],{"class":691},[425,128221,52192],{"class":701},[425,128223,1948],{"class":691},[425,128225,52247],{"class":1155},[425,128227,2307],{"class":701},[425,128229,128230],{"class":427,"line":735},[425,128231,2578],{"class":701},[19,128233,128234],{},"②html部分",[416,128236,128238],{"className":128054,"code":128237,"language":128056,"meta":395,"style":395},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[422,128239,128240],{"__ignoreMap":395},[425,128241,128242,128244,128246,128248,128250,128252,128254,128256,128259],{"class":427,"line":428},[425,128243,2057],{"class":701},[425,128245,69760],{"class":52055},[425,128247,69763],{"class":431},[425,128249,1204],{"class":701},[425,128251,69768],{"class":435},[425,128253,61812],{"class":431},[425,128255,1204],{"class":701},[425,128257,128258],{"class":435},"\"style.css\"",[425,128260,52062],{"class":701},[19,128262,128263,128266],{},[422,128264,128265],{},"\u003Chr>","水平线标签（但是不常用！）",[19,128268,128269],{},"ctrl+0回到页面原来大小",[1099,128271,128273],{"id":128272},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[14,128275,128277],{"id":128276},"_721-快速生成html","7.2.1 快速生成html",[19,128279,128280,128281],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[422,128282,128283],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,128285,128286],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,128288,128289],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,128291,128292],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,128294,128295],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,128297,128298],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,128300,128301],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[416,128303,128305],{"className":128054,"code":128304,"language":128056,"meta":395,"style":395},"\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",[422,128306,128307,128312,128317,128322,128327,128332,128337,128342],{"__ignoreMap":395},[425,128308,128309],{"class":427,"line":428},[425,128310,128311],{"class":1216},"\u003C!-- Emmet 语法示例 -->\n",[425,128313,128314],{"class":427,"line":698},[425,128315,128316],{"class":1216},"\u003C!-- div*3        → 生成3个div -->\n",[425,128318,128319],{"class":427,"line":710},[425,128320,128321],{"class":1216},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[425,128323,128324],{"class":427,"line":721},[425,128325,128326],{"class":1216},"\u003C!-- div+p        → 兄弟div和p -->\n",[425,128328,128329],{"class":427,"line":735},[425,128330,128331],{"class":1216},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[425,128333,128334],{"class":427,"line":743},[425,128335,128336],{"class":1216},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[425,128338,128339],{"class":427,"line":751},[425,128340,128341],{"class":1216},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[425,128343,128344],{"class":427,"line":759},[425,128345,128346],{"class":1216},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[14,128348,128350],{"id":128349},"_722-快速生成css","7.2.2 快速生成css",[19,128352,128353],{},"简写开头",[19,128355,128356],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[1099,128358,128360],{"id":128359},"_73-css复合选择器","7.3 css复合选择器",[14,128362,128364],{"id":128363},"_731-后代选择器","7.3.1 后代选择器",[416,128366,128368],{"className":127307,"code":128367,"language":127309,"meta":395,"style":395},".parent .child {\n  color: blue;\n}\n",[422,128369,128370,128380,128390],{"__ignoreMap":395},[425,128371,128372,128375,128378],{"class":427,"line":428},[425,128373,128374],{"class":431},".parent",[425,128376,128377],{"class":431}," .child",[425,128379,16569],{"class":701},[425,128381,128382,128384,128386,128388],{"class":427,"line":698},[425,128383,71660],{"class":691},[425,128385,52192],{"class":701},[425,128387,128083],{"class":691},[425,128389,2307],{"class":701},[425,128391,128392],{"class":427,"line":710},[425,128393,2578],{"class":701},[19,128395,128396],{},"元素1 元素2 {样式声明}",[19,128398,128399],{},[400,128400,128401],{},"注意点:",[19,128403,128404],{},"①元素1和元素2中间用空格隔开",[19,128406,128407],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,128409,128410],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,128412,128413],{},"④元素1和元素2可以是任意基础选择器",[14,128415,128417],{"id":128416},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,128419,128420],{},[400,128421,128401],{},[19,128423,128424],{},"①元素1和元素2中间用大于号隔开",[19,128426,128407],{},[19,128428,128429],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[14,128431,128433],{"id":128432},"_733-并集选择器","7.3.3 并集选择器",[19,128435,128436],{},"元素1，元素2 {样式声明}",[19,128438,128439],{},[400,128440,128401],{},[19,128442,128443],{},"①元素1和元素2中间用逗号隔开",[19,128445,128446],{},"②逗号可以理解为和的意思",[19,128448,128449],{},"③并集选择器通常用于集体声明",[14,128451,128453],{"id":128452},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,128455,128456],{},[400,128457,128401],{},[19,128459,128460,128461,128463],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69760,128462],{},"－:visited－:hover－:active。",[19,128465,128466,128467,128470,128471,26731],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[128468,128469],"hover",{}," 、 ",[128472,128473],"first-child",{},[19,128475,128476],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,128478,128479],{},"link对没访问的进行设置",[19,128481,128482],{},"vistied对已访问的进行改变",[19,128484,128485],{},"hover鼠标经过就会变",[19,128487,128488],{},"active常按(点)就会变",[416,128490,128492],{"className":127307,"code":128491,"language":127309,"meta":395,"style":395},"\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",[422,128493,128494,128499,128508,128518,128528,128532,128541,128552,128556,128564,128574,128584,128588,128597,128608],{"__ignoreMap":395},[425,128495,128496],{"class":427,"line":428},[425,128497,128498],{"class":1216},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[425,128500,128501,128503,128506],{"class":427,"line":698},[425,128502,22],{"class":52055},[425,128504,128505],{"class":431},":link",[425,128507,16569],{"class":701},[425,128509,128510,128512,128514,128516],{"class":427,"line":710},[425,128511,71660],{"class":691},[425,128513,52192],{"class":701},[425,128515,63124],{"class":691},[425,128517,2307],{"class":701},[425,128519,128520,128522,128524,128526],{"class":427,"line":721},[425,128521,71257],{"class":691},[425,128523,52192],{"class":701},[425,128525,55492],{"class":691},[425,128527,2307],{"class":701},[425,128529,128530],{"class":427,"line":735},[425,128531,2578],{"class":701},[425,128533,128534,128536,128539],{"class":427,"line":743},[425,128535,22],{"class":52055},[425,128537,128538],{"class":431},":visited",[425,128540,16569],{"class":701},[425,128542,128543,128545,128547,128550],{"class":427,"line":751},[425,128544,71660],{"class":691},[425,128546,52192],{"class":701},[425,128548,128549],{"class":691},"purple",[425,128551,2307],{"class":701},[425,128553,128554],{"class":427,"line":759},[425,128555,2578],{"class":701},[425,128557,128558,128560,128562],{"class":427,"line":770},[425,128559,22],{"class":52055},[425,128561,61695],{"class":431},[425,128563,16569],{"class":701},[425,128565,128566,128568,128570,128572],{"class":427,"line":780},[425,128567,71660],{"class":691},[425,128569,52192],{"class":701},[425,128571,55644],{"class":691},[425,128573,2307],{"class":701},[425,128575,128576,128578,128580,128582],{"class":427,"line":790},[425,128577,71257],{"class":691},[425,128579,52192],{"class":701},[425,128581,127921],{"class":691},[425,128583,2307],{"class":701},[425,128585,128586],{"class":427,"line":805},[425,128587,2578],{"class":701},[425,128589,128590,128592,128595],{"class":427,"line":818},[425,128591,22],{"class":52055},[425,128593,128594],{"class":431},":active",[425,128596,16569],{"class":701},[425,128598,128599,128601,128603,128606],{"class":427,"line":831},[425,128600,71660],{"class":691},[425,128602,52192],{"class":701},[425,128604,128605],{"class":691},"green",[425,128607,2307],{"class":701},[425,128609,128610],{"class":427,"line":841},[425,128611,2578],{"class":701},[14,128613,128615,128616,128619],{"id":128614},"_735-伪类选择器","7.3.5 ",[128617,128618],"focus",{},"伪类选择器",[19,128621,128622,128624,128625,128627],{},[128617,128623],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[422,128626,127368],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[416,128629,128631],{"className":127307,"code":128630,"language":127309,"meta":395,"style":395},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[422,128632,128633,128641,128652,128662],{"__ignoreMap":395},[425,128634,128635,128637,128639],{"class":427,"line":428},[425,128636,54576],{"class":52055},[425,128638,62655],{"class":431},[425,128640,16569],{"class":701},[425,128642,128643,128646,128648,128650],{"class":427,"line":698},[425,128644,128645],{"class":691},"  border-color",[425,128647,52192],{"class":701},[425,128649,55644],{"class":691},[425,128651,2307],{"class":701},[425,128653,128654,128656,128658,128660],{"class":427,"line":710},[425,128655,71553],{"class":691},[425,128657,52192],{"class":701},[425,128659,55492],{"class":691},[425,128661,2307],{"class":701},[425,128663,128664],{"class":427,"line":721},[425,128665,2578],{"class":701},[1074,128667,128668],{},"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":395,"searchDepth":698,"depth":698,"links":128670},[128671,128676,128680],{"id":128046,"depth":698,"text":128047,"children":128672},[128673,128674,128675],{"id":128050,"depth":710,"text":128051},{"id":128134,"depth":710,"text":128135},{"id":128182,"depth":710,"text":128183},{"id":128272,"depth":698,"text":128273,"children":128677},[128678,128679],{"id":128276,"depth":710,"text":128277},{"id":128349,"depth":710,"text":128350},{"id":128359,"depth":698,"text":128360,"children":128681},[128682,128683,128684,128685,128686],{"id":128363,"depth":710,"text":128364},{"id":128416,"depth":710,"text":128417},{"id":128432,"depth":710,"text":128433},{"id":128452,"depth":710,"text":128453},{"id":128614,"depth":710,"text":128687},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":128038,"description":24374},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128694,"title":128695,"body":128696,"description":24374,"extension":1082,"meta":130619,"navigation":1084,"path":130620,"seo":130621,"stem":130622,"__hash__":130623},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128697,"toc":130593},[128698,128701,128705,128714,128718,128744,128749,128752,128755,128758,128761,128765,128768,128778,128786,128790,128825,128830,128833,128836,128839,128842,128846,128849,128858,128862,128875,128880,128883,128886,128889,128893,128896,128900,128903,128958,128961,128992,128995,129049,129053,129056,129222,129345,129348,129351,129354,129357,129361,129364,129368,129371,129374,129378,129381,129412,129439,129467,129470,129474,129500,129543,129547,129641,129644,129671,129674,129677,129680,129683,129686,129689,129692,129695,129698,129702,129759,129786,129790,129838,129842,129883,129885,129888,129891,129894,129897,129901,129993,129996,129999,130002,130006,130129,130330,130334,130338,130341,130344,130347,130351,130354,130357,130382,130385,130388,130391,130394,130397,130401,130409,130471,130474,130532,130535,130538,130541,130544,130547,130550,130553,130590],[10,128699,128695],{"id":128700},"_8-css显示模式与背景特性",[1099,128702,128704],{"id":128703},"_81-css元素显示模式","8.1 css元素显示模式",[19,128706,128707,128708,128710,128711,128713],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[422,128709,126918],{},"自己占一行，比如一行可以放多个",[422,128712,126921],{},"，HTML 元素一般分为块元素和行内元素两种类型",[14,128715,128717],{"id":128716},"_811-块元素","8.1.1 块元素",[19,128719,128720,128721,128723,128724,1362,128727,1362,128729,1362,128731,1362,128734,1362,128737,128740,128741,128743],{},"常见的块元素有",[422,128722,126822],{},"~",[422,128725,128726],{},"\u003Ch6>",[422,128728,126848],{},[422,128730,126918],{},[422,128732,128733],{},"\u003Cul>",[422,128735,128736],{},"\u003Col>",[422,128738,128739],{},"\u003Cli>","等，其中 ",[422,128742,126918],{}," 标签是最典型的块元素",[19,128745,128746],{},[400,128747,128748],{},"块级元素的特点：",[19,128750,128751],{},"① 比较霸道，自己独占一行。",[19,128753,128754],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,128756,128757],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,128759,128760],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,128762,128763],{},[400,128764,1188],{},[19,128766,128767],{},"①文字类的元素内不能使用块级元素",[19,128769,78004,128770,128772,128773,128775,128776],{},[422,128771,126848],{}," 标签主要用于存放文字，因此 ",[422,128774,126848],{}," 里面不能放块级元素，特别是不能放",[422,128777,126918],{},[19,128779,128780,128781,128723,128783,128785],{},"⑥同理， ",[422,128782,126822],{},[422,128784,128726],{},"等都是文字类块级标签，里面也不能放其他块级元素",[14,128787,128789],{"id":128788},"_812-行内元素","8.1.2 行内元素",[19,128791,128792,128793,1362,128795,1362,128798,1362,128801,1362,128804,1362,128807,1362,128810,1362,128813,1362,128816,1362,128819,128821,128822,128824],{},"常见的行内元素有 ",[422,128794,127080],{},[422,128796,128797],{},"\u003Cstrong>",[422,128799,128800],{},"\u003Cb>",[422,128802,128803],{},"\u003Cem>",[422,128805,128806],{},"\u003Ci>",[422,128808,128809],{},"\u003Cdel>",[422,128811,128812],{},"\u003Cs>",[422,128814,128815],{},"\u003Cins>",[422,128817,128818],{},"\u003Cu>",[422,128820,126921],{}," 等，其中 ",[422,128823,126921],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,128826,128827],{},[400,128828,128829],{},"特点：",[19,128831,128832],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,128834,128835],{},"② 高、宽直接设置是无效的。",[19,128837,128838],{},"③ 默认宽度就是它本身内容的宽度。",[19,128840,128841],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,128843,128844],{},[400,128845,1188],{},[19,128847,128848],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,128850,128851,128852,128854,128855,128857],{},"②特殊情况链接 ",[422,128853,127080],{}," 里面可以放块级元素，但是给 ",[422,128856,127080],{}," 转换一下块级模式最安全",[14,128859,128861],{"id":128860},"_813-行内块元素","8.1.3 行内块元素",[19,128863,128864,128865,1362,128868,1362,128871,128874],{},"在行内元素中有几个特殊的标签 —— ",[422,128866,128867],{},"\u003Cimg \u002F>",[422,128869,128870],{},"\u003Cinput \u002F>",[422,128872,128873],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,128876,128877],{},[400,128878,128879],{},"行内块元素的特点：",[19,128881,128882],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,128884,128885],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,128887,128888],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[14,128890,128892],{"id":128891},"_814-总结","8.1.4 总结",[393,128894],{"style":127163,"src":128895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[14,128897,128899],{"id":128898},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,128901,128902],{},"①转换为块元素：display:block;",[416,128904,128906],{"className":127307,"code":128905,"language":127309,"meta":395,"style":395},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[422,128907,128908,128913,128919,128930,128942,128954],{"__ignoreMap":395},[425,128909,128910],{"class":427,"line":428},[425,128911,128912],{"class":1216},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[425,128914,128915,128917],{"class":427,"line":698},[425,128916,22],{"class":52055},[425,128918,16569],{"class":701},[425,128920,128921,128924,128926,128928],{"class":427,"line":710},[425,128922,128923],{"class":691},"  display",[425,128925,52192],{"class":701},[425,128927,61624],{"class":691},[425,128929,2307],{"class":701},[425,128931,128932,128934,128936,128938,128940],{"class":427,"line":721},[425,128933,71323],{"class":691},[425,128935,52192],{"class":701},[425,128937,1460],{"class":691},[425,128939,52247],{"class":1155},[425,128941,2307],{"class":701},[425,128943,128944,128946,128948,128950,128952],{"class":427,"line":735},[425,128945,71543],{"class":691},[425,128947,52192],{"class":701},[425,128949,1550],{"class":691},[425,128951,52247],{"class":1155},[425,128953,2307],{"class":701},[425,128955,128956],{"class":427,"line":743},[425,128957,2578],{"class":701},[19,128959,128960],{},"②转换为行内元素：display:inline;",[416,128962,128964],{"className":127307,"code":128963,"language":127309,"meta":395,"style":395},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[422,128965,128966,128971,128977,128988],{"__ignoreMap":395},[425,128967,128968],{"class":427,"line":428},[425,128969,128970],{"class":1216},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[425,128972,128973,128975],{"class":427,"line":698},[425,128974,52366],{"class":52055},[425,128976,16569],{"class":701},[425,128978,128979,128981,128983,128986],{"class":427,"line":710},[425,128980,128923],{"class":691},[425,128982,52192],{"class":701},[425,128984,128985],{"class":691},"inline",[425,128987,2307],{"class":701},[425,128989,128990],{"class":427,"line":721},[425,128991,2578],{"class":701},[19,128993,128994],{},"③转换为行内块：display:inline-block;",[416,128996,128998],{"className":127307,"code":128997,"language":127309,"meta":395,"style":395},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[422,128999,129000,129005,129011,129021,129033,129045],{"__ignoreMap":395},[425,129001,129002],{"class":427,"line":428},[425,129003,129004],{"class":1216},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[425,129006,129007,129009],{"class":427,"line":698},[425,129008,425],{"class":52055},[425,129010,16569],{"class":701},[425,129012,129013,129015,129017,129019],{"class":427,"line":710},[425,129014,128923],{"class":691},[425,129016,52192],{"class":701},[425,129018,73138],{"class":691},[425,129020,2307],{"class":701},[425,129022,129023,129025,129027,129029,129031],{"class":427,"line":721},[425,129024,71323],{"class":691},[425,129026,52192],{"class":701},[425,129028,1760],{"class":691},[425,129030,52247],{"class":1155},[425,129032,2307],{"class":701},[425,129034,129035,129037,129039,129041,129043],{"class":427,"line":735},[425,129036,71543],{"class":691},[425,129038,52192],{"class":701},[425,129040,2098],{"class":691},[425,129042,52247],{"class":1155},[425,129044,2307],{"class":701},[425,129046,129047],{"class":427,"line":743},[425,129048,2578],{"class":701},[14,129050,129052],{"id":129051},"_816-小米侧边栏","8.1.6 小米侧边栏",[393,129054],{"style":127163,"src":129055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[416,129057,129059],{"className":128054,"code":129058,"language":128056,"meta":395,"style":395},"\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",[422,129060,129061,129066,129081,129100,129119,129138,129157,129176,129195,129214],{"__ignoreMap":395},[425,129062,129063],{"class":427,"line":428},[425,129064,129065],{"class":1216},"\u003C!-- 小米侧边栏案例 -->\n",[425,129067,129068,129070,129072,129074,129076,129079],{"class":427,"line":698},[425,129069,2057],{"class":701},[425,129071,52366],{"class":52055},[425,129073,54241],{"class":431},[425,129075,1204],{"class":701},[425,129077,129078],{"class":435},"\"sidebar\"",[425,129080,52062],{"class":701},[425,129082,129083,129085,129087,129089,129091,129093,129096,129098],{"class":427,"line":710},[425,129084,52899],{"class":701},[425,129086,22],{"class":52055},[425,129088,61812],{"class":431},[425,129090,1204],{"class":701},[425,129092,61817],{"class":435},[425,129094,129095],{"class":701},">手机 电话卡\u003C\u002F",[425,129097,22],{"class":52055},[425,129099,52062],{"class":701},[425,129101,129102,129104,129106,129108,129110,129112,129115,129117],{"class":427,"line":721},[425,129103,52899],{"class":701},[425,129105,22],{"class":52055},[425,129107,61812],{"class":431},[425,129109,1204],{"class":701},[425,129111,61817],{"class":435},[425,129113,129114],{"class":701},">电视 盒子\u003C\u002F",[425,129116,22],{"class":52055},[425,129118,52062],{"class":701},[425,129120,129121,129123,129125,129127,129129,129131,129134,129136],{"class":427,"line":735},[425,129122,52899],{"class":701},[425,129124,22],{"class":52055},[425,129126,61812],{"class":431},[425,129128,1204],{"class":701},[425,129130,61817],{"class":435},[425,129132,129133],{"class":701},">笔记本 平板\u003C\u002F",[425,129135,22],{"class":52055},[425,129137,52062],{"class":701},[425,129139,129140,129142,129144,129146,129148,129150,129153,129155],{"class":427,"line":743},[425,129141,52899],{"class":701},[425,129143,22],{"class":52055},[425,129145,61812],{"class":431},[425,129147,1204],{"class":701},[425,129149,61817],{"class":435},[425,129151,129152],{"class":701},">出行 穿戴\u003C\u002F",[425,129154,22],{"class":52055},[425,129156,52062],{"class":701},[425,129158,129159,129161,129163,129165,129167,129169,129172,129174],{"class":427,"line":751},[425,129160,52899],{"class":701},[425,129162,22],{"class":52055},[425,129164,61812],{"class":431},[425,129166,1204],{"class":701},[425,129168,61817],{"class":435},[425,129170,129171],{"class":701},">智能 路由器\u003C\u002F",[425,129173,22],{"class":52055},[425,129175,52062],{"class":701},[425,129177,129178,129180,129182,129184,129186,129188,129191,129193],{"class":427,"line":759},[425,129179,52899],{"class":701},[425,129181,22],{"class":52055},[425,129183,61812],{"class":431},[425,129185,1204],{"class":701},[425,129187,61817],{"class":435},[425,129189,129190],{"class":701},">健康 儿童\u003C\u002F",[425,129192,22],{"class":52055},[425,129194,52062],{"class":701},[425,129196,129197,129199,129201,129203,129205,129207,129210,129212],{"class":427,"line":770},[425,129198,52899],{"class":701},[425,129200,22],{"class":52055},[425,129202,61812],{"class":431},[425,129204,1204],{"class":701},[425,129206,61817],{"class":435},[425,129208,129209],{"class":701},">耳机 音响\u003C\u002F",[425,129211,22],{"class":52055},[425,129213,52062],{"class":701},[425,129215,129216,129218,129220],{"class":427,"line":780},[425,129217,52540],{"class":701},[425,129219,52366],{"class":52055},[425,129221,52062],{"class":701},[416,129223,129225],{"className":127307,"code":129224,"language":127309,"meta":395,"style":395},".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",[422,129226,129227,129236,129246,129259,129271,129283,129295,129305,129316,129320,129330,129341],{"__ignoreMap":395},[425,129228,129229,129232,129234],{"class":427,"line":428},[425,129230,129231],{"class":431},".sidebar",[425,129233,2412],{"class":52055},[425,129235,16569],{"class":701},[425,129237,129238,129240,129242,129244],{"class":427,"line":698},[425,129239,128923],{"class":691},[425,129241,52192],{"class":701},[425,129243,61624],{"class":691},[425,129245,2307],{"class":701},[425,129247,129248,129250,129252,129255,129257],{"class":427,"line":710},[425,129249,71323],{"class":691},[425,129251,52192],{"class":701},[425,129253,129254],{"class":691},"234",[425,129256,52247],{"class":1155},[425,129258,2307],{"class":701},[425,129260,129261,129263,129265,129267,129269],{"class":427,"line":721},[425,129262,71543],{"class":691},[425,129264,52192],{"class":701},[425,129266,1600],{"class":691},[425,129268,52247],{"class":1155},[425,129270,2307],{"class":701},[425,129272,129273,129275,129277,129279,129281],{"class":427,"line":735},[425,129274,127991],{"class":691},[425,129276,52192],{"class":701},[425,129278,1600],{"class":691},[425,129280,52247],{"class":1155},[425,129282,2307],{"class":701},[425,129284,129285,129287,129289,129291,129293],{"class":427,"line":743},[425,129286,71578],{"class":691},[425,129288,52192],{"class":701},[425,129290,2098],{"class":691},[425,129292,52247],{"class":1155},[425,129294,2307],{"class":701},[425,129296,129297,129299,129301,129303],{"class":427,"line":751},[425,129298,71660],{"class":691},[425,129300,52192],{"class":701},[425,129302,61597],{"class":691},[425,129304,2307],{"class":701},[425,129306,129307,129309,129311,129314],{"class":427,"line":759},[425,129308,71633],{"class":691},[425,129310,52192],{"class":701},[425,129312,129313],{"class":691},"#55585a",[425,129315,2307],{"class":701},[425,129317,129318],{"class":427,"line":770},[425,129319,2578],{"class":701},[425,129321,129322,129324,129326,129328],{"class":427,"line":780},[425,129323,129231],{"class":431},[425,129325,2412],{"class":52055},[425,129327,61695],{"class":431},[425,129329,16569],{"class":701},[425,129331,129332,129334,129336,129339],{"class":427,"line":790},[425,129333,71633],{"class":691},[425,129335,52192],{"class":701},[425,129337,129338],{"class":691},"#ff6700",[425,129340,2307],{"class":701},[425,129342,129343],{"class":427,"line":805},[425,129344,2578],{"class":701},[393,129346],{"style":127163,"src":129347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,129349,129350],{},"行高=盒子高度：实现文字的垂直居中",[19,129352,129353],{},"原理讲解：",[393,129355],{"style":127163,"src":129356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[1099,129358,129360],{"id":129359},"_82-css背景","8.2 css背景",[19,129362,129363],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[14,129365,129367],{"id":129366},"_821-背景颜色","8.2.1 背景颜色",[19,129369,129370],{},"background-color:颜色值;",[19,129372,129373],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[14,129375,129377],{"id":129376},"_822-背景图片","8.2.2 背景图片",[19,129379,129380],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[416,129382,129384],{"className":127307,"code":129383,"language":127309,"meta":395,"style":395},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[422,129385,129386,129392,129408],{"__ignoreMap":395},[425,129387,129388,129390],{"class":427,"line":428},[425,129389,52366],{"class":52055},[425,129391,16569],{"class":701},[425,129393,129394,129397,129399,129401,129403,129406],{"class":427,"line":698},[425,129395,129396],{"class":691},"  background-image",[425,129398,52192],{"class":701},[425,129400,62481],{"class":691},[425,129402,1159],{"class":701},[425,129404,129405],{"class":6216},"images\u002Fbg.png",[425,129407,3719],{"class":701},[425,129409,129410],{"class":427,"line":710},[425,129411,2578],{"class":701},[35,129413,129414,129423],{},[38,129415,129416],{},[41,129417,129418,129421],{},[44,129419,129420],{"align":46},"参数值",[44,129422,103451],{"align":46},[55,129424,129425,129432],{},[41,129426,129427,129429],{},[60,129428,55492],{"align":46},[60,129430,129431],{"align":46},"无背景图（默认的）",[41,129433,129434,129436],{},[60,129435,62481],{"align":46},[60,129437,129438],{"align":46},"使用绝对或相对地址指定背景图像",[416,129440,129441],{"className":127307,"code":129383,"language":127309,"meta":395,"style":395},[422,129442,129443,129449,129463],{"__ignoreMap":395},[425,129444,129445,129447],{"class":427,"line":428},[425,129446,52366],{"class":52055},[425,129448,16569],{"class":701},[425,129450,129451,129453,129455,129457,129459,129461],{"class":427,"line":698},[425,129452,129396],{"class":691},[425,129454,52192],{"class":701},[425,129456,62481],{"class":691},[425,129458,1159],{"class":701},[425,129460,129405],{"class":6216},[425,129462,3719],{"class":701},[425,129464,129465],{"class":427,"line":710},[425,129466,2578],{"class":701},[19,129468,129469],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[14,129471,129473],{"id":129472},"_823-背景平铺","8.2.3 背景平铺",[416,129475,129477],{"className":127307,"code":129476,"language":127309,"meta":395,"style":395},"div {\n  background-repeat: no-repeat;\n}\n",[422,129478,129479,129485,129496],{"__ignoreMap":395},[425,129480,129481,129483],{"class":427,"line":428},[425,129482,52366],{"class":52055},[425,129484,16569],{"class":701},[425,129486,129487,129490,129492,129494],{"class":427,"line":698},[425,129488,129489],{"class":691},"  background-repeat",[425,129491,52192],{"class":701},[425,129493,62491],{"class":691},[425,129495,2307],{"class":701},[425,129497,129498],{"class":427,"line":710},[425,129499,2578],{"class":701},[35,129501,129502,129510],{},[38,129503,129504],{},[41,129505,129506,129508],{},[44,129507,129420],{"align":46},[44,129509,103451],{"align":46},[55,129511,129512,129520,129527,129535],{},[41,129513,129514,129517],{},[60,129515,129516],{"align":46},"repeat",[60,129518,129519],{"align":46},"背景图像在纵向和横向上平铺（默认的）",[41,129521,129522,129524],{},[60,129523,62491],{"align":46},[60,129525,129526],{"align":46},"背景图像不平铺",[41,129528,129529,129532],{},[60,129530,129531],{"align":46},"repeat-x",[60,129533,129534],{"align":46},"背景图像在横向上平铺",[41,129536,129537,129540],{},[60,129538,129539],{"align":46},"repeat-y",[60,129541,129542],{"align":46},"背景图像在纵向平铺",[14,129544,129546],{"id":129545},"_824-背景图片位置","8.2.4 背景图片位置",[416,129548,129550],{"className":127307,"code":129549,"language":127309,"meta":395,"style":395},"\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",[422,129551,129552,129557,129563,129577,129581,129586,129592,129608,129612,129617,129623,129637],{"__ignoreMap":395},[425,129553,129554],{"class":427,"line":428},[425,129555,129556],{"class":1216},"\u002F* 方位名词 *\u002F\n",[425,129558,129559,129561],{"class":427,"line":698},[425,129560,52366],{"class":52055},[425,129562,16569],{"class":701},[425,129564,129565,129568,129570,129572,129575],{"class":427,"line":710},[425,129566,129567],{"class":691},"  background-position",[425,129569,52192],{"class":701},[425,129571,52347],{"class":691},[425,129573,129574],{"class":691}," top",[425,129576,2307],{"class":701},[425,129578,129579],{"class":427,"line":721},[425,129580,2578],{"class":701},[425,129582,129583],{"class":427,"line":735},[425,129584,129585],{"class":1216},"\u002F* 精确单位 *\u002F\n",[425,129587,129588,129590],{"class":427,"line":743},[425,129589,52366],{"class":52055},[425,129591,16569],{"class":701},[425,129593,129594,129596,129598,129600,129602,129604,129606],{"class":427,"line":751},[425,129595,129567],{"class":691},[425,129597,52192],{"class":701},[425,129599,1848],{"class":691},[425,129601,52247],{"class":1155},[425,129603,58259],{"class":691},[425,129605,52247],{"class":1155},[425,129607,2307],{"class":701},[425,129609,129610],{"class":427,"line":759},[425,129611,2578],{"class":701},[425,129613,129614],{"class":427,"line":770},[425,129615,129616],{"class":1216},"\u002F* 混合单位 *\u002F\n",[425,129618,129619,129621],{"class":427,"line":780},[425,129620,52366],{"class":52055},[425,129622,16569],{"class":701},[425,129624,129625,129627,129629,129631,129633,129635],{"class":427,"line":790},[425,129626,129567],{"class":691},[425,129628,52192],{"class":701},[425,129630,1848],{"class":691},[425,129632,52247],{"class":1155},[425,129634,18141],{"class":691},[425,129636,2307],{"class":701},[425,129638,129639],{"class":427,"line":805},[425,129640,2578],{"class":701},[19,129642,129643],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[35,129645,129646,129654],{},[38,129647,129648],{},[41,129649,129650,129652],{},[44,129651,129420],{"align":46},[44,129653,26860],{"align":46},[55,129655,129656,129663],{},[41,129657,129658,129660],{},[60,129659,52723],{"align":46},[60,129661,129662],{"align":46},"百分数|由浮点数和单位标识符组成的长度值",[41,129664,129665,129668],{},[60,129666,129667],{"align":46},"position",[60,129669,129670],{"align":46},"top|center|bottom|left|center|right 方位名词",[19,129672,129673],{},"其他说明：",[19,129675,129676],{},"①参数是方位名词",[19,129678,129679],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,129681,129682],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,129684,129685],{},"②参数是精确单位",[19,129687,129688],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,129690,129691],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,129693,129694],{},"③参数是混合单位",[19,129696,129697],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[14,129699,129701],{"id":129700},"_825-背景图片固定","8.2.5 背景图片固定",[416,129703,129705],{"className":127307,"code":129704,"language":127309,"meta":395,"style":395},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[422,129706,129707,129712,129718,129730,129734,129739,129745,129755],{"__ignoreMap":395},[425,129708,129709],{"class":427,"line":428},[425,129710,129711],{"class":1216},"\u002F* 背景滚动（默认） *\u002F\n",[425,129713,129714,129716],{"class":427,"line":698},[425,129715,52366],{"class":52055},[425,129717,16569],{"class":701},[425,129719,129720,129723,129725,129728],{"class":427,"line":710},[425,129721,129722],{"class":691},"  background-attachment",[425,129724,52192],{"class":701},[425,129726,129727],{"class":691},"scroll",[425,129729,2307],{"class":701},[425,129731,129732],{"class":427,"line":721},[425,129733,2578],{"class":701},[425,129735,129736],{"class":427,"line":735},[425,129737,129738],{"class":1216},"\u002F* 背景固定 *\u002F\n",[425,129740,129741,129743],{"class":427,"line":743},[425,129742,52366],{"class":52055},[425,129744,16569],{"class":701},[425,129746,129747,129749,129751,129753],{"class":427,"line":751},[425,129748,129722],{"class":691},[425,129750,52192],{"class":701},[425,129752,86988],{"class":691},[425,129754,2307],{"class":701},[425,129756,129757],{"class":427,"line":759},[425,129758,2578],{"class":701},[35,129760,129761,129770],{},[38,129762,129763],{},[41,129764,129765,129768],{},[44,129766,129767],{"align":46},"参数",[44,129769,103451],{"align":46},[55,129771,129772,129779],{},[41,129773,129774,129776],{},[60,129775,129727],{"align":46},[60,129777,129778],{"align":46},"背景图像是随对象内容滚动",[41,129780,129781,129783],{},[60,129782,86988],{"align":46},[60,129784,129785],{"align":46},"背景图像固定",[14,129787,129789],{"id":129788},"_826-背景样式合写","8.2.6 背景样式合写",[416,129791,129793],{"className":127307,"code":129792,"language":127309,"meta":395,"style":395},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[422,129794,129795,129800,129806,129834],{"__ignoreMap":395},[425,129796,129797],{"class":427,"line":428},[425,129798,129799],{"class":1216},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[425,129801,129802,129804],{"class":427,"line":698},[425,129803,52366],{"class":52055},[425,129805,16569],{"class":701},[425,129807,129808,129810,129812,129814,129817,129819,129821,129823,129825,129828,129830,129832],{"class":427,"line":710},[425,129809,71366],{"class":691},[425,129811,52192],{"class":701},[425,129813,61597],{"class":691},[425,129815,129816],{"class":691}," url",[425,129818,1159],{"class":701},[425,129820,129405],{"class":6216},[425,129822,938],{"class":701},[425,129824,62491],{"class":691},[425,129826,129827],{"class":691}," fixed",[425,129829,18141],{"class":691},[425,129831,129574],{"class":691},[425,129833,2307],{"class":701},[425,129835,129836],{"class":427,"line":721},[425,129837,2578],{"class":701},[14,129839,129841],{"id":129840},"_827-背景色半透明","8.2.7 背景色半透明",[416,129843,129845],{"className":127307,"code":129844,"language":127309,"meta":395,"style":395},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[422,129846,129847,129853,129879],{"__ignoreMap":395},[425,129848,129849,129851],{"class":427,"line":428},[425,129850,52366],{"class":52055},[425,129852,16569],{"class":701},[425,129854,129855,129857,129859,129861,129863,129865,129867,129869,129871,129873,129875,129877],{"class":427,"line":698},[425,129856,71366],{"class":691},[425,129858,52192],{"class":701},[425,129860,55865],{"class":691},[425,129862,1159],{"class":701},[425,129864,1341],{"class":691},[425,129866,13434],{"class":701},[425,129868,1341],{"class":691},[425,129870,13434],{"class":701},[425,129872,1341],{"class":691},[425,129874,13434],{"class":701},[425,129876,101276],{"class":691},[425,129878,3719],{"class":701},[425,129880,129881],{"class":427,"line":710},[425,129882,2578],{"class":701},[19,129884,100151],{},[19,129886,129887],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,129889,129890],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,129892,129893],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,129895,129896],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[14,129898,129900],{"id":129899},"_828-总结","8.2.8 总结",[35,129902,129903,129914],{},[38,129904,129905],{},[41,129906,129907,129910,129912],{},[44,129908,129909],{"align":46},"属性",[44,129911,103451],{"align":46},[44,129913,1304],{"align":46},[55,129915,129916,129927,129938,129949,129960,129971,129982],{},[41,129917,129918,129921,129924],{},[60,129919,129920],{"align":46},"background-color",[60,129922,129923],{"align":46},"背景颜色",[60,129925,129926],{"align":46},"预定义的颜色值\u002F十六进制\u002FRGB代码",[41,129928,129929,129932,129935],{},[60,129930,129931],{"align":46},"background-image",[60,129933,129934],{"align":46},"背景图片",[60,129936,129937],{"align":46},"url(图片路径)",[41,129939,129940,129943,129946],{},[60,129941,129942],{"align":46},"background-repeat",[60,129944,129945],{"align":46},"是否平铺",[60,129947,129948],{"align":46},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[41,129950,129951,129954,129957],{},[60,129952,129953],{"align":46},"background-position",[60,129955,129956],{"align":46},"背景位置",[60,129958,129959],{"align":46},"length\u002Fposition 分别是x和y坐标",[41,129961,129962,129965,129968],{},[60,129963,129964],{"align":46},"background-attachment",[60,129966,129967],{"align":46},"背景附着",[60,129969,129970],{"align":46},"scroll(背景滚动) \u002Ffixed (背景固定)",[41,129972,129973,129976,129979],{},[60,129974,129975],{"align":46},"背景简写",[60,129977,129978],{"align":46},"书写更简单",[60,129980,129981],{"align":46},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[41,129983,129984,129987,129990],{},[60,129985,129986],{"align":46},"背景半透明",[60,129988,129989],{"align":46},"背景颜色半透明",[60,129991,129992],{"align":46},"background: rgba(0,0,0.3); 后面必须是4个值",[19,129994,129995],{},"颜色渐变：",[393,129997],{"style":127163,"src":129998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[393,130000],{"style":127163,"src":130001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[14,130003,130005],{"id":130004},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[416,130007,130009],{"className":128054,"code":130008,"language":128056,"meta":395,"style":395},"\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",[422,130010,130011,130026,130045,130064,130083,130102,130121],{"__ignoreMap":395},[425,130012,130013,130015,130017,130019,130021,130024],{"class":427,"line":428},[425,130014,2057],{"class":701},[425,130016,52366],{"class":52055},[425,130018,54241],{"class":431},[425,130020,1204],{"class":701},[425,130022,130023],{"class":435},"\"nav\"",[425,130025,52062],{"class":701},[425,130027,130028,130030,130032,130034,130036,130038,130041,130043],{"class":427,"line":698},[425,130029,52899],{"class":701},[425,130031,22],{"class":52055},[425,130033,61812],{"class":431},[425,130035,1204],{"class":701},[425,130037,61817],{"class":435},[425,130039,130040],{"class":701},">五彩导航1\u003C\u002F",[425,130042,22],{"class":52055},[425,130044,52062],{"class":701},[425,130046,130047,130049,130051,130053,130055,130057,130060,130062],{"class":427,"line":710},[425,130048,52899],{"class":701},[425,130050,22],{"class":52055},[425,130052,61812],{"class":431},[425,130054,1204],{"class":701},[425,130056,61817],{"class":435},[425,130058,130059],{"class":701},">五彩导航2\u003C\u002F",[425,130061,22],{"class":52055},[425,130063,52062],{"class":701},[425,130065,130066,130068,130070,130072,130074,130076,130079,130081],{"class":427,"line":721},[425,130067,52899],{"class":701},[425,130069,22],{"class":52055},[425,130071,61812],{"class":431},[425,130073,1204],{"class":701},[425,130075,61817],{"class":435},[425,130077,130078],{"class":701},">五彩导航3\u003C\u002F",[425,130080,22],{"class":52055},[425,130082,52062],{"class":701},[425,130084,130085,130087,130089,130091,130093,130095,130098,130100],{"class":427,"line":735},[425,130086,52899],{"class":701},[425,130088,22],{"class":52055},[425,130090,61812],{"class":431},[425,130092,1204],{"class":701},[425,130094,61817],{"class":435},[425,130096,130097],{"class":701},">五彩导航4\u003C\u002F",[425,130099,22],{"class":52055},[425,130101,52062],{"class":701},[425,130103,130104,130106,130108,130110,130112,130114,130117,130119],{"class":427,"line":743},[425,130105,52899],{"class":701},[425,130107,22],{"class":52055},[425,130109,61812],{"class":431},[425,130111,1204],{"class":701},[425,130113,61817],{"class":435},[425,130115,130116],{"class":701},">五彩导航5\u003C\u002F",[425,130118,22],{"class":52055},[425,130120,52062],{"class":701},[425,130122,130123,130125,130127],{"class":427,"line":751},[425,130124,52540],{"class":701},[425,130126,52366],{"class":52055},[425,130128,52062],{"class":701},[416,130130,130132],{"className":127307,"code":130131,"language":127309,"meta":395,"style":395},".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",[422,130133,130134,130143,130153,130165,130177,130187,130199,130209,130213,130238,130261,130284,130307],{"__ignoreMap":395},[425,130135,130136,130139,130141],{"class":427,"line":428},[425,130137,130138],{"class":431},".nav",[425,130140,2412],{"class":52055},[425,130142,16569],{"class":701},[425,130144,130145,130147,130149,130151],{"class":427,"line":698},[425,130146,128923],{"class":691},[425,130148,52192],{"class":701},[425,130150,73138],{"class":691},[425,130152,2307],{"class":701},[425,130154,130155,130157,130159,130161,130163],{"class":427,"line":710},[425,130156,71323],{"class":691},[425,130158,52192],{"class":701},[425,130160,1965],{"class":691},[425,130162,52247],{"class":1155},[425,130164,2307],{"class":701},[425,130166,130167,130169,130171,130173,130175],{"class":427,"line":721},[425,130168,71543],{"class":691},[425,130170,52192],{"class":701},[425,130172,2004],{"class":691},[425,130174,52247],{"class":1155},[425,130176,2307],{"class":701},[425,130178,130179,130181,130183,130185],{"class":427,"line":735},[425,130180,71281],{"class":691},[425,130182,52192],{"class":701},[425,130184,52347],{"class":691},[425,130186,2307],{"class":701},[425,130188,130189,130191,130193,130195,130197],{"class":427,"line":743},[425,130190,127991],{"class":691},[425,130192,52192],{"class":701},[425,130194,2004],{"class":691},[425,130196,52247],{"class":1155},[425,130198,2307],{"class":701},[425,130200,130201,130203,130205,130207],{"class":427,"line":751},[425,130202,71660],{"class":691},[425,130204,52192],{"class":701},[425,130206,61597],{"class":691},[425,130208,2307],{"class":701},[425,130210,130211],{"class":427,"line":759},[425,130212,2578],{"class":701},[425,130214,130215,130217,130219,130222,130224,130226,130229,130231,130233,130235],{"class":427,"line":770},[425,130216,130138],{"class":431},[425,130218,2412],{"class":52055},[425,130220,130221],{"class":431},":nth-child",[425,130223,1159],{"class":701},[425,130225,1367],{"class":691},[425,130227,130228],{"class":701},") { ",[425,130230,129920],{"class":691},[425,130232,52192],{"class":701},[425,130234,129338],{"class":691},[425,130236,130237],{"class":701},"; }\n",[425,130239,130240,130242,130244,130246,130248,130250,130252,130254,130256,130259],{"class":427,"line":780},[425,130241,130138],{"class":431},[425,130243,2412],{"class":52055},[425,130245,130221],{"class":431},[425,130247,1159],{"class":701},[425,130249,1235],{"class":691},[425,130251,130228],{"class":701},[425,130253,129920],{"class":691},[425,130255,52192],{"class":701},[425,130257,130258],{"class":691},"#ff0000",[425,130260,130237],{"class":701},[425,130262,130263,130265,130267,130269,130271,130273,130275,130277,130279,130282],{"class":427,"line":790},[425,130264,130138],{"class":431},[425,130266,2412],{"class":52055},[425,130268,130221],{"class":431},[425,130270,1159],{"class":701},[425,130272,1229],{"class":691},[425,130274,130228],{"class":701},[425,130276,129920],{"class":691},[425,130278,52192],{"class":701},[425,130280,130281],{"class":691},"#00a4ff",[425,130283,130237],{"class":701},[425,130285,130286,130288,130290,130292,130294,130296,130298,130300,130302,130305],{"class":427,"line":805},[425,130287,130138],{"class":431},[425,130289,2412],{"class":52055},[425,130291,130221],{"class":431},[425,130293,1159],{"class":701},[425,130295,1442],{"class":691},[425,130297,130228],{"class":701},[425,130299,129920],{"class":691},[425,130301,52192],{"class":701},[425,130303,130304],{"class":691},"#ff00ff",[425,130306,130237],{"class":701},[425,130308,130309,130311,130313,130315,130317,130319,130321,130323,130325,130328],{"class":427,"line":818},[425,130310,130138],{"class":431},[425,130312,2412],{"class":52055},[425,130314,130221],{"class":431},[425,130316,1159],{"class":701},[425,130318,1468],{"class":691},[425,130320,130228],{"class":701},[425,130322,129920],{"class":691},[425,130324,52192],{"class":701},[425,130326,130327],{"class":691},"#00ff00",[425,130329,130237],{"class":701},[1099,130331,130333],{"id":130332},"_83-css三大特性","8.3 css三大特性",[14,130335,130337],{"id":130336},"_831-层叠性","8.3.1 层叠性",[19,130339,130340],{},"为了解决样式冲突问题",[19,130342,130343],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,130345,130346],{},"   ②样式不冲突，不会层叠",[14,130348,130350],{"id":130349},"_832-继承性","8.3.2 继承性",[19,130352,130353],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,130355,130356],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[416,130358,130360],{"className":127307,"code":130359,"language":127309,"meta":395,"style":395},"p {\n  color: #333;\n}\n",[422,130361,130362,130368,130378],{"__ignoreMap":395},[425,130363,130364,130366],{"class":427,"line":428},[425,130365,19],{"class":52055},[425,130367,16569],{"class":701},[425,130369,130370,130372,130374,130376],{"class":427,"line":698},[425,130371,71660],{"class":691},[425,130373,52192],{"class":701},[425,130375,63124],{"class":691},[425,130377,2307],{"class":701},[425,130379,130380],{"class":427,"line":710},[425,130381,2578],{"class":701},[393,130383],{"style":127163,"src":130384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,130386,130387],{},"解释：①行高可以跟单位也可以不跟单位",[19,130389,130390],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,130392,130393],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,130395,130396],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[14,130398,130400],{"id":130399},"_833-优先级","8.3.3 优先级",[972,130402,130403,130406],{},[450,130404,130405],{},"选择器相同，则执行层叠性",[450,130407,130408],{},"选择器不同，则根据选择器权重执行",[35,130410,130411,130421],{},[38,130412,130413],{},[41,130414,130415,130418],{},[44,130416,130417],{"align":46},"选择器",[44,130419,130420],{"align":46},"选择器权重",[55,130422,130423,130431,130439,130447,130455,130463],{},[41,130424,130425,130428],{},[60,130426,130427],{"align":46},"继承 或者*",[60,130429,130430],{"align":46},"0，0，0，0",[41,130432,130433,130436],{},[60,130434,130435],{"align":46},"标签选择器",[60,130437,130438],{"align":46},"0，0，0，1",[41,130440,130441,130444],{},[60,130442,130443],{"align":46},"类选择器，伪类选择器",[60,130445,130446],{"align":46},"0，0，1，0",[41,130448,130449,130452],{},[60,130450,130451],{"align":46},"ID选择器",[60,130453,130454],{"align":46},"0，1，0，0",[41,130456,130457,130460],{},[60,130458,130459],{"align":46},"行内样式",[60,130461,130462],{"align":46},"1，0，0，0",[41,130464,130465,130468],{},[60,130466,130467],{"align":46},"！important",[60,130469,130470],{"align":46},"无穷大",[19,130472,130473],{},"! important用法：",[416,130475,130477],{"className":127307,"code":130476,"language":127309,"meta":395,"style":395},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[422,130478,130479,130484,130490,130503,130507,130512,130518,130528],{"__ignoreMap":395},[425,130480,130481],{"class":427,"line":428},[425,130482,130483],{"class":1216},"\u002F* !important 拥有最高优先级 *\u002F\n",[425,130485,130486,130488],{"class":427,"line":698},[425,130487,52366],{"class":52055},[425,130489,16569],{"class":701},[425,130491,130492,130494,130496,130498,130501],{"class":427,"line":710},[425,130493,71660],{"class":691},[425,130495,52192],{"class":701},[425,130497,52400],{"class":691},[425,130499,130500],{"class":1155}," !important",[425,130502,2307],{"class":701},[425,130504,130505],{"class":427,"line":721},[425,130506,2578],{"class":701},[425,130508,130509],{"class":427,"line":735},[425,130510,130511],{"class":1216},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[425,130513,130514,130516],{"class":427,"line":743},[425,130515,52366],{"class":52055},[425,130517,16569],{"class":701},[425,130519,130520,130522,130524,130526],{"class":427,"line":751},[425,130521,71660],{"class":691},[425,130523,52192],{"class":701},[425,130525,58176],{"class":691},[425,130527,2307],{"class":701},[425,130529,130530],{"class":427,"line":759},[425,130531,2578],{"class":701},[19,130533,130534],{},"优先级注意点：",[19,130536,130537],{},"①权重是有4组数字组成,但是不会有进位",[19,130539,130540],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,130542,130543],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,130545,130546],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,130548,130549],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,130551,130552],{},"⑥复合选择器",[35,130554,130555,130565],{},[38,130556,130557],{},[41,130558,130559,130562],{},[44,130560,130561],{"align":46},"div ul li",[44,130563,130564],{"align":46},"0,0,0,3",[55,130566,130567,130575,130583],{},[41,130568,130569,130572],{},[60,130570,130571],{"align":46},".nav ul li",[60,130573,130574],{"align":46},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[41,130576,130577,130580],{},[60,130578,130579],{"align":46},"a:hover",[60,130581,130582],{"align":46},"0,0,1,1",[41,130584,130585,130588],{},[60,130586,130587],{"align":46},".nav a",[60,130589,130582],{"align":46},[1074,130591,130592],{},"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":395,"searchDepth":698,"depth":698,"links":130594},[130595,130603,130614],{"id":128703,"depth":698,"text":128704,"children":130596},[130597,130598,130599,130600,130601,130602],{"id":128716,"depth":710,"text":128717},{"id":128788,"depth":710,"text":128789},{"id":128860,"depth":710,"text":128861},{"id":128891,"depth":710,"text":128892},{"id":128898,"depth":710,"text":128899},{"id":129051,"depth":710,"text":129052},{"id":129359,"depth":698,"text":129360,"children":130604},[130605,130606,130607,130608,130609,130610,130611,130612,130613],{"id":129366,"depth":710,"text":129367},{"id":129376,"depth":710,"text":129377},{"id":129472,"depth":710,"text":129473},{"id":129545,"depth":710,"text":129546},{"id":129700,"depth":710,"text":129701},{"id":129788,"depth":710,"text":129789},{"id":129840,"depth":710,"text":129841},{"id":129899,"depth":710,"text":129900},{"id":130004,"depth":710,"text":130005},{"id":130332,"depth":698,"text":130333,"children":130615},[130616,130617,130618],{"id":130336,"depth":710,"text":130337},{"id":130349,"depth":710,"text":130350},{"id":130399,"depth":710,"text":130400},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128695,"description":24374},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130625,"title":130626,"body":130627,"description":24374,"extension":1082,"meta":132217,"navigation":1084,"path":132218,"seo":132219,"stem":132220,"__hash__":132221},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130628,"toc":132196},[130629,130632,130636,130639,130642,130645,130648,130651,130654,130657,130661,130669,130706,130742,130745,130759,130764,130798,130801,130894,130899,130902,130932,130935,130940,130948,130952,130959,131005,131049,131054,131057,131060,131063,131066,131069,131072,131074,131077,131081,131086,131130,131135,131138,131141,131178,131183,131186,131189,131192,131195,131227,131230,131233,131236,131268,131271,131274,131277,131281,131284,131316,131319,131323,131343,131346,131354,131357,131361,131366,131369,131401,131406,131409,131447,131451,131456,131459,131462,131493,131496,131513,131518,131570,131630,131635,131689,131727,131731,131735,131738,131742,131750,131753,131755,131766,131771,131819,131853,131856,131859,131862,131865,131909,131912,131915,131918,131921,131924,131927,131971,131974,131977,131980,131983,131986,131989,131995,131998,132042,132045,132048,132051,132054,132057,132101,132104,132106,132109,132113,132117,132155,132159,132162,132165,132169,132177,132181,132184,132187,132190,132193],[10,130630,130626],{"id":130631},"_9-css盒模型浮动与切图",[1099,130633,130635],{"id":130634},"_91-盒子模型","9.1 盒子模型",[19,130637,130638],{},"利用盒子来设计网页",[19,130640,130641],{},"盒子包含：边框、外边距、内边距、实际内容",[19,130643,130644],{},"网页布局设置：",[19,130646,130647],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,130649,130650],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,130652,130653],{},"③往盒子里装内容",[393,130655],{"style":127163,"src":130656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[14,130658,130660],{"id":130659},"_911-边框border","9.1.1 边框（border）",[972,130662,130663,130666],{},[450,130664,130665],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[450,130667,130668],{},"语法",[416,130670,130672],{"className":127307,"code":130671,"language":127309,"meta":395,"style":395},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[422,130673,130674,130679,130685,130702],{"__ignoreMap":395},[425,130675,130676],{"class":427,"line":428},[425,130677,130678],{"class":1216},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[425,130680,130681,130683],{"class":427,"line":698},[425,130682,52366],{"class":52055},[425,130684,16569],{"class":701},[425,130686,130687,130689,130691,130693,130695,130697,130700],{"class":427,"line":710},[425,130688,71651],{"class":691},[425,130690,52192],{"class":701},[425,130692,1367],{"class":691},[425,130694,52247],{"class":1155},[425,130696,52276],{"class":691},[425,130698,130699],{"class":691}," #ccc",[425,130701,2307],{"class":701},[425,130703,130704],{"class":427,"line":721},[425,130705,2578],{"class":701},[35,130707,130708,130716],{},[38,130709,130710],{},[41,130711,130712,130714],{},[44,130713,129909],{"align":46},[44,130715,103451],{"align":46},[55,130717,130718,130726,130734],{},[41,130719,130720,130723],{},[60,130721,130722],{"align":46},"border-width",[60,130724,130725],{"align":46},"定义边框粗细，单位是px",[41,130727,130728,130731],{},[60,130729,130730],{"align":46},"border-style",[60,130732,130733],{"align":46},"边框的样式",[41,130735,130736,130739],{},[60,130737,130738],{"align":46},"border-color",[60,130740,130741],{"align":46},"边框的颜色",[19,130743,130744],{},"边框样式 border-style 可以设置如下值：",[447,130746,130747,130750,130753,130756],{},[450,130748,130749],{},"none：没有边框即忽略所有边框的宽度（默认值）",[450,130751,130752],{},"solid：边框为单实线(最为常用的)",[450,130754,130755],{},"dashed：边框为虚线",[450,130757,130758],{},"dotted：边框为点线",[972,130760,130761],{"start":710},[450,130762,130763],{},"边框的合写分写",[416,130765,130766],{"className":127307,"code":130671,"language":127309,"meta":395,"style":395},[422,130767,130768,130772,130778,130794],{"__ignoreMap":395},[425,130769,130770],{"class":427,"line":428},[425,130771,130678],{"class":1216},[425,130773,130774,130776],{"class":427,"line":698},[425,130775,52366],{"class":52055},[425,130777,16569],{"class":701},[425,130779,130780,130782,130784,130786,130788,130790,130792],{"class":427,"line":710},[425,130781,71651],{"class":691},[425,130783,52192],{"class":701},[425,130785,1367],{"class":691},[425,130787,52247],{"class":1155},[425,130789,52276],{"class":691},[425,130791,130699],{"class":691},[425,130793,2307],{"class":701},[425,130795,130796],{"class":427,"line":721},[425,130797,2578],{"class":701},[19,130799,130800],{},"边框分开写法：",[416,130802,130804],{"className":127307,"code":130803,"language":127309,"meta":395,"style":395},"\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",[422,130805,130806,130811,130817,130835,130853,130872,130890],{"__ignoreMap":395},[425,130807,130808],{"class":427,"line":428},[425,130809,130810],{"class":1216},"\u002F* 边框分开写法 *\u002F\n",[425,130812,130813,130815],{"class":427,"line":698},[425,130814,52366],{"class":52055},[425,130816,16569],{"class":701},[425,130818,130819,130822,130824,130826,130828,130830,130833],{"class":427,"line":710},[425,130820,130821],{"class":691},"  border-top",[425,130823,52192],{"class":701},[425,130825,1367],{"class":691},[425,130827,52247],{"class":1155},[425,130829,52276],{"class":691},[425,130831,130832],{"class":691}," #000",[425,130834,2307],{"class":701},[425,130836,130837,130840,130842,130844,130846,130848,130851],{"class":427,"line":721},[425,130838,130839],{"class":691},"  border-right",[425,130841,52192],{"class":701},[425,130843,1235],{"class":691},[425,130845,52247],{"class":1155},[425,130847,62996],{"class":691},[425,130849,130850],{"class":691}," #333",[425,130852,2307],{"class":701},[425,130854,130855,130858,130860,130862,130864,130867,130870],{"class":427,"line":735},[425,130856,130857],{"class":691},"  border-bottom",[425,130859,52192],{"class":701},[425,130861,1229],{"class":691},[425,130863,52247],{"class":1155},[425,130865,130866],{"class":691}," dotted",[425,130868,130869],{"class":691}," #666",[425,130871,2307],{"class":701},[425,130873,130874,130877,130879,130881,130883,130885,130888],{"class":427,"line":743},[425,130875,130876],{"class":691},"  border-left",[425,130878,52192],{"class":701},[425,130880,1367],{"class":691},[425,130882,52247],{"class":1155},[425,130884,52276],{"class":691},[425,130886,130887],{"class":691}," #999",[425,130889,2307],{"class":701},[425,130891,130892],{"class":427,"line":751},[425,130893,2578],{"class":701},[972,130895,130896],{"start":721},[450,130897,130898],{},"表格的细线边框",[19,130900,130901],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[416,130903,130905],{"className":127307,"code":130904,"language":127309,"meta":395,"style":395},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[422,130906,130907,130912,130918,130928],{"__ignoreMap":395},[425,130908,130909],{"class":427,"line":428},[425,130910,130911],{"class":1216},"\u002F* 表格细线边框合并 *\u002F\n",[425,130913,130914,130916],{"class":427,"line":698},[425,130915,35],{"class":52055},[425,130917,16569],{"class":701},[425,130919,130920,130922,130924,130926],{"class":427,"line":710},[425,130921,71333],{"class":691},[425,130923,52192],{"class":701},[425,130925,65790],{"class":691},[425,130927,2307],{"class":701},[425,130929,130930],{"class":427,"line":721},[425,130931,2578],{"class":701},[19,130933,130934],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[972,130936,130937],{"start":735},[450,130938,130939],{},"解决边框额外增加盒子的实际大小的方法：",[447,130941,130942,130945],{},[450,130943,130944],{},"测量盒子大小的时候,不量边框",[450,130946,130947],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[14,130949,130951],{"id":130950},"_912-内边距","9.1.2 内边距",[972,130953,130954,130957],{},[450,130955,130956],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[450,130958,130668],{},[35,130960,130961,130971],{},[38,130962,130963],{},[41,130964,130965,130968],{},[44,130966,130967],{"align":46},"值的个数",[44,130969,130970],{"align":46},"表达意思",[55,130972,130973,130981,130989,130997],{},[41,130974,130975,130978],{},[60,130976,130977],{"align":46},"padding: 5px;",[60,130979,130980],{"align":46},"1个值，代表上下左右都有5个元素",[41,130982,130983,130986],{},[60,130984,130985],{"align":46},"padding: 5px 10px;",[60,130987,130988],{"align":46},"2个值，代表上下内边距为5像素，左右内边距为10像素",[41,130990,130991,130994],{},[60,130992,130993],{"align":46},"padding: 5px 10px 20px;",[60,130995,130996],{"align":46},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[41,130998,130999,131002],{},[60,131000,131001],{"align":46},"padding: 5px 10px 20px 30px;",[60,131003,131004],{"align":46},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[35,131006,131007,131015],{},[38,131008,131009],{},[41,131010,131011,131013],{},[44,131012,129909],{"align":46},[44,131014,103451],{"align":46},[55,131016,131017,131025,131033,131041],{},[41,131018,131019,131022],{},[60,131020,131021],{"align":46},"padding-left",[60,131023,131024],{"align":46},"左内边距",[41,131026,131027,131030],{},[60,131028,131029],{"align":46},"padding-right",[60,131031,131032],{"align":46},"右内边距",[41,131034,131035,131038],{},[60,131036,131037],{"align":46},"padding-top",[60,131039,131040],{"align":46},"上内边距",[41,131042,131043,131046],{},[60,131044,131045],{"align":46},"padding-bottom",[60,131047,131048],{"align":46},"下内边距",[972,131050,131051],{"start":710},[450,131052,131053],{},"内边距会影响盒子的实际大小",[19,131055,131056],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,131058,131059],{},"①内容和边框有了距离，添加了内边距",[19,131061,131062],{},"②padding影响了盒子实际大小",[19,131064,131065],{},"内边距对盒子大小的影响：",[19,131067,131068],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,131070,131071],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,131073,95975],{},[19,131075,131076],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[14,131078,131080],{"id":131079},"_913-外边距","9.1.3 外边距",[972,131082,131083],{},[450,131084,131085],{},"控制盒子与盒子之间的距离",[35,131087,131088,131096],{},[38,131089,131090],{},[41,131091,131092,131094],{},[44,131093,129909],{"align":46},[44,131095,103451],{"align":46},[55,131097,131098,131106,131114,131122],{},[41,131099,131100,131103],{},[60,131101,131102],{"align":46},"margin-left",[60,131104,131105],{"align":46},"左外边距",[41,131107,131108,131111],{},[60,131109,131110],{"align":46},"margin-right",[60,131112,131113],{"align":46},"右外边距",[41,131115,131116,131119],{},[60,131117,131118],{"align":46},"margin-top",[60,131120,131121],{"align":46},"上外边距",[41,131123,131124,131127],{},[60,131125,131126],{"align":46},"margin-bottom",[60,131128,131129],{"align":46},"下外边距",[972,131131,131132],{"start":698},[450,131133,131134],{},"外边距可以让块级盒子水平居中的两个条件：",[19,131136,131137],{},"①盒子必须指定了宽度（width）",[19,131139,131140],{},"②盒子左右的外边距都设置为 auto",[416,131142,131144],{"className":127307,"code":131143,"language":127309,"meta":395,"style":395},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[422,131145,131146,131151,131158,131174],{"__ignoreMap":395},[425,131147,131148],{"class":427,"line":428},[425,131149,131150],{"class":1216},"\u002F* margin 复合写法（同上） *\u002F\n",[425,131152,131153,131156],{"class":427,"line":698},[425,131154,131155],{"class":431},".box",[425,131157,16569],{"class":701},[425,131159,131160,131162,131164,131166,131168,131171],{"class":427,"line":710},[425,131161,71225],{"class":691},[425,131163,52192],{"class":701},[425,131165,1341],{"class":691},[425,131167,52311],{"class":691},[425,131169,131170],{"class":701},";  ",[425,131172,131173],{"class":1216},"\u002F* 块级盒子水平居中 *\u002F\n",[425,131175,131176],{"class":427,"line":721},[425,131177,2578],{"class":701},[972,131179,131180],{"start":710},[450,131181,131182],{},"外边距塌陷问题",[19,131184,131185],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[393,131187],{"style":127163,"src":131188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,131190,131191],{},"解决方案：",[19,131193,131194],{},"①可以为父亲元素定义上边距",[416,131196,131197],{"className":127307,"code":131143,"language":127309,"meta":395,"style":395},[422,131198,131199,131203,131209,131223],{"__ignoreMap":395},[425,131200,131201],{"class":427,"line":428},[425,131202,131150],{"class":1216},[425,131204,131205,131207],{"class":427,"line":698},[425,131206,131155],{"class":431},[425,131208,16569],{"class":701},[425,131210,131211,131213,131215,131217,131219,131221],{"class":427,"line":710},[425,131212,71225],{"class":691},[425,131214,52192],{"class":701},[425,131216,1341],{"class":691},[425,131218,52311],{"class":691},[425,131220,131170],{"class":701},[425,131222,131173],{"class":1216},[425,131224,131225],{"class":427,"line":721},[425,131226,2578],{"class":701},[19,131228,131229],{},"②可以为父亲元素定义上内边距",[19,131231,131232],{},"③可以为父亲元素添加overflow:hidden",[393,131234],{"style":127163,"src":131235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[416,131237,131238],{"className":127307,"code":131143,"language":127309,"meta":395,"style":395},[422,131239,131240,131244,131250,131264],{"__ignoreMap":395},[425,131241,131242],{"class":427,"line":428},[425,131243,131150],{"class":1216},[425,131245,131246,131248],{"class":427,"line":698},[425,131247,131155],{"class":431},[425,131249,16569],{"class":701},[425,131251,131252,131254,131256,131258,131260,131262],{"class":427,"line":710},[425,131253,71225],{"class":691},[425,131255,52192],{"class":701},[425,131257,1341],{"class":691},[425,131259,52311],{"class":691},[425,131261,131170],{"class":701},[425,131263,131173],{"class":1216},[425,131265,131266],{"class":427,"line":721},[425,131267,2578],{"class":701},[393,131269],{"style":127163,"src":131270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,131272,131273],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,131275,131276],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[14,131278,131280],{"id":131279},"_914-清除内外边距","9.1.4 清除内外边距",[19,131282,131283],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[416,131285,131286],{"className":127307,"code":131143,"language":127309,"meta":395,"style":395},[422,131287,131288,131292,131298,131312],{"__ignoreMap":395},[425,131289,131290],{"class":427,"line":428},[425,131291,131150],{"class":1216},[425,131293,131294,131296],{"class":427,"line":698},[425,131295,131155],{"class":431},[425,131297,16569],{"class":701},[425,131299,131300,131302,131304,131306,131308,131310],{"class":427,"line":710},[425,131301,71225],{"class":691},[425,131303,52192],{"class":701},[425,131305,1341],{"class":691},[425,131307,52311],{"class":691},[425,131309,131170],{"class":701},[425,131311,131173],{"class":1216},[425,131313,131314],{"class":427,"line":721},[425,131315,2578],{"class":701},[19,131317,131318],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[14,131320,131322],{"id":131321},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[447,131324,131325,131328,131331,131334,131337,131340],{},[450,131326,131327],{},"文件→打开 ：可以打开我们要测量的图片",[450,131329,131330],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[450,131332,131333],{},"右击标尺，把里面的单位改为像素",[450,131335,131336],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[450,131338,131339],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[450,131341,131342],{},"用选区拖动 可以测量大小",[393,131344],{"style":127163,"src":131345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[447,131347,131348,131351],{},[450,131349,131350],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[450,131352,131353],{},"吸管取色工具",[393,131355],{"style":127163,"src":131356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[14,131358,131360],{"id":131359},"_916-案例","9.1.6 案例",[972,131362,131363],{},[450,131364,131365],{},"小米商品",[393,131367],{"style":127163,"src":131368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[416,131370,131371],{"className":127307,"code":131143,"language":127309,"meta":395,"style":395},[422,131372,131373,131377,131383,131397],{"__ignoreMap":395},[425,131374,131375],{"class":427,"line":428},[425,131376,131150],{"class":1216},[425,131378,131379,131381],{"class":427,"line":698},[425,131380,131155],{"class":431},[425,131382,16569],{"class":701},[425,131384,131385,131387,131389,131391,131393,131395],{"class":427,"line":710},[425,131386,71225],{"class":691},[425,131388,52192],{"class":701},[425,131390,1341],{"class":691},[425,131392,52311],{"class":691},[425,131394,131170],{"class":701},[425,131396,131173],{"class":1216},[425,131398,131399],{"class":427,"line":721},[425,131400,2578],{"class":701},[972,131402,131403],{"start":698},[450,131404,131405],{},"快报模块",[393,131407],{"style":127163,"src":131408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[416,131410,131412],{"className":128054,"code":131411,"language":128056,"meta":395,"style":395},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[422,131413,131414,131419,131434,131439],{"__ignoreMap":395},[425,131415,131416],{"class":427,"line":428},[425,131417,131418],{"class":1216},"\u003C!-- HTML 代码示例 -->\n",[425,131420,131421,131423,131425,131427,131429,131432],{"class":427,"line":698},[425,131422,2057],{"class":701},[425,131424,52366],{"class":52055},[425,131426,54241],{"class":431},[425,131428,1204],{"class":701},[425,131430,131431],{"class":435},"\"example\"",[425,131433,52062],{"class":701},[425,131435,131436],{"class":427,"line":710},[425,131437,131438],{"class":701},"  示例内容\n",[425,131440,131441,131443,131445],{"class":427,"line":721},[425,131442,52540],{"class":701},[425,131444,52366],{"class":52055},[425,131446,52062],{"class":701},[14,131448,131450],{"id":131449},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[972,131452,131453],{},[450,131454,131455],{},"圆角边框",[19,131457,131458],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[393,131460],{"style":127163,"src":131461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[416,131463,131465],{"className":127307,"code":131464,"language":127309,"meta":395,"style":395},"div {\n  border: 1px solid #ccc;\n}\n",[422,131466,131467,131473,131489],{"__ignoreMap":395},[425,131468,131469,131471],{"class":427,"line":428},[425,131470,52366],{"class":52055},[425,131472,16569],{"class":701},[425,131474,131475,131477,131479,131481,131483,131485,131487],{"class":427,"line":698},[425,131476,71651],{"class":691},[425,131478,52192],{"class":701},[425,131480,1367],{"class":691},[425,131482,52247],{"class":1155},[425,131484,52276],{"class":691},[425,131486,130699],{"class":691},[425,131488,2307],{"class":701},[425,131490,131491],{"class":427,"line":710},[425,131492,2578],{"class":701},[19,131494,131495],{},"解释:",[447,131497,131498,131501,131504,131507,131510],{},[450,131499,131500],{},"参数值可以为数值或百分比的形式",[450,131502,131503],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[450,131505,131506],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[450,131508,131509],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[450,131511,131512],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[972,131514,131515],{"start":698},[450,131516,131517],{},"盒子阴影",[416,131519,131521],{"className":127307,"code":131520,"language":127309,"meta":395,"style":395},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[422,131522,131523,131529,131566],{"__ignoreMap":395},[425,131524,131525,131527],{"class":427,"line":428},[425,131526,52366],{"class":52055},[425,131528,16569],{"class":701},[425,131530,131531,131534,131536,131538,131540,131542,131544,131546,131548,131550,131552,131554,131556,131558,131560,131562,131564],{"class":427,"line":698},[425,131532,131533],{"class":691},"  box-shadow",[425,131535,52192],{"class":701},[425,131537,1341],{"class":691},[425,131539,15752],{"class":691},[425,131541,52247],{"class":1155},[425,131543,3038],{"class":691},[425,131545,52247],{"class":1155},[425,131547,79522],{"class":691},[425,131549,1159],{"class":701},[425,131551,1341],{"class":691},[425,131553,13434],{"class":701},[425,131555,1341],{"class":691},[425,131557,13434],{"class":701},[425,131559,1341],{"class":691},[425,131561,13434],{"class":701},[425,131563,86965],{"class":691},[425,131565,3719],{"class":701},[425,131567,131568],{"class":427,"line":710},[425,131569,2578],{"class":701},[35,131571,131572,131580],{},[38,131573,131574],{},[41,131575,131576,131578],{},[44,131577,1304],{"align":46},[44,131579,50],{"align":46},[55,131581,131582,131590,131598,131606,131614,131622],{},[41,131583,131584,131587],{},[60,131585,131586],{"align":46},"h-shadow",[60,131588,131589],{"align":46},"必需,水平阴影的位置,允许负值",[41,131591,131592,131595],{},[60,131593,131594],{"align":46},"v-shadow",[60,131596,131597],{"align":46},"必需,垂直阴影的位置,允许负值",[41,131599,131600,131603],{},[60,131601,131602],{"align":46},"blur",[60,131604,131605],{"align":46},"可选,模糊距离,就是影子的虚实",[41,131607,131608,131611],{},[60,131609,131610],{"align":46},"spread",[60,131612,131613],{"align":46},"可选,阴影尺寸",[41,131615,131616,131619],{},[60,131617,131618],{"align":46},"color",[60,131620,131621],{"align":46},"可选,阴影的颜色",[41,131623,131624,131627],{},[60,131625,131626],{"align":46},"inset",[60,131628,131629],{"align":46},"可选,将外部阴影(outset)改为内部阴影",[972,131631,131632],{"start":710},[450,131633,131634],{},"文字阴影",[416,131636,131638],{"className":127307,"code":131637,"language":127309,"meta":395,"style":395},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[422,131639,131640,131646,131685],{"__ignoreMap":395},[425,131641,131642,131644],{"class":427,"line":428},[425,131643,19],{"class":52055},[425,131645,16569],{"class":701},[425,131647,131648,131651,131653,131655,131657,131659,131661,131663,131665,131667,131669,131671,131673,131675,131677,131679,131681,131683],{"class":427,"line":698},[425,131649,131650],{"class":691},"  text-shadow",[425,131652,52192],{"class":701},[425,131654,1367],{"class":691},[425,131656,52247],{"class":1155},[425,131658,26109],{"class":691},[425,131660,52247],{"class":1155},[425,131662,15752],{"class":691},[425,131664,52247],{"class":1155},[425,131666,79522],{"class":691},[425,131668,1159],{"class":701},[425,131670,1341],{"class":691},[425,131672,13434],{"class":701},[425,131674,1341],{"class":691},[425,131676,13434],{"class":701},[425,131678,1341],{"class":691},[425,131680,13434],{"class":701},[425,131682,101276],{"class":691},[425,131684,3719],{"class":701},[425,131686,131687],{"class":427,"line":710},[425,131688,2578],{"class":701},[35,131690,131691,131699],{},[38,131692,131693],{},[41,131694,131695,131697],{},[44,131696,1304],{"align":46},[44,131698,50],{"align":46},[55,131700,131701,131707,131714,131721],{},[41,131702,131703,131705],{},[60,131704,131586],{"align":46},[60,131706,131589],{"align":46},[41,131708,131709,131711],{},[60,131710,131594],{"align":46},[60,131712,131713],{"align":46},"必需,垂直阴影位置,允许负值",[41,131715,131716,131718],{},[60,131717,131602],{"align":46},[60,131719,131720],{"align":46},"可选,模糊的距离",[41,131722,131723,131725],{},[60,131724,131618],{"align":46},[60,131726,131621],{"align":46},[1099,131728,131730],{"id":131729},"_92-浮动","9.2 浮动",[14,131732,131734],{"id":131733},"_921-浮动介绍","9.2.1 浮动介绍",[19,131736,131737],{},"在16.2中详细介绍",[14,131739,131741],{"id":131740},"_922-清除浮动","9.2.2 清除浮动",[972,131743,131744,131747],{},[450,131745,131746],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[450,131748,131749],{},"清除浮动的本质",[19,131751,131752],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,131754,970],{},[447,131756,131757,131760,131763],{},[450,131758,131759],{},"如果父盒子本身有高度，则不需要清除浮动",[450,131761,131762],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[450,131764,131765],{},"父级有了高度，就不会影响下面的标准流了",[972,131767,131768],{"start":710},[450,131769,131770],{},"清除浮动样式",[416,131772,131774],{"className":127307,"code":131773,"language":127309,"meta":395,"style":395},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[422,131775,131776,131783,131794,131798,131805,131815],{"__ignoreMap":395},[425,131777,131778,131781],{"class":427,"line":428},[425,131779,131780],{"class":431},".left",[425,131782,16569],{"class":701},[425,131784,131785,131788,131790,131792],{"class":427,"line":698},[425,131786,131787],{"class":691},"  float",[425,131789,52192],{"class":701},[425,131791,46],{"class":691},[425,131793,2307],{"class":701},[425,131795,131796],{"class":427,"line":710},[425,131797,2578],{"class":701},[425,131799,131800,131803],{"class":427,"line":721},[425,131801,131802],{"class":431},".right",[425,131804,16569],{"class":701},[425,131806,131807,131809,131811,131813],{"class":427,"line":735},[425,131808,131787],{"class":691},[425,131810,52192],{"class":701},[425,131812,73277],{"class":691},[425,131814,2307],{"class":701},[425,131816,131817],{"class":427,"line":743},[425,131818,2578],{"class":701},[35,131820,131821,131829],{},[38,131822,131823],{},[41,131824,131825,131827],{},[44,131826,127771],{"align":46},[44,131828,50],{"align":46},[55,131830,131831,131838,131845],{},[41,131832,131833,131835],{},[60,131834,46],{"align":46},[60,131836,131837],{"align":46},"不允许左侧有浮动元素（清除左侧浮动的影响）",[41,131839,131840,131842],{},[60,131841,73277],{"align":46},[60,131843,131844],{"align":46},"不允许右侧有浮动元素（清除右侧浮动的影响）",[41,131846,131847,131850],{},[60,131848,131849],{"align":46},"both",[60,131851,131852],{"align":46},"同时清除左右侧浮动的影响",[19,131854,131855],{},"法一",[19,131857,131858],{},"额外标签法也称为隔墙法",[19,131860,131861],{},"使用方式：",[19,131863,131864],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[416,131866,131867],{"className":127307,"code":131773,"language":127309,"meta":395,"style":395},[422,131868,131869,131875,131885,131889,131895,131905],{"__ignoreMap":395},[425,131870,131871,131873],{"class":427,"line":428},[425,131872,131780],{"class":431},[425,131874,16569],{"class":701},[425,131876,131877,131879,131881,131883],{"class":427,"line":698},[425,131878,131787],{"class":691},[425,131880,52192],{"class":701},[425,131882,46],{"class":691},[425,131884,2307],{"class":701},[425,131886,131887],{"class":427,"line":710},[425,131888,2578],{"class":701},[425,131890,131891,131893],{"class":427,"line":721},[425,131892,131802],{"class":431},[425,131894,16569],{"class":701},[425,131896,131897,131899,131901,131903],{"class":427,"line":735},[425,131898,131787],{"class":691},[425,131900,52192],{"class":701},[425,131902,73277],{"class":691},[425,131904,2307],{"class":701},[425,131906,131907],{"class":427,"line":743},[425,131908,2578],{"class":701},[19,131910,131911],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,131913,131914],{},"优点： 通俗易懂，书写方便",[19,131916,131917],{},"缺点： 添加许多无意义的标签，结构化较差",[19,131919,131920],{},"注意： 要求这个新的空标签必须是块级元素。",[19,131922,131923],{},"法二",[19,131925,131926],{},"父级添加overflow属性",[416,131928,131929],{"className":127307,"code":131773,"language":127309,"meta":395,"style":395},[422,131930,131931,131937,131947,131951,131957,131967],{"__ignoreMap":395},[425,131932,131933,131935],{"class":427,"line":428},[425,131934,131780],{"class":431},[425,131936,16569],{"class":701},[425,131938,131939,131941,131943,131945],{"class":427,"line":698},[425,131940,131787],{"class":691},[425,131942,52192],{"class":701},[425,131944,46],{"class":691},[425,131946,2307],{"class":701},[425,131948,131949],{"class":427,"line":710},[425,131950,2578],{"class":701},[425,131952,131953,131955],{"class":427,"line":721},[425,131954,131802],{"class":431},[425,131956,16569],{"class":701},[425,131958,131959,131961,131963,131965],{"class":427,"line":735},[425,131960,131787],{"class":691},[425,131962,52192],{"class":701},[425,131964,73277],{"class":691},[425,131966,2307],{"class":701},[425,131968,131969],{"class":427,"line":743},[425,131970,2578],{"class":701},[19,131972,131973],{},"overflow: hidden;",[19,131975,131976],{},"优点：代码简洁",[19,131978,131979],{},"缺点：无法显示溢出的部分",[19,131981,131982],{},"注意：是给父元素添加代码",[19,131984,131985],{},"法三",[19,131987,131988],{},"父级添加after伪元素",[19,131990,131991,131994],{},[131992,131993],"after",{}," 方式是额外标签法的升级版",[19,131996,131997],{},"使用的时候复制就可以",[416,131999,132000],{"className":127307,"code":131773,"language":127309,"meta":395,"style":395},[422,132001,132002,132008,132018,132022,132028,132038],{"__ignoreMap":395},[425,132003,132004,132006],{"class":427,"line":428},[425,132005,131780],{"class":431},[425,132007,16569],{"class":701},[425,132009,132010,132012,132014,132016],{"class":427,"line":698},[425,132011,131787],{"class":691},[425,132013,52192],{"class":701},[425,132015,46],{"class":691},[425,132017,2307],{"class":701},[425,132019,132020],{"class":427,"line":710},[425,132021,2578],{"class":701},[425,132023,132024,132026],{"class":427,"line":721},[425,132025,131802],{"class":431},[425,132027,16569],{"class":701},[425,132029,132030,132032,132034,132036],{"class":427,"line":735},[425,132031,131787],{"class":691},[425,132033,52192],{"class":701},[425,132035,73277],{"class":691},[425,132037,2307],{"class":701},[425,132039,132040],{"class":427,"line":743},[425,132041,2578],{"class":701},[19,132043,132044],{},"优点：没有增加标签，结构更简单",[19,132046,132047],{},"缺点：照顾低版本浏览器",[19,132049,132050],{},"代表网站： 百度、淘宝网、网易等",[19,132052,132053],{},"法四",[19,132055,132056],{},"父级添加双伪元素",[416,132058,132059],{"className":127307,"code":131773,"language":127309,"meta":395,"style":395},[422,132060,132061,132067,132077,132081,132087,132097],{"__ignoreMap":395},[425,132062,132063,132065],{"class":427,"line":428},[425,132064,131780],{"class":431},[425,132066,16569],{"class":701},[425,132068,132069,132071,132073,132075],{"class":427,"line":698},[425,132070,131787],{"class":691},[425,132072,52192],{"class":701},[425,132074,46],{"class":691},[425,132076,2307],{"class":701},[425,132078,132079],{"class":427,"line":710},[425,132080,2578],{"class":701},[425,132082,132083,132085],{"class":427,"line":721},[425,132084,131802],{"class":431},[425,132086,16569],{"class":701},[425,132088,132089,132091,132093,132095],{"class":427,"line":735},[425,132090,131787],{"class":691},[425,132092,52192],{"class":701},[425,132094,73277],{"class":691},[425,132096,2307],{"class":701},[425,132098,132099],{"class":427,"line":743},[425,132100,2578],{"class":701},[19,132102,132103],{},"优点：代码更简洁",[19,132105,132047],{},[19,132107,132108],{},"代表网站：小米、腾讯等",[1099,132110,132112],{"id":132111},"_93-ps切图","9.3 PS切图",[14,132114,132116],{"id":132115},"_931-常见图片格式","9.3.1 常见图片格式",[35,132118,132119,132129],{},[38,132120,132121],{},[41,132122,132123,132126],{},[44,132124,132125],{"align":46},"jpg图像格式",[44,132127,132128],{"align":46},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[55,132130,132131,132139,132147],{},[41,132132,132133,132136],{},[60,132134,132135],{"align":46},"gif图像格式",[60,132137,132138],{"align":46},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[41,132140,132141,132144],{},[60,132142,132143],{"align":46},"png图像格式",[60,132145,132146],{"align":46},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[41,132148,132149,132152],{},[60,132150,132151],{"align":46},"PSD图像格式",[60,132153,132154],{"align":46},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[14,132156,132158],{"id":132157},"_932-图层切图","9.3.2 图层切图",[19,132160,132161],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,132163,132164],{},"按住shift选中两个图层->图层菜单->合并图层",[14,132166,132168],{"id":132167},"_933-切片切图","9.3.3 切片切图",[447,132170,132171,132174],{},[450,132172,132173],{},"利用切片工具手动划出",[450,132175,132176],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[14,132178,132180],{"id":132179},"_934-切图步骤","9.3.4 切图步骤",[19,132182,132183],{},"用切片工具选中：",[393,132185],{"style":127163,"src":132186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,132188,132189],{},"文件 -> 导出",[393,132191],{"style":127163,"src":132192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[1074,132194,132195],{},"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":395,"searchDepth":698,"depth":698,"links":132197},[132198,132207,132211],{"id":130634,"depth":698,"text":130635,"children":132199},[132200,132201,132202,132203,132204,132205,132206],{"id":130659,"depth":710,"text":130660},{"id":130950,"depth":710,"text":130951},{"id":131079,"depth":710,"text":131080},{"id":131279,"depth":710,"text":131280},{"id":131321,"depth":710,"text":131322},{"id":131359,"depth":710,"text":131360},{"id":131449,"depth":710,"text":131450},{"id":131729,"depth":698,"text":131730,"children":132208},[132209,132210],{"id":131733,"depth":710,"text":131734},{"id":131740,"depth":710,"text":131741},{"id":132111,"depth":698,"text":132112,"children":132212},[132213,132214,132215,132216],{"id":132115,"depth":710,"text":132116},{"id":132157,"depth":710,"text":132158},{"id":132167,"depth":710,"text":132168},{"id":132179,"depth":710,"text":132180},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130626,"description":24374},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":132223,"title":132224,"body":132225,"description":24374,"extension":1082,"meta":132866,"navigation":1084,"path":132867,"seo":132868,"stem":132869,"__hash__":132870},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":132226,"toc":132854},[132227,132230,132234,132260,132294,132298,132302,132305,132347,132354,132364,132372,132374,132377,132380,132383,132390,132404,132408,132411,132440,132444,132447,132461,132465,132468,132496,132500,132503,132529,132533,132538,132571,132576,132604,132608,132625,132671,132676,132720,132737,132844,132852],[10,132228,132224],{"id":132229},"_10-css规范与学成在线案例",[1099,132231,132233],{"id":132232},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[972,132235,132236,132242,132248,132254],{},[450,132237,132238,132241],{},[400,132239,132240],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[450,132243,132244,132247],{},[400,132245,132246],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[450,132249,132250,132253],{},[400,132251,132252],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[450,132255,132256,132259],{},[400,132257,132258],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[416,132261,132262],{"className":127307,"code":130671,"language":127309,"meta":395,"style":395},[422,132263,132264,132268,132274,132290],{"__ignoreMap":395},[425,132265,132266],{"class":427,"line":428},[425,132267,130678],{"class":1216},[425,132269,132270,132272],{"class":427,"line":698},[425,132271,52366],{"class":52055},[425,132273,16569],{"class":701},[425,132275,132276,132278,132280,132282,132284,132286,132288],{"class":427,"line":710},[425,132277,71651],{"class":691},[425,132279,52192],{"class":701},[425,132281,1367],{"class":691},[425,132283,52247],{"class":1155},[425,132285,52276],{"class":691},[425,132287,130699],{"class":691},[425,132289,2307],{"class":701},[425,132291,132292],{"class":427,"line":721},[425,132293,2578],{"class":701},[1099,132295,132297],{"id":132296},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[14,132299,132301],{"id":132300},"_1021-header头部制作","10.2.1 header头部制作",[393,132303],{"style":127163,"src":132304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[447,132306,132307,132314,132321,132327,132334,132341],{},[450,132308,132309,132310,132313],{},"1号是版心盒子 ",[400,132311,132312],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[450,132315,132316,132317,132320],{},"版心盒子 里面包含 2号盒子 ",[400,132318,132319],{},"logo"," 图标",[450,132322,132323,132324,132326],{},"版心盒子 里面包含 3号盒子 ",[400,132325,54468],{}," 导航栏",[450,132328,132329,132330,132333],{},"版心盒子 里面包含 4号盒子 ",[400,132331,132332],{},"search"," 搜索框",[450,132335,132336,132337,132340],{},"版心盒子 里面包含 5号盒子 ",[400,132338,132339],{},"user"," 个人信息",[450,132342,132343,132344],{},"注意，要求里面的 ",[400,132345,132346],{},"4个子盒子 必须都浮动",[972,132348,132349],{},[450,132350,132351],{},[400,132352,132353],{},"导航栏注意点:",[19,132355,132356,132357,132360,132361],{},"实际开发中， ",[400,132358,132359],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[400,132362,132363],{},"用 li 包含链接(li+a)的做法",[447,132365,132366,132369],{},[450,132367,132368],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[450,132370,132371],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,132373,970],{},[19,132375,132376],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,132378,132379],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,132381,132382],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[972,132384,132385],{"start":698},[450,132386,132387],{},[400,132388,132389],{},"4号盒子search的细节：",[447,132391,132392,132395,132398],{},[450,132393,132394],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[450,132396,132397],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[450,132399,132400,132403],{},[422,132401,132402],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[14,132405,132407],{"id":132406},"_1022-banner制作","10.2.2 banner制作",[393,132409],{"style":127163,"src":132410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[447,132412,132413,132420,132426,132433],{},[450,132414,132415,132416,132419],{},"1号盒子是通栏的大盒子 ",[400,132417,132418],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[450,132421,132422,132423,132425],{},"2号盒子是版心 ",[400,132424,1943],{}," ， 要水平居中对齐",[450,132427,132428,132429,132432],{},"3号盒子版心内，左对齐 ",[400,132430,132431],{},"subnav"," 侧导航栏",[450,132434,132435,132436,132439],{},"4号盒子版心内，右对齐 ",[400,132437,132438],{},"course"," 课程",[14,132441,132443],{"id":132442},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[393,132445],{"style":127163,"src":132446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[447,132448,132449,132452,132455,132458],{},[450,132450,132451],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[450,132453,132454],{},"1号盒子是标题 H3 左侧浮动",[450,132456,132457],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[450,132459,132460],{},"3号盒子 右浮动 mod 修改",[14,132462,132464],{"id":132463},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[393,132466],{"style":127163,"src":132467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[447,132469,132470,132476,132483,132490,132493],{},[450,132471,132472,132473,132475],{},"1号盒子为最大的盒子 ",[400,132474,54469],{}," 版心水平居中对齐",[450,132477,132478,132479,132482],{},"2号盒子为上面部分 ",[400,132480,132481],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[450,132484,132485,132486,132489],{},"3号盒子为底下部分 ",[400,132487,132488],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[450,132491,132492],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[450,132494,132495],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[14,132497,132499],{"id":132498},"_1025-底部模块制作","10.2.5 底部模块制作",[393,132501],{"style":127163,"src":132502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[447,132504,132505,132512,132515,132522],{},[450,132506,132507,132508,132511],{},"1号盒子通栏大盒子 底部 ",[400,132509,132510],{},"footer"," 给高度 底色是白色",[450,132513,132514],{},"2号盒子版心水平居中",[450,132516,132517,132518,132521],{},"3号盒子版权 ",[400,132519,132520],{},"copyright"," 左对齐",[450,132523,132524,132525,132528],{},"4号盒子 链接组 ",[400,132526,132527],{},"links"," 右对齐",[14,132530,132532],{"id":132531},"_1026-代码模块","10.2.6 代码模块",[972,132534,132535],{},[450,132536,132537],{},"html部分",[416,132539,132541],{"className":128054,"code":132540,"language":128056,"meta":395,"style":395},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[422,132542,132543],{"__ignoreMap":395},[425,132544,132545,132547,132549,132551,132553,132556,132559,132561,132564,132567,132569],{"class":427,"line":428},[425,132546,2057],{"class":701},[425,132548,22],{"class":52055},[425,132550,61812],{"class":431},[425,132552,1204],{"class":701},[425,132554,132555],{"class":435},"\"https:\u002F\u002Fexample.com\"",[425,132557,132558],{"class":431}," target",[425,132560,1204],{"class":701},[425,132562,132563],{"class":435},"\"_blank\"",[425,132565,132566],{"class":701},">链接文字\u003C\u002F",[425,132568,22],{"class":52055},[425,132570,52062],{"class":701},[972,132572,132573],{"start":698},[450,132574,132575],{},"css部分",[416,132577,132578],{"className":128054,"code":132540,"language":128056,"meta":395,"style":395},[422,132579,132580],{"__ignoreMap":395},[425,132581,132582,132584,132586,132588,132590,132592,132594,132596,132598,132600,132602],{"class":427,"line":428},[425,132583,2057],{"class":701},[425,132585,22],{"class":52055},[425,132587,61812],{"class":431},[425,132589,1204],{"class":701},[425,132591,132555],{"class":435},[425,132593,132558],{"class":431},[425,132595,1204],{"class":701},[425,132597,132563],{"class":435},[425,132599,132566],{"class":701},[425,132601,22],{"class":52055},[425,132603,52062],{"class":701},[14,132605,132607],{"id":132606},"_1027-收获","10.2.7 收获",[972,132609,132610,132613,132616,132619,132622],{},[450,132611,132612],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[450,132614,132615],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[450,132617,132618],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[450,132620,132621],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[450,132623,132624],{},"遗忘代码",[416,132626,132628],{"className":127307,"code":132627,"language":127309,"meta":395,"style":395},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[422,132629,132630,132652,132657,132667],{"__ignoreMap":395},[425,132631,132632,132634,132636,132638,132640,132642,132644,132646,132648,132650],{"class":427,"line":428},[425,132633,52366],{"class":52055},[425,132635,13434],{"class":701},[425,132637,19],{"class":52055},[425,132639,13434],{"class":701},[425,132641,10],{"class":52055},[425,132643,13434],{"class":701},[425,132645,447],{"class":52055},[425,132647,13434],{"class":701},[425,132649,450],{"class":52055},[425,132651,16569],{"class":701},[425,132653,132654],{"class":427,"line":698},[425,132655,132656],{"class":1216},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[425,132658,132659,132661,132663,132665],{"class":427,"line":710},[425,132660,128923],{"class":691},[425,132662,52192],{"class":701},[425,132664,61624],{"class":691},[425,132666,2307],{"class":701},[425,132668,132669],{"class":427,"line":721},[425,132670,2578],{"class":701},[972,132672,132673],{"start":743},[450,132674,132675],{},"html引css的程序",[416,132677,132678],{"className":127307,"code":132627,"language":127309,"meta":395,"style":395},[422,132679,132680,132702,132706,132716],{"__ignoreMap":395},[425,132681,132682,132684,132686,132688,132690,132692,132694,132696,132698,132700],{"class":427,"line":428},[425,132683,52366],{"class":52055},[425,132685,13434],{"class":701},[425,132687,19],{"class":52055},[425,132689,13434],{"class":701},[425,132691,10],{"class":52055},[425,132693,13434],{"class":701},[425,132695,447],{"class":52055},[425,132697,13434],{"class":701},[425,132699,450],{"class":52055},[425,132701,16569],{"class":701},[425,132703,132704],{"class":427,"line":698},[425,132705,132656],{"class":1216},[425,132707,132708,132710,132712,132714],{"class":427,"line":710},[425,132709,128923],{"class":691},[425,132711,52192],{"class":701},[425,132713,61624],{"class":691},[425,132715,2307],{"class":701},[425,132717,132718],{"class":427,"line":721},[425,132719,2578],{"class":701},[972,132721,132722,132725,132728,132731,132734],{"start":751},[450,132723,132724],{},"浮动的盒子不会有外边距合并问题",[450,132726,132727],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[450,132729,132730],{},"ctrl+g快速定位行；shift+alt多个光标",[450,132732,132733],{},"学习上方各个模块的选择器起名方法，以后就这样用",[450,132735,132736],{},"在写选择器时尽量写全一些，例如",[416,132738,132740],{"className":127307,"code":132739,"language":127309,"meta":395,"style":395},"\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",[422,132741,132742,132747,132763,132768,132783,132788,132803,132808,132823,132828],{"__ignoreMap":395},[425,132743,132744],{"class":427,"line":428},[425,132745,132746],{"class":1216},"\u002F* 静态定位（默认） *\u002F\n",[425,132748,132749,132752,132754,132756,132758,132761],{"class":427,"line":698},[425,132750,132751],{"class":431},".static",[425,132753,80562],{"class":701},[425,132755,129667],{"class":691},[425,132757,52192],{"class":701},[425,132759,132760],{"class":691},"static",[425,132762,130237],{"class":701},[425,132764,132765],{"class":427,"line":710},[425,132766,132767],{"class":1216},"\u002F* 相对定位 *\u002F\n",[425,132769,132770,132773,132775,132777,132779,132781],{"class":427,"line":721},[425,132771,132772],{"class":431},".relative",[425,132774,80562],{"class":701},[425,132776,129667],{"class":691},[425,132778,52192],{"class":701},[425,132780,55519],{"class":691},[425,132782,130237],{"class":701},[425,132784,132785],{"class":427,"line":735},[425,132786,132787],{"class":1216},"\u002F* 绝对定位 *\u002F\n",[425,132789,132790,132793,132795,132797,132799,132801],{"class":427,"line":743},[425,132791,132792],{"class":431},".absolute",[425,132794,80562],{"class":701},[425,132796,129667],{"class":691},[425,132798,52192],{"class":701},[425,132800,55586],{"class":691},[425,132802,130237],{"class":701},[425,132804,132805],{"class":427,"line":751},[425,132806,132807],{"class":1216},"\u002F* 固定定位 *\u002F\n",[425,132809,132810,132813,132815,132817,132819,132821],{"class":427,"line":759},[425,132811,132812],{"class":431},".fixed",[425,132814,80562],{"class":701},[425,132816,129667],{"class":691},[425,132818,52192],{"class":701},[425,132820,86988],{"class":691},[425,132822,130237],{"class":701},[425,132824,132825],{"class":427,"line":770},[425,132826,132827],{"class":1216},"\u002F* 粘性定位 *\u002F\n",[425,132829,132830,132833,132835,132837,132839,132842],{"class":427,"line":780},[425,132831,132832],{"class":431},".sticky",[425,132834,80562],{"class":701},[425,132836,129667],{"class":691},[425,132838,52192],{"class":701},[425,132840,132841],{"class":691},"sticky",[425,132843,130237],{"class":701},[972,132845,132846,132849],{"start":805},[450,132847,132848],{},"一定要用好注释",[450,132850,132851],{},"浮动的盒子不会有外边距合并的问题",[1074,132853,132195],{},{"title":395,"searchDepth":698,"depth":698,"links":132855},[132856,132857],{"id":132232,"depth":698,"text":132233},{"id":132296,"depth":698,"text":132297,"children":132858},[132859,132860,132861,132862,132863,132864,132865],{"id":132300,"depth":710,"text":132301},{"id":132406,"depth":710,"text":132407},{"id":132442,"depth":710,"text":132443},{"id":132463,"depth":710,"text":132464},{"id":132498,"depth":710,"text":132499},{"id":132531,"depth":710,"text":132532},{"id":132606,"depth":710,"text":132607},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":132224,"description":24374},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132872,"title":132873,"body":132874,"description":24374,"extension":1082,"meta":134360,"navigation":1084,"path":134361,"seo":134362,"stem":134363,"__hash__":134364},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132875,"toc":134352},[132876,132879,132883,132887,132898,132902,132919,132963,132996,132999,133016,133019,133022,133066,133070,133074,133077,133080,133084,133087,133098,133161,133202,133205,133220,133274,133282,133285,133296,133350,133376,133379,133392,133446,133478,133532,133555,133609,133612,133615,133622,133676,133697,133751,133754,133757,133842,133850,133907,133930,133934,133937,133955,133959,133978,134032,134070,134074,134077,134080,134102,134106,134114,134117,134122,134133,134136,134140,134154,134198,134201,134205,134208,134213,134239,134244,134321,134324,134328,134331,134334,134337,134340,134343,134346,134349],[10,132877,132873],{"id":132878},"_11-传统布局与定位体系",[1099,132880,132882],{"id":132881},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[14,132884,132886],{"id":132885},"_1111-普通流标准流","11.1.1 普通流（标准流）",[447,132888,132889,132892,132895],{},[450,132890,132891],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[450,132893,132894],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[450,132896,132897],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[14,132899,132901],{"id":132900},"_1112-浮动","11.1.2 浮动",[447,132903,132904,132907,132910,132913,132916],{},[450,132905,132906],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[450,132908,132909],{},"浮动可以改变元素标签默认的排列方式",[450,132911,132912],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[450,132914,132915],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[450,132917,132918],{},"在使用行内块转换时盒子之间是有空隙的",[416,132920,132921],{"className":127307,"code":131773,"language":127309,"meta":395,"style":395},[422,132922,132923,132929,132939,132943,132949,132959],{"__ignoreMap":395},[425,132924,132925,132927],{"class":427,"line":428},[425,132926,131780],{"class":431},[425,132928,16569],{"class":701},[425,132930,132931,132933,132935,132937],{"class":427,"line":698},[425,132932,131787],{"class":691},[425,132934,52192],{"class":701},[425,132936,46],{"class":691},[425,132938,2307],{"class":701},[425,132940,132941],{"class":427,"line":710},[425,132942,2578],{"class":701},[425,132944,132945,132947],{"class":427,"line":721},[425,132946,131802],{"class":431},[425,132948,16569],{"class":701},[425,132950,132951,132953,132955,132957],{"class":427,"line":735},[425,132952,131787],{"class":691},[425,132954,52192],{"class":701},[425,132956,73277],{"class":691},[425,132958,2307],{"class":701},[425,132960,132961],{"class":427,"line":743},[425,132962,2578],{"class":701},[35,132964,132965,132973],{},[38,132966,132967],{},[41,132968,132969,132971],{},[44,132970,127771],{"align":46},[44,132972,50],{"align":46},[55,132974,132975,132982,132989],{},[41,132976,132977,132979],{},[60,132978,55492],{"align":46},[60,132980,132981],{"align":46},"元素不浮动（默认值）",[41,132983,132984,132986],{},[60,132985,46],{"align":46},[60,132987,132988],{"align":46},"元素向左浮动",[41,132990,132991,132993],{},[60,132992,73277],{"align":46},[60,132994,132995],{"align":46},"元素向右浮动",[19,132997,132998],{},"浮动重点：",[447,133000,133001,133004,133007,133010,133013],{},[450,133002,133003],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[450,133005,133006],{},"浮动的元素会一行内显示并且元素顶部对齐",[450,133008,133009],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[450,133011,133012],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[450,133014,133015],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,133017,133018],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,133020,133021],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[416,133023,133024],{"className":127307,"code":131773,"language":127309,"meta":395,"style":395},[422,133025,133026,133032,133042,133046,133052,133062],{"__ignoreMap":395},[425,133027,133028,133030],{"class":427,"line":428},[425,133029,131780],{"class":431},[425,133031,16569],{"class":701},[425,133033,133034,133036,133038,133040],{"class":427,"line":698},[425,133035,131787],{"class":691},[425,133037,52192],{"class":701},[425,133039,46],{"class":691},[425,133041,2307],{"class":701},[425,133043,133044],{"class":427,"line":710},[425,133045,2578],{"class":701},[425,133047,133048,133050],{"class":427,"line":721},[425,133049,131802],{"class":431},[425,133051,16569],{"class":701},[425,133053,133054,133056,133058,133060],{"class":427,"line":735},[425,133055,131787],{"class":691},[425,133057,52192],{"class":701},[425,133059,73277],{"class":691},[425,133061,2307],{"class":701},[425,133063,133064],{"class":427,"line":743},[425,133065,2578],{"class":701},[14,133067,133069],{"id":133068},"_1113-定位","11.1.3 定位",[22995,133071,133073],{"id":133072},"_11131-使用场景","11.1.3.1 使用场景",[19,133075,133076],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,133078,133079],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22995,133081,133083],{"id":133082},"_11132-定位组成","11.1.3.2 定位组成",[19,133085,133086],{},"定位 = 定位模式 + 边偏移",[972,133088,133089],{},[450,133090,133091,133094,133095],{},[400,133092,133093],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[400,133096,133097],{},"定位模式",[416,133099,133101],{"className":127307,"code":133100,"language":127309,"meta":395,"style":395},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[422,133102,133103,133109,133123,133140,133157],{"__ignoreMap":395},[425,133104,133105,133107],{"class":427,"line":428},[425,133106,131155],{"class":431},[425,133108,16569],{"class":701},[425,133110,133111,133114,133116,133118,133120],{"class":427,"line":698},[425,133112,133113],{"class":691},"  position",[425,133115,52192],{"class":701},[425,133117,55519],{"class":691},[425,133119,131170],{"class":701},[425,133121,133122],{"class":1216},"\u002F* 定位模式 *\u002F\n",[425,133124,133125,133128,133130,133132,133134,133137],{"class":427,"line":710},[425,133126,133127],{"class":691},"  top",[425,133129,52192],{"class":701},[425,133131,1594],{"class":691},[425,133133,52247],{"class":1155},[425,133135,133136],{"class":701},";           ",[425,133138,133139],{"class":1216},"\u002F* 边偏移：上 *\u002F\n",[425,133141,133142,133145,133147,133149,133151,133154],{"class":427,"line":721},[425,133143,133144],{"class":691},"  left",[425,133146,52192],{"class":701},[425,133148,1848],{"class":691},[425,133150,52247],{"class":1155},[425,133152,133153],{"class":701},";          ",[425,133155,133156],{"class":1216},"\u002F* 边偏移：左 *\u002F\n",[425,133158,133159],{"class":427,"line":735},[425,133160,2578],{"class":701},[35,133162,133163,133172],{},[38,133164,133165],{},[41,133166,133167,133169],{},[44,133168,1304],{"align":46},[44,133170,133171],{"align":46},"语义",[55,133173,133174,133181,133188,133195],{},[41,133175,133176,133178],{},[60,133177,132760],{"align":46},[60,133179,133180],{"align":46},"静态定位",[41,133182,133183,133185],{},[60,133184,55519],{"align":46},[60,133186,133187],{"align":46},"相对定位",[41,133189,133190,133192],{},[60,133191,55586],{"align":46},[60,133193,133194],{"align":46},"绝对定位",[41,133196,133197,133199],{},[60,133198,86988],{"align":46},[60,133200,133201],{"align":46},"固定定位",[19,133203,133204],{},"（1）静态定位：",[447,133206,133207,133218],{},[450,133208,133209,133210,133213,133214,133217],{},"静态定位是元素的 ",[400,133211,133212],{},"默认定位方式"," ， ",[400,133215,133216],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[450,133219,6181],{},[416,133221,133222],{"className":127307,"code":133100,"language":127309,"meta":395,"style":395},[422,133223,133224,133230,133242,133256,133270],{"__ignoreMap":395},[425,133225,133226,133228],{"class":427,"line":428},[425,133227,131155],{"class":431},[425,133229,16569],{"class":701},[425,133231,133232,133234,133236,133238,133240],{"class":427,"line":698},[425,133233,133113],{"class":691},[425,133235,52192],{"class":701},[425,133237,55519],{"class":691},[425,133239,131170],{"class":701},[425,133241,133122],{"class":1216},[425,133243,133244,133246,133248,133250,133252,133254],{"class":427,"line":710},[425,133245,133127],{"class":691},[425,133247,52192],{"class":701},[425,133249,1594],{"class":691},[425,133251,52247],{"class":1155},[425,133253,133136],{"class":701},[425,133255,133139],{"class":1216},[425,133257,133258,133260,133262,133264,133266,133268],{"class":427,"line":721},[425,133259,133144],{"class":691},[425,133261,52192],{"class":701},[425,133263,1848],{"class":691},[425,133265,52247],{"class":1155},[425,133267,133153],{"class":701},[425,133269,133156],{"class":1216},[425,133271,133272],{"class":427,"line":735},[425,133273,2578],{"class":701},[447,133275,133276,133279],{},[450,133277,133278],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[450,133280,133281],{},"静态定位在布局时我们几乎不用的",[19,133283,133284],{},"（2）相对定位",[447,133286,133287,133294],{},[450,133288,133289,133290,133293],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[400,133291,133292],{},"原来的位置"," 来说的（自恋型）",[450,133295,6181],{},[416,133297,133298],{"className":127307,"code":133100,"language":127309,"meta":395,"style":395},[422,133299,133300,133306,133318,133332,133346],{"__ignoreMap":395},[425,133301,133302,133304],{"class":427,"line":428},[425,133303,131155],{"class":431},[425,133305,16569],{"class":701},[425,133307,133308,133310,133312,133314,133316],{"class":427,"line":698},[425,133309,133113],{"class":691},[425,133311,52192],{"class":701},[425,133313,55519],{"class":691},[425,133315,131170],{"class":701},[425,133317,133122],{"class":1216},[425,133319,133320,133322,133324,133326,133328,133330],{"class":427,"line":710},[425,133321,133127],{"class":691},[425,133323,52192],{"class":701},[425,133325,1594],{"class":691},[425,133327,52247],{"class":1155},[425,133329,133136],{"class":701},[425,133331,133139],{"class":1216},[425,133333,133334,133336,133338,133340,133342,133344],{"class":427,"line":721},[425,133335,133144],{"class":691},[425,133337,52192],{"class":701},[425,133339,1848],{"class":691},[425,133341,52247],{"class":1155},[425,133343,133153],{"class":701},[425,133345,133156],{"class":1216},[425,133347,133348],{"class":427,"line":735},[425,133349,2578],{"class":701},[447,133351,133352],{},[450,133353,133354,133355,133357,133358,133360,133361,133364,133365,133368,133369,133371,133372,133375],{},"相对定位的特点：",[54471,133356],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54471,133359],{},"  ② ",[400,133362,133363],{},"原来"," 在标准流的 ",[400,133366,133367],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54471,133370],{},"  ③因此， ",[400,133373,133374],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,133377,133378],{},"（3）绝对定位",[447,133380,133381,133390],{},[450,133382,133383,133385,133386,133389],{},[400,133384,133194],{}," 是元素在移动位置的时候，是相对于它 ",[400,133387,133388],{},"祖先元素"," 来说的（拼爹型）",[450,133391,6181],{},[416,133393,133394],{"className":127307,"code":133100,"language":127309,"meta":395,"style":395},[422,133395,133396,133402,133414,133428,133442],{"__ignoreMap":395},[425,133397,133398,133400],{"class":427,"line":428},[425,133399,131155],{"class":431},[425,133401,16569],{"class":701},[425,133403,133404,133406,133408,133410,133412],{"class":427,"line":698},[425,133405,133113],{"class":691},[425,133407,52192],{"class":701},[425,133409,55519],{"class":691},[425,133411,131170],{"class":701},[425,133413,133122],{"class":1216},[425,133415,133416,133418,133420,133422,133424,133426],{"class":427,"line":710},[425,133417,133127],{"class":691},[425,133419,52192],{"class":701},[425,133421,1594],{"class":691},[425,133423,52247],{"class":1155},[425,133425,133136],{"class":701},[425,133427,133139],{"class":1216},[425,133429,133430,133432,133434,133436,133438,133440],{"class":427,"line":721},[425,133431,133144],{"class":691},[425,133433,52192],{"class":701},[425,133435,1848],{"class":691},[425,133437,52247],{"class":1155},[425,133439,133153],{"class":701},[425,133441,133156],{"class":1216},[425,133443,133444],{"class":427,"line":735},[425,133445,2578],{"class":701},[447,133447,133448,133463,133472,133475],{},[450,133449,133450,133451,133453,133454,133456,133457,133459,133460,133462],{},"绝对定位的特点：",[54471,133452],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54471,133455],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54471,133458],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54471,133461],{},"  (4)固定定位",[450,133464,133465,133467,133468,133471],{},[400,133466,133201],{}," 是元素 ",[400,133469,133470],{},"固定于浏览器可视区的位置"," 。（认死理型）",[450,133473,133474],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[450,133476,133477],{},"语法:",[416,133479,133480],{"className":127307,"code":133100,"language":127309,"meta":395,"style":395},[422,133481,133482,133488,133500,133514,133528],{"__ignoreMap":395},[425,133483,133484,133486],{"class":427,"line":428},[425,133485,131155],{"class":431},[425,133487,16569],{"class":701},[425,133489,133490,133492,133494,133496,133498],{"class":427,"line":698},[425,133491,133113],{"class":691},[425,133493,52192],{"class":701},[425,133495,55519],{"class":691},[425,133497,131170],{"class":701},[425,133499,133122],{"class":1216},[425,133501,133502,133504,133506,133508,133510,133512],{"class":427,"line":710},[425,133503,133127],{"class":691},[425,133505,52192],{"class":701},[425,133507,1594],{"class":691},[425,133509,52247],{"class":1155},[425,133511,133136],{"class":701},[425,133513,133139],{"class":1216},[425,133515,133516,133518,133520,133522,133524,133526],{"class":427,"line":721},[425,133517,133144],{"class":691},[425,133519,52192],{"class":701},[425,133521,1848],{"class":691},[425,133523,52247],{"class":1155},[425,133525,133153],{"class":701},[425,133527,133156],{"class":1216},[425,133529,133530],{"class":427,"line":735},[425,133531,2578],{"class":701},[447,133533,133534,133543],{},[450,133535,133536,133537,133539,133540,133542],{},"特点:",[54471,133538],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54471,133541],{},"  ②固定定位不再占有原先的位置,完全脱标",[450,133544,133545,133546,133548,133549,133551,133552,133554],{},"固定在版心位置的方法:",[54471,133547],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54471,133550],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54471,133553],{},"  实例：",[416,133556,133557],{"className":127307,"code":133100,"language":127309,"meta":395,"style":395},[422,133558,133559,133565,133577,133591,133605],{"__ignoreMap":395},[425,133560,133561,133563],{"class":427,"line":428},[425,133562,131155],{"class":431},[425,133564,16569],{"class":701},[425,133566,133567,133569,133571,133573,133575],{"class":427,"line":698},[425,133568,133113],{"class":691},[425,133570,52192],{"class":701},[425,133572,55519],{"class":691},[425,133574,131170],{"class":701},[425,133576,133122],{"class":1216},[425,133578,133579,133581,133583,133585,133587,133589],{"class":427,"line":710},[425,133580,133127],{"class":691},[425,133582,52192],{"class":701},[425,133584,1594],{"class":691},[425,133586,52247],{"class":1155},[425,133588,133136],{"class":701},[425,133590,133139],{"class":1216},[425,133592,133593,133595,133597,133599,133601,133603],{"class":427,"line":721},[425,133594,133144],{"class":691},[425,133596,52192],{"class":701},[425,133598,1848],{"class":691},[425,133600,52247],{"class":1155},[425,133602,133153],{"class":701},[425,133604,133156],{"class":1216},[425,133606,133607],{"class":427,"line":735},[425,133608,2578],{"class":701},[393,133610],{"style":127163,"src":133611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,133613,133614],{},"(5)粘性定位",[447,133616,133617,133620],{},[450,133618,133619],{},"粘性定位可以被认为是相对定位和固定定位的混合",[450,133621,6181],{},[416,133623,133624],{"className":127307,"code":133100,"language":127309,"meta":395,"style":395},[422,133625,133626,133632,133644,133658,133672],{"__ignoreMap":395},[425,133627,133628,133630],{"class":427,"line":428},[425,133629,131155],{"class":431},[425,133631,16569],{"class":701},[425,133633,133634,133636,133638,133640,133642],{"class":427,"line":698},[425,133635,133113],{"class":691},[425,133637,52192],{"class":701},[425,133639,55519],{"class":691},[425,133641,131170],{"class":701},[425,133643,133122],{"class":1216},[425,133645,133646,133648,133650,133652,133654,133656],{"class":427,"line":710},[425,133647,133127],{"class":691},[425,133649,52192],{"class":701},[425,133651,1594],{"class":691},[425,133653,52247],{"class":1155},[425,133655,133136],{"class":701},[425,133657,133139],{"class":1216},[425,133659,133660,133662,133664,133666,133668,133670],{"class":427,"line":721},[425,133661,133144],{"class":691},[425,133663,52192],{"class":701},[425,133665,1848],{"class":691},[425,133667,52247],{"class":1155},[425,133669,133153],{"class":701},[425,133671,133156],{"class":1216},[425,133673,133674],{"class":427,"line":735},[425,133675,2578],{"class":701},[447,133677,133678],{},[450,133679,133680,133681,133683,133684,133686,133687,133689,133690,133693,133694,133696],{},"粘性定位的特点：",[54471,133682],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54471,133685],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54471,133688],{},"  ③必须添加 top 、left、right、bottom ",[400,133691,133692],{},"其中一个"," 才有效",[54471,133695],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[416,133698,133699],{"className":127307,"code":133100,"language":127309,"meta":395,"style":395},[422,133700,133701,133707,133719,133733,133747],{"__ignoreMap":395},[425,133702,133703,133705],{"class":427,"line":428},[425,133704,131155],{"class":431},[425,133706,16569],{"class":701},[425,133708,133709,133711,133713,133715,133717],{"class":427,"line":698},[425,133710,133113],{"class":691},[425,133712,52192],{"class":701},[425,133714,55519],{"class":691},[425,133716,131170],{"class":701},[425,133718,133122],{"class":1216},[425,133720,133721,133723,133725,133727,133729,133731],{"class":427,"line":710},[425,133722,133127],{"class":691},[425,133724,52192],{"class":701},[425,133726,1594],{"class":691},[425,133728,52247],{"class":1155},[425,133730,133136],{"class":701},[425,133732,133139],{"class":1216},[425,133734,133735,133737,133739,133741,133743,133745],{"class":427,"line":721},[425,133736,133144],{"class":691},[425,133738,52192],{"class":701},[425,133740,1848],{"class":691},[425,133742,52247],{"class":1155},[425,133744,133153],{"class":701},[425,133746,133156],{"class":1216},[425,133748,133749],{"class":427,"line":735},[425,133750,2578],{"class":701},[393,133752],{"style":127163,"src":133753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,133755,133756],{},"(6)总结",[35,133758,133759,133774],{},[38,133760,133761],{},[41,133762,133763,133765,133768,133771],{},[44,133764,133097],{"align":46},[44,133766,133767],{"align":46},"是否脱标",[44,133769,133770],{"align":46},"移动位置",[44,133772,133773],{"align":46},"是否常用",[55,133775,133776,133789,133803,133817,133830],{},[41,133777,133778,133781,133783,133786],{},[60,133779,133780],{"align":46},"Static 静态定位",[60,133782,105433],{"align":46},[60,133784,133785],{"align":46},"不能使用边偏移",[60,133787,133788],{"align":46},"很少",[41,133790,133791,133794,133797,133800],{},[60,133792,133793],{"align":46},"Relative 相对定位",[60,133795,133796],{"align":46},"否(占有位置)",[60,133798,133799],{"align":46},"相对于自身位置移动",[60,133801,133802],{"align":46},"基本单独使用",[41,133804,133805,133808,133811,133814],{},[60,133806,133807],{"align":46},"Absolute 绝对定位",[60,133809,133810],{"align":46},"是(不占有位置)",[60,133812,133813],{"align":46},"带有定位的父级",[60,133815,133816],{"align":46},"要和定位父级元素搭配使用",[41,133818,133819,133822,133824,133827],{},[60,133820,133821],{"align":46},"Fixed 固定定位",[60,133823,133810],{"align":46},[60,133825,133826],{"align":46},"浏览器可视区",[60,133828,133829],{"align":46},"单独使用,不需要父级",[41,133831,133832,133835,133837,133839],{},[60,133833,133834],{"align":46},"Sticky 粘性定位",[60,133836,133796],{"align":46},[60,133838,133826],{"align":46},[60,133840,133841],{"align":46},"当前阶段少",[972,133843,133844],{"start":698},[450,133845,133846,133849],{},[400,133847,133848],{},"边偏移"," 则决定了该元素的最终位置",[35,133851,133852,133863],{},[38,133853,133854],{},[41,133855,133856,133859,133861],{},[44,133857,133858],{"align":46},"边偏移属性",[44,133860,53],{"align":46},[44,133862,50],{"align":46},[55,133864,133865,133876,133887,133897],{},[41,133866,133867,133870,133873],{},[60,133868,133869],{"align":46},"top",[60,133871,133872],{"align":46},"top: 80px;",[60,133874,133875],{"align":46},"顶端偏移量，定义元素相对于父元素上边线的距离",[41,133877,133878,133881,133884],{},[60,133879,133880],{"align":46},"bottom",[60,133882,133883],{"align":46},"bottom: 80px ;",[60,133885,133886],{"align":46},"底部偏移量，定义元素相对于其父元素下边线的距离",[41,133888,133889,133891,133894],{},[60,133890,46],{"align":46},[60,133892,133893],{"align":46},"left: 80px ;",[60,133895,133896],{"align":46},"左侧偏移量，定义元素相对于其父元素左边线的距离",[41,133898,133899,133901,133904],{},[60,133900,73277],{"align":46},[60,133902,133903],{"align":46},"right: 80px ;",[60,133905,133906],{"align":46},"右侧偏移量，定义元素相对于其父元素右边线的距离",[447,133908,133909],{},[450,133910,970,133911,133913,133914,133916,133917,133919,133920,133923,133924,133926,133927,133929],{},[54471,133912],{},"  ① ",[400,133915,133848],{}," 需要和 ",[400,133918,133097],{}," 联合使用， ",[400,133921,133922],{},"单独使用无效"," ；",[54471,133925],{},"  ②top和bottom不要同时使用",[54471,133928],{},"  ③left和right不要同时使用",[22995,133931,133933],{"id":133932},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,133935,133936],{},"子级是绝对定位的话，父级要用相对定位",[447,133938,133939,133942,133945,133948],{},[450,133940,133941],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[450,133943,133944],{},"父盒子需要加定位限制子盒子在父盒子内显示",[450,133946,133947],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[450,133949,133950,133951,133954],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[400,133952,133953],{},"子绝父绝"," 也会遇到",[22995,133956,133958],{"id":133957},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[447,133960,133961,133976],{},[450,133962,133963,133964,133967,133968,133971,133972,133975],{},"在使用 ",[400,133965,133966],{},"定位"," 布局时，可能会 ",[400,133969,133970],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[400,133973,133974],{},"z-index"," 来控制盒子的前后次序 (z轴)",[450,133977,6181],{},[416,133979,133980],{"className":127307,"code":133100,"language":127309,"meta":395,"style":395},[422,133981,133982,133988,134000,134014,134028],{"__ignoreMap":395},[425,133983,133984,133986],{"class":427,"line":428},[425,133985,131155],{"class":431},[425,133987,16569],{"class":701},[425,133989,133990,133992,133994,133996,133998],{"class":427,"line":698},[425,133991,133113],{"class":691},[425,133993,52192],{"class":701},[425,133995,55519],{"class":691},[425,133997,131170],{"class":701},[425,133999,133122],{"class":1216},[425,134001,134002,134004,134006,134008,134010,134012],{"class":427,"line":710},[425,134003,133127],{"class":691},[425,134005,52192],{"class":701},[425,134007,1594],{"class":691},[425,134009,52247],{"class":1155},[425,134011,133136],{"class":701},[425,134013,133139],{"class":1216},[425,134015,134016,134018,134020,134022,134024,134026],{"class":427,"line":721},[425,134017,133144],{"class":691},[425,134019,52192],{"class":701},[425,134021,1848],{"class":691},[425,134023,52247],{"class":1155},[425,134025,133153],{"class":701},[425,134027,133156],{"class":1216},[425,134029,134030],{"class":427,"line":735},[425,134031,2578],{"class":701},[447,134033,134034],{},[450,134035,134036,134037,133913,134039,134041,134042,128470,134045,83294,134048,134050,134051,134053,134054,134057,134058,133923,134061,134063,134064,134067,134069],{},"z-index的特性",[54471,134038],{},[400,134040,127771],{}," ： ",[400,134043,134044],{},"正整数",[400,134046,134047],{},"负整数",[400,134049,1341],{}," ，默认值是 0，数值越大，盒子越靠上；",[54471,134052],{},"  ②如果 ",[400,134055,134056],{},"属性值相同"," ，则按照书写顺序， ",[400,134059,134060],{},"后来居上",[54471,134062],{},"  ③数字后面 ",[400,134065,134066],{},"不能加单位",[54471,134068],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22995,134071,134073],{"id":134072},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,134075,134076],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,134078,134079],{},"方法:",[447,134081,134082,134092],{},[450,134083,134084,134085,134088,134089],{},"left: 50%; 让 ",[400,134086,134087],{},"盒子的左侧"," 移动到 ",[400,134090,134091],{},"父级元素的水平中心位置",[450,134093,134094,134095,134098,134099],{},"margin-left: -100px; 让盒子 ",[400,134096,134097],{},"向左"," 移动 ",[400,134100,134101],{},"自身宽度的一半",[22995,134103,134105],{"id":134104},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[972,134107,134108,134111],{},[450,134109,134110],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[450,134112,134113],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,134115,134116],{},"也就是说绝对定位和固定定位和浮动类似",[972,134118,134119],{"start":710},[450,134120,134121],{},"display 是显示模式， 可以改变显示模式有以下方式:",[447,134123,134124,134127,134130],{},[450,134125,134126],{},"可以用inline-block 转换为行内块",[450,134128,134129],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[450,134131,134132],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,134134,134135],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22995,134137,134139],{"id":134138},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[972,134141,134142,134145,134148,134151],{},[450,134143,134144],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[450,134146,134147],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[450,134149,134150],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[450,134152,134153],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[416,134155,134156],{"className":127307,"code":131773,"language":127309,"meta":395,"style":395},[422,134157,134158,134164,134174,134178,134184,134194],{"__ignoreMap":395},[425,134159,134160,134162],{"class":427,"line":428},[425,134161,131780],{"class":431},[425,134163,16569],{"class":701},[425,134165,134166,134168,134170,134172],{"class":427,"line":698},[425,134167,131787],{"class":691},[425,134169,52192],{"class":701},[425,134171,46],{"class":691},[425,134173,2307],{"class":701},[425,134175,134176],{"class":427,"line":710},[425,134177,2578],{"class":701},[425,134179,134180,134182],{"class":427,"line":721},[425,134181,131802],{"class":431},[425,134183,16569],{"class":701},[425,134185,134186,134188,134190,134192],{"class":427,"line":735},[425,134187,131787],{"class":691},[425,134189,52192],{"class":701},[425,134191,73277],{"class":691},[425,134193,2307],{"class":701},[425,134195,134196],{"class":427,"line":743},[425,134197,2578],{"class":701},[393,134199],{"style":127163,"src":134200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22995,134202,134204],{"id":134203},"_11138-轮播图","11.1.3.8 轮播图",[393,134206],{"style":127163,"src":134207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[972,134209,134210],{},[450,134211,134212],{},"制作顺序:",[447,134214,134215,134218,134221,134230],{},[450,134216,134217],{},"大盒子我们类名为： tb-promo 淘宝广告",[450,134219,134220],{},"里面先放一张图片",[450,134222,134223,134224,134226,134227,134229],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54471,134225],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54471,134228],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[450,134231,134232,134233,134235,134236,134238],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54471,134234],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54471,134237],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[972,134240,134241],{"start":698},[450,134242,134243],{},"代码模块",[416,134245,134247],{"className":127307,"code":134246,"language":127309,"meta":395,"style":395},"\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",[422,134248,134249,134254,134261,134271,134281,134291,134295,134300,134307,134317],{"__ignoreMap":395},[425,134250,134251],{"class":427,"line":428},[425,134252,134253],{"class":1216},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[425,134255,134256,134259],{"class":427,"line":698},[425,134257,134258],{"class":431},".son",[425,134260,16569],{"class":701},[425,134262,134263,134265,134267,134269],{"class":427,"line":710},[425,134264,133113],{"class":691},[425,134266,52192],{"class":701},[425,134268,55586],{"class":691},[425,134270,2307],{"class":701},[425,134272,134273,134275,134277,134279],{"class":427,"line":721},[425,134274,133127],{"class":691},[425,134276,52192],{"class":701},[425,134278,1341],{"class":691},[425,134280,2307],{"class":701},[425,134282,134283,134285,134287,134289],{"class":427,"line":735},[425,134284,133144],{"class":691},[425,134286,52192],{"class":701},[425,134288,1341],{"class":691},[425,134290,2307],{"class":701},[425,134292,134293],{"class":427,"line":743},[425,134294,2578],{"class":701},[425,134296,134297],{"class":427,"line":751},[425,134298,134299],{"class":1216},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[425,134301,134302,134305],{"class":427,"line":759},[425,134303,134304],{"class":431},".father",[425,134306,16569],{"class":701},[425,134308,134309,134311,134313,134315],{"class":427,"line":770},[425,134310,133113],{"class":691},[425,134312,52192],{"class":701},[425,134314,55519],{"class":691},[425,134316,2307],{"class":701},[425,134318,134319],{"class":427,"line":780},[425,134320,2578],{"class":701},[19,134322,134323],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[14,134325,134327],{"id":134326},"_1114-定位数值的移动","11.1.4 定位数值的移动",[393,134329],{"style":127163,"src":134330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,134332,134333],{},"✨ 黄金口诀：",[19,134335,134336],{},"\"TOP正下负上，LEFT正右负左\"",[19,134338,134339],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,134341,134342],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,134344,134345],{},"✨ 简单记：",[19,134347,134348],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[1074,134350,134351],{},"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":395,"searchDepth":698,"depth":698,"links":134353},[134354],{"id":132881,"depth":698,"text":132882,"children":134355},[134356,134357,134358,134359],{"id":132885,"depth":710,"text":132886},{"id":132900,"depth":710,"text":132901},{"id":133068,"depth":710,"text":133069},{"id":134326,"depth":710,"text":134327},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132873,"description":24374},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134366,"title":134367,"body":134368,"description":24374,"extension":1082,"meta":135791,"navigation":1084,"path":135792,"seo":135793,"stem":135794,"__hash__":135795},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134369,"toc":135770},[134370,134373,134377,134385,134389,134394,134402,134414,134418,134423,134431,134442,134446,134451,134492,134500,134504,134507,134510,134513,134607,134610,134704,134707,134801,134804,134807,134842,134845,134848,134878,134881,134884,134887,134890,134893,134896,134899,134969,134972,134976,134980,135021,135025,135031,135034,135037,135041,135044,135047,135050,135131,135134,135137,135141,135145,135148,135151,135154,135157,135160,135166,135175,135179,135198,135202,135212,135215,135218,135221,135224,135227,135230,135233,135236,135245,135249,135258,135261,135266,135319,135324,135490,135493,135496,135501,135504,135507,135510,135513,135518,135666,135669,135672,135677,135680,135685,135719,135722,135725,135729,135732,135739,135742,135745,135748,135751,135754,135757,135760,135764,135767],[10,134371,134367],{"id":134372},"_12-显示隐藏与图形资源",[1099,134374,134376],{"id":134375},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[447,134378,134379,134382],{},[450,134380,134381],{},"目的:让一个元素在页面中消失或者显示出来",[450,134383,134384],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[14,134386,134388],{"id":134387},"_1211-display-显示","12.1.1 display 显示",[972,134390,134391],{},[450,134392,134393],{},"display 设置或检索对象是否及如何显示",[447,134395,134396,134399],{},[450,134397,134398],{},"display: none;隐藏对象",[450,134400,134401],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[972,134403,134404,134411],{"start":698},[450,134405,134406,134407,134410],{},"特点： display 隐藏元素后， ",[400,134408,134409],{},"不再占"," 有原来的位置",[450,134412,134413],{},"在js中使用非常的广泛",[14,134415,134417],{"id":134416},"_1212-visibility可见性","12.1.2 visibility可见性",[972,134419,134420],{},[450,134421,134422],{},"visibility 属性用于指定一个元素应可见还是隐藏",[447,134424,134425,134428],{},[450,134426,134427],{},"visibility： visible；元素可见",[450,134429,134430],{},"visibility：hidden；元素隐藏",[972,134432,134433,134436,134439],{"start":698},[450,134434,134435],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[450,134437,134438],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[450,134440,134441],{},"隐藏后继续占有原有位置",[14,134443,134445],{"id":134444},"_1213-overflow溢出","12.1.3 overflow溢出",[447,134447,134448],{},[450,134449,134450],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[35,134452,134453,134461],{},[38,134454,134455],{},[41,134456,134457,134459],{},[44,134458,127771],{"align":46},[44,134460,50],{"align":46},[55,134462,134463,134471,134478,134485],{},[41,134464,134465,134468],{},[60,134466,134467],{"align":46},"visible",[60,134469,134470],{"align":46},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[41,134472,134473,134475],{},[60,134474,62469],{"align":46},[60,134476,134477],{"align":46},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[41,134479,134480,134482],{},[60,134481,129727],{"align":46},[60,134483,134484],{"align":46},"不管超出内容否，总是显示滚动条",[41,134486,134487,134489],{},[60,134488,73418],{"align":46},[60,134490,134491],{"align":46},"超出自动显示滚动条，不超出不显示滚动条",[447,134493,134494,134497],{},[450,134495,134496],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[450,134498,134499],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[14,134501,134503],{"id":134502},"_1214-案例收获","12.1.4 案例收获",[393,134505],{"style":127163,"src":134506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,134508,134509],{},"问题：没做出来动态效果，使用hover没实现",[19,134511,134512],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[416,134514,134515],{"className":127307,"code":132739,"language":127309,"meta":395,"style":395},[422,134516,134517,134521,134535,134539,134553,134557,134571,134575,134589,134593],{"__ignoreMap":395},[425,134518,134519],{"class":427,"line":428},[425,134520,132746],{"class":1216},[425,134522,134523,134525,134527,134529,134531,134533],{"class":427,"line":698},[425,134524,132751],{"class":431},[425,134526,80562],{"class":701},[425,134528,129667],{"class":691},[425,134530,52192],{"class":701},[425,134532,132760],{"class":691},[425,134534,130237],{"class":701},[425,134536,134537],{"class":427,"line":710},[425,134538,132767],{"class":1216},[425,134540,134541,134543,134545,134547,134549,134551],{"class":427,"line":721},[425,134542,132772],{"class":431},[425,134544,80562],{"class":701},[425,134546,129667],{"class":691},[425,134548,52192],{"class":701},[425,134550,55519],{"class":691},[425,134552,130237],{"class":701},[425,134554,134555],{"class":427,"line":735},[425,134556,132787],{"class":1216},[425,134558,134559,134561,134563,134565,134567,134569],{"class":427,"line":743},[425,134560,132792],{"class":431},[425,134562,80562],{"class":701},[425,134564,129667],{"class":691},[425,134566,52192],{"class":701},[425,134568,55586],{"class":691},[425,134570,130237],{"class":701},[425,134572,134573],{"class":427,"line":751},[425,134574,132807],{"class":1216},[425,134576,134577,134579,134581,134583,134585,134587],{"class":427,"line":759},[425,134578,132812],{"class":431},[425,134580,80562],{"class":701},[425,134582,129667],{"class":691},[425,134584,52192],{"class":701},[425,134586,86988],{"class":691},[425,134588,130237],{"class":701},[425,134590,134591],{"class":427,"line":770},[425,134592,132827],{"class":1216},[425,134594,134595,134597,134599,134601,134603,134605],{"class":427,"line":780},[425,134596,132832],{"class":431},[425,134598,80562],{"class":701},[425,134600,129667],{"class":691},[425,134602,52192],{"class":701},[425,134604,132841],{"class":691},[425,134606,130237],{"class":701},[19,134608,134609],{},"完整代码：",[416,134611,134612],{"className":127307,"code":132739,"language":127309,"meta":395,"style":395},[422,134613,134614,134618,134632,134636,134650,134654,134668,134672,134686,134690],{"__ignoreMap":395},[425,134615,134616],{"class":427,"line":428},[425,134617,132746],{"class":1216},[425,134619,134620,134622,134624,134626,134628,134630],{"class":427,"line":698},[425,134621,132751],{"class":431},[425,134623,80562],{"class":701},[425,134625,129667],{"class":691},[425,134627,52192],{"class":701},[425,134629,132760],{"class":691},[425,134631,130237],{"class":701},[425,134633,134634],{"class":427,"line":710},[425,134635,132767],{"class":1216},[425,134637,134638,134640,134642,134644,134646,134648],{"class":427,"line":721},[425,134639,132772],{"class":431},[425,134641,80562],{"class":701},[425,134643,129667],{"class":691},[425,134645,52192],{"class":701},[425,134647,55519],{"class":691},[425,134649,130237],{"class":701},[425,134651,134652],{"class":427,"line":735},[425,134653,132787],{"class":1216},[425,134655,134656,134658,134660,134662,134664,134666],{"class":427,"line":743},[425,134657,132792],{"class":431},[425,134659,80562],{"class":701},[425,134661,129667],{"class":691},[425,134663,52192],{"class":701},[425,134665,55586],{"class":691},[425,134667,130237],{"class":701},[425,134669,134670],{"class":427,"line":751},[425,134671,132807],{"class":1216},[425,134673,134674,134676,134678,134680,134682,134684],{"class":427,"line":759},[425,134675,132812],{"class":431},[425,134677,80562],{"class":701},[425,134679,129667],{"class":691},[425,134681,52192],{"class":701},[425,134683,86988],{"class":691},[425,134685,130237],{"class":701},[425,134687,134688],{"class":427,"line":770},[425,134689,132827],{"class":1216},[425,134691,134692,134694,134696,134698,134700,134702],{"class":427,"line":780},[425,134693,132832],{"class":431},[425,134695,80562],{"class":701},[425,134697,129667],{"class":691},[425,134699,52192],{"class":701},[425,134701,132841],{"class":691},[425,134703,130237],{"class":701},[19,134705,134706],{},"分布思路重点详解：",[416,134708,134709],{"className":127307,"code":132739,"language":127309,"meta":395,"style":395},[422,134710,134711,134715,134729,134733,134747,134751,134765,134769,134783,134787],{"__ignoreMap":395},[425,134712,134713],{"class":427,"line":428},[425,134714,132746],{"class":1216},[425,134716,134717,134719,134721,134723,134725,134727],{"class":427,"line":698},[425,134718,132751],{"class":431},[425,134720,80562],{"class":701},[425,134722,129667],{"class":691},[425,134724,52192],{"class":701},[425,134726,132760],{"class":691},[425,134728,130237],{"class":701},[425,134730,134731],{"class":427,"line":710},[425,134732,132767],{"class":1216},[425,134734,134735,134737,134739,134741,134743,134745],{"class":427,"line":721},[425,134736,132772],{"class":431},[425,134738,80562],{"class":701},[425,134740,129667],{"class":691},[425,134742,52192],{"class":701},[425,134744,55519],{"class":691},[425,134746,130237],{"class":701},[425,134748,134749],{"class":427,"line":735},[425,134750,132787],{"class":1216},[425,134752,134753,134755,134757,134759,134761,134763],{"class":427,"line":743},[425,134754,132792],{"class":431},[425,134756,80562],{"class":701},[425,134758,129667],{"class":691},[425,134760,52192],{"class":701},[425,134762,55586],{"class":691},[425,134764,130237],{"class":701},[425,134766,134767],{"class":427,"line":751},[425,134768,132807],{"class":1216},[425,134770,134771,134773,134775,134777,134779,134781],{"class":427,"line":759},[425,134772,132812],{"class":431},[425,134774,80562],{"class":701},[425,134776,129667],{"class":691},[425,134778,52192],{"class":701},[425,134780,86988],{"class":691},[425,134782,130237],{"class":701},[425,134784,134785],{"class":427,"line":770},[425,134786,132827],{"class":1216},[425,134788,134789,134791,134793,134795,134797,134799],{"class":427,"line":780},[425,134790,132832],{"class":431},[425,134792,80562],{"class":701},[425,134794,129667],{"class":691},[425,134796,52192],{"class":701},[425,134798,132841],{"class":691},[425,134800,130237],{"class":701},[393,134802],{"style":127163,"src":134803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,134805,134806],{},"图片太大，盒子太小，此时需要修改图片的大小",[416,134808,134810],{"className":128054,"code":134809,"language":128056,"meta":395,"style":395},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[422,134811,134812],{"__ignoreMap":395},[425,134813,134814,134816,134818,134820,134822,134825,134827,134829,134832,134835,134837,134840],{"class":427,"line":428},[425,134815,2057],{"class":701},[425,134817,393],{"class":52055},[425,134819,55994],{"class":431},[425,134821,1204],{"class":701},[425,134823,134824],{"class":435},"\"images\u002Fpic.jpg\"",[425,134826,56002],{"class":431},[425,134828,1204],{"class":701},[425,134830,134831],{"class":435},"\"描述文字\"",[425,134833,134834],{"class":431}," title",[425,134836,1204],{"class":701},[425,134838,134839],{"class":435},"\"悬停提示\"",[425,134841,52062],{"class":701},[393,134843],{"style":127163,"src":134844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,134846,134847],{},"制造遮罩层",[416,134849,134850],{"className":128054,"code":134809,"language":128056,"meta":395,"style":395},[422,134851,134852],{"__ignoreMap":395},[425,134853,134854,134856,134858,134860,134862,134864,134866,134868,134870,134872,134874,134876],{"class":427,"line":428},[425,134855,2057],{"class":701},[425,134857,393],{"class":52055},[425,134859,55994],{"class":431},[425,134861,1204],{"class":701},[425,134863,134824],{"class":435},[425,134865,56002],{"class":431},[425,134867,1204],{"class":701},[425,134869,134831],{"class":435},[425,134871,134834],{"class":431},[425,134873,1204],{"class":701},[425,134875,134839],{"class":435},[425,134877,52062],{"class":701},[19,134879,134880],{},"此时是这样的为标准流",[393,134882],{"style":127163,"src":134883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,134885,134886],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,134888,134889],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,134891,134892],{},"让他在中间，用center(background-position)",[19,134894,134895],{},"将需要变的尽可能放到一个盒子中",[19,134897,134898],{},"放大盒子上内部盒子发生变化",[416,134900,134902],{"className":127307,"code":134901,"language":127309,"meta":395,"style":395},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[422,134903,134904,134910,134920,134924,134931,134941,134953,134965],{"__ignoreMap":395},[425,134905,134906,134908],{"class":427,"line":428},[425,134907,128374],{"class":431},[425,134909,16569],{"class":701},[425,134911,134912,134914,134916,134918],{"class":427,"line":698},[425,134913,133113],{"class":691},[425,134915,52192],{"class":701},[425,134917,55519],{"class":691},[425,134919,2307],{"class":701},[425,134921,134922],{"class":427,"line":710},[425,134923,2578],{"class":701},[425,134925,134926,134929],{"class":427,"line":721},[425,134927,134928],{"class":431},".child",[425,134930,16569],{"class":701},[425,134932,134933,134935,134937,134939],{"class":427,"line":735},[425,134934,133113],{"class":691},[425,134936,52192],{"class":701},[425,134938,55586],{"class":691},[425,134940,2307],{"class":701},[425,134942,134943,134945,134947,134949,134951],{"class":427,"line":743},[425,134944,133127],{"class":691},[425,134946,52192],{"class":701},[425,134948,1804],{"class":691},[425,134950,1477],{"class":1155},[425,134952,2307],{"class":701},[425,134954,134955,134957,134959,134961,134963],{"class":427,"line":751},[425,134956,133144],{"class":691},[425,134958,52192],{"class":701},[425,134960,1804],{"class":691},[425,134962,1477],{"class":1155},[425,134964,2307],{"class":701},[425,134966,134967],{"class":427,"line":759},[425,134968,2578],{"class":701},[19,134970,134971],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[1099,134973,134975],{"id":134974},"_122-精灵图","12.2 精灵图",[14,134977,134979],{"id":134978},"_1221-理解","12.2.1 理解",[972,134981,134982,135000],{},[450,134983,134984,134985,133213,134988,134991,134992,134995,134996,134999],{},"目的： ",[400,134986,134987],{},"为了有效地减少服务器接收和发送请求的次数",[400,134989,134990],{},"提高"," 页面的 ",[400,134993,134994],{},"加载速度"," ，出现了 ",[400,134997,134998],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[450,135001,135002,135003,135005,135006,135008,135009,135011,135012,135014,135015,135017,135018,135020],{},"使用精灵图核心：",[54471,135004],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54471,135007],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54471,135010],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54471,135013],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54471,135016],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54471,135019],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[14,135022,135024],{"id":135023},"_1222-扒图","12.2.2 扒图",[416,135026,135029],{"className":135027,"code":135028,"language":6187},[6185],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[422,135030,135028],{"__ignoreMap":395},[393,135032],{"style":127163,"src":135033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[393,135035],{"style":127163,"src":135036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[14,135038,135040],{"id":135039},"_1223-精灵图的实现","12.2.3 精灵图的实现",[393,135042],{"style":127163,"src":135043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,135045,135046],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[393,135048],{"style":127163,"src":135049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[416,135051,135053],{"className":127307,"code":135052,"language":127309,"meta":395,"style":395},"\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",[422,135054,135055,135060,135067,135079,135091,135110,135127],{"__ignoreMap":395},[425,135056,135057],{"class":427,"line":428},[425,135058,135059],{"class":1216},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[425,135061,135062,135065],{"class":427,"line":698},[425,135063,135064],{"class":431},".icon",[425,135066,16569],{"class":701},[425,135068,135069,135071,135073,135075,135077],{"class":427,"line":710},[425,135070,71323],{"class":691},[425,135072,52192],{"class":701},[425,135074,1848],{"class":691},[425,135076,52247],{"class":1155},[425,135078,2307],{"class":701},[425,135080,135081,135083,135085,135087,135089],{"class":427,"line":721},[425,135082,71543],{"class":691},[425,135084,52192],{"class":701},[425,135086,1848],{"class":691},[425,135088,52247],{"class":1155},[425,135090,2307],{"class":701},[425,135092,135093,135095,135097,135099,135101,135104,135106,135108],{"class":427,"line":735},[425,135094,71366],{"class":691},[425,135096,52192],{"class":701},[425,135098,62481],{"class":691},[425,135100,1159],{"class":701},[425,135102,135103],{"class":6216},"sprites.png",[425,135105,938],{"class":701},[425,135107,62491],{"class":691},[425,135109,2307],{"class":701},[425,135111,135112,135114,135116,135118,135120,135123,135125],{"class":427,"line":743},[425,135113,129567],{"class":691},[425,135115,52192],{"class":701},[425,135117,52518],{"class":691},[425,135119,52247],{"class":1155},[425,135121,135122],{"class":691}," -20",[425,135124,52247],{"class":1155},[425,135126,2307],{"class":701},[425,135128,135129],{"class":427,"line":751},[425,135130,2578],{"class":701},[393,135132],{"style":127163,"src":135133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,135135,135136],{},"在前端中坐标轴的正方向是右和下",[1099,135138,135140],{"id":135139},"_123-字体图标","12.3 字体图标",[14,135142,135144],{"id":135143},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,135146,135147],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,135149,135150],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,135152,135153],{},"1.图片文件还是比较大的。",[19,135155,135156],{},"2.图片本身放大和缩小会失真。",[19,135158,135159],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,135161,135162,135163,26731],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[400,135164,135165],{},"字体图标 iconfont",[19,135167,135168,135171,135172,998],{},[400,135169,135170],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[400,135173,135174],{},"展示的是图标，本质属于字体",[14,135176,135178],{"id":135177},"_1232-字体图标的优点","12.3.2 字体图标的优点",[447,135180,135181,135186,135189,135192,135195],{},[450,135182,135183,135185],{},[400,135184,26867],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[450,135187,135188],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[450,135190,135191],{},"兼容性：几乎支持所有的浏览器，请放心使用",[450,135193,135194],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[450,135196,135197],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[14,135199,135201],{"id":135200},"_1233-字体库下载网站","12.3.3 字体库下载网站",[447,135203,135204],{},[450,135205,135206,135207],{},"icomoon字体库：",[22,135208,135211],{"href":135209,"rel":135210},"http:\u002F\u002Ficomoon.io\u002F",[26],"http:\u002F\u002Ficomoon.io",[19,135213,135214],{},"进去之后点icomoon app",[393,135216],{"style":127163,"src":135217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,135219,135220],{},"可以对其编辑：",[393,135222],{"style":127163,"src":135223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,135225,135226],{},"生成字体：",[393,135228],{"style":127163,"src":135229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,135231,135232],{},"下载：",[393,135234],{"style":127163,"src":135235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[447,135237,135238],{},[450,135239,135240,135241],{},"阿里iconfont字体库： ",[22,135242,135243],{"href":135243,"rel":135244},"http:\u002F\u002Fwww.iconfont.cn\u002F",[26],[14,135246,135248],{"id":135247},"_1234-字体图标的引入","12.3.4 字体图标的引入",[972,135250,135251],{},[450,135252,135253,135254,135257],{},"把下载包里面的 ",[400,135255,135256],{},"fonts"," 文件夹放入页面根目录下",[393,135259],{"style":127163,"src":135260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[972,135262,135263],{"start":698},[450,135264,135265],{},"字体文件格式",[35,135267,135268,135277],{},[38,135269,135270],{},[41,135271,135272,135275],{},[44,135273,135274],{"align":46},"格式",[44,135276,24736],{"align":46},[55,135278,135279,135289,135299,135309],{},[41,135280,135281,135286],{},[60,135282,135283],{"align":46},[400,135284,135285],{},".ttf",[60,135287,135288],{"align":46},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[41,135290,135291,135296],{},[60,135292,135293],{"align":46},[400,135294,135295],{},".woff",[60,135297,135298],{"align":46},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[41,135300,135301,135306],{},[60,135302,135303],{"align":46},[400,135304,135305],{},".eot",[60,135307,135308],{"align":46},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[41,135310,135311,135316],{},[60,135312,135313],{"align":46},[400,135314,135315],{},"svg",[60,135317,135318],{"align":46},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[972,135320,135321],{"start":710},[450,135322,135323],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[416,135325,135327],{"className":127307,"code":135326,"language":127309,"meta":395,"style":395},"\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",[422,135328,135329,135334,135341,135353,135369,135394,135415,135435,135455,135459,135465,135475,135486],{"__ignoreMap":395},[425,135330,135331],{"class":427,"line":428},[425,135332,135333],{"class":1216},"\u002F* 引入字体图标 *\u002F\n",[425,135335,135336,135339],{"class":427,"line":698},[425,135337,135338],{"class":1155},"@font-face",[425,135340,16569],{"class":701},[425,135342,135343,135346,135348,135351],{"class":427,"line":710},[425,135344,135345],{"class":691},"  font-family",[425,135347,52192],{"class":701},[425,135349,135350],{"class":435},"'icomoon'",[425,135352,2307],{"class":701},[425,135354,135355,135358,135360,135362,135364,135367],{"class":427,"line":721},[425,135356,135357],{"class":691},"  src",[425,135359,52192],{"class":701},[425,135361,62481],{"class":691},[425,135363,1159],{"class":701},[425,135365,135366],{"class":435},"'fonts\u002Ficomoon.eot'",[425,135368,3719],{"class":701},[425,135370,135371,135373,135375,135377,135379,135382,135384,135387,135389,135392],{"class":427,"line":735},[425,135372,135357],{"class":691},[425,135374,52192],{"class":701},[425,135376,62481],{"class":691},[425,135378,1159],{"class":701},[425,135380,135381],{"class":435},"'fonts\u002Ficomoon.eot?#iefix'",[425,135383,938],{"class":701},[425,135385,135386],{"class":691},"format",[425,135388,1159],{"class":701},[425,135390,135391],{"class":435},"'embedded-opentype'",[425,135393,38802],{"class":701},[425,135395,135396,135399,135401,135404,135406,135408,135410,135413],{"class":427,"line":743},[425,135397,135398],{"class":691},"       url",[425,135400,1159],{"class":701},[425,135402,135403],{"class":435},"'fonts\u002Ficomoon.woff'",[425,135405,938],{"class":701},[425,135407,135386],{"class":691},[425,135409,1159],{"class":701},[425,135411,135412],{"class":435},"'woff'",[425,135414,38802],{"class":701},[425,135416,135417,135419,135421,135424,135426,135428,135430,135433],{"class":427,"line":751},[425,135418,135398],{"class":691},[425,135420,1159],{"class":701},[425,135422,135423],{"class":435},"'fonts\u002Ficomoon.ttf'",[425,135425,938],{"class":701},[425,135427,135386],{"class":691},[425,135429,1159],{"class":701},[425,135431,135432],{"class":435},"'truetype'",[425,135434,38802],{"class":701},[425,135436,135437,135439,135441,135444,135446,135448,135450,135453],{"class":427,"line":759},[425,135438,135398],{"class":691},[425,135440,1159],{"class":701},[425,135442,135443],{"class":435},"'fonts\u002Ficomoon.svg#icomoon'",[425,135445,938],{"class":701},[425,135447,135386],{"class":691},[425,135449,1159],{"class":701},[425,135451,135452],{"class":435},"'svg'",[425,135454,3719],{"class":701},[425,135456,135457],{"class":427,"line":770},[425,135458,2578],{"class":701},[425,135460,135461,135463],{"class":427,"line":780},[425,135462,135064],{"class":431},[425,135464,16569],{"class":701},[425,135466,135467,135469,135471,135473],{"class":427,"line":790},[425,135468,135345],{"class":691},[425,135470,52192],{"class":701},[425,135472,135350],{"class":435},[425,135474,2307],{"class":701},[425,135476,135477,135480,135482,135484],{"class":427,"line":805},[425,135478,135479],{"class":691},"  font-style",[425,135481,52192],{"class":701},[425,135483,64596],{"class":691},[425,135485,2307],{"class":701},[425,135487,135488],{"class":427,"line":818},[425,135489,2578],{"class":701},[19,135491,135492],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[393,135494],{"style":127163,"src":135495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[972,135497,135498],{"start":721},[450,135499,135500],{},"添加字体",[393,135502],{"style":127163,"src":135503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,135505,135506],{},"复制：",[393,135508],{"style":127163,"src":135509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,135511,135512],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[972,135514,135515],{"start":735},[450,135516,135517],{},"代码展示：",[416,135519,135520],{"className":127307,"code":135326,"language":127309,"meta":395,"style":395},[422,135521,135522,135526,135532,135542,135556,135578,135596,135614,135632,135636,135642,135652,135662],{"__ignoreMap":395},[425,135523,135524],{"class":427,"line":428},[425,135525,135333],{"class":1216},[425,135527,135528,135530],{"class":427,"line":698},[425,135529,135338],{"class":1155},[425,135531,16569],{"class":701},[425,135533,135534,135536,135538,135540],{"class":427,"line":710},[425,135535,135345],{"class":691},[425,135537,52192],{"class":701},[425,135539,135350],{"class":435},[425,135541,2307],{"class":701},[425,135543,135544,135546,135548,135550,135552,135554],{"class":427,"line":721},[425,135545,135357],{"class":691},[425,135547,52192],{"class":701},[425,135549,62481],{"class":691},[425,135551,1159],{"class":701},[425,135553,135366],{"class":435},[425,135555,3719],{"class":701},[425,135557,135558,135560,135562,135564,135566,135568,135570,135572,135574,135576],{"class":427,"line":735},[425,135559,135357],{"class":691},[425,135561,52192],{"class":701},[425,135563,62481],{"class":691},[425,135565,1159],{"class":701},[425,135567,135381],{"class":435},[425,135569,938],{"class":701},[425,135571,135386],{"class":691},[425,135573,1159],{"class":701},[425,135575,135391],{"class":435},[425,135577,38802],{"class":701},[425,135579,135580,135582,135584,135586,135588,135590,135592,135594],{"class":427,"line":743},[425,135581,135398],{"class":691},[425,135583,1159],{"class":701},[425,135585,135403],{"class":435},[425,135587,938],{"class":701},[425,135589,135386],{"class":691},[425,135591,1159],{"class":701},[425,135593,135412],{"class":435},[425,135595,38802],{"class":701},[425,135597,135598,135600,135602,135604,135606,135608,135610,135612],{"class":427,"line":751},[425,135599,135398],{"class":691},[425,135601,1159],{"class":701},[425,135603,135423],{"class":435},[425,135605,938],{"class":701},[425,135607,135386],{"class":691},[425,135609,1159],{"class":701},[425,135611,135432],{"class":435},[425,135613,38802],{"class":701},[425,135615,135616,135618,135620,135622,135624,135626,135628,135630],{"class":427,"line":759},[425,135617,135398],{"class":691},[425,135619,1159],{"class":701},[425,135621,135443],{"class":435},[425,135623,938],{"class":701},[425,135625,135386],{"class":691},[425,135627,1159],{"class":701},[425,135629,135452],{"class":435},[425,135631,3719],{"class":701},[425,135633,135634],{"class":427,"line":770},[425,135635,2578],{"class":701},[425,135637,135638,135640],{"class":427,"line":780},[425,135639,135064],{"class":431},[425,135641,16569],{"class":701},[425,135643,135644,135646,135648,135650],{"class":427,"line":790},[425,135645,135345],{"class":691},[425,135647,52192],{"class":701},[425,135649,135350],{"class":435},[425,135651,2307],{"class":701},[425,135653,135654,135656,135658,135660],{"class":427,"line":805},[425,135655,135479],{"class":691},[425,135657,52192],{"class":701},[425,135659,64596],{"class":691},[425,135661,2307],{"class":701},[425,135663,135664],{"class":427,"line":818},[425,135665,2578],{"class":701},[393,135667],{"style":127163,"src":135668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,135670,135671],{},"更加细节展示：",[972,135673,135674],{},[450,135675,135676],{},"html 标签内添加小图标",[393,135678],{"style":127163,"src":135679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[972,135681,135682],{"start":698},[450,135683,135684],{},"给标签定义字体",[416,135686,135687],{"className":128054,"code":131411,"language":128056,"meta":395,"style":395},[422,135688,135689,135693,135707,135711],{"__ignoreMap":395},[425,135690,135691],{"class":427,"line":428},[425,135692,131418],{"class":1216},[425,135694,135695,135697,135699,135701,135703,135705],{"class":427,"line":698},[425,135696,2057],{"class":701},[425,135698,52366],{"class":52055},[425,135700,54241],{"class":431},[425,135702,1204],{"class":701},[425,135704,131431],{"class":435},[425,135706,52062],{"class":701},[425,135708,135709],{"class":427,"line":710},[425,135710,131438],{"class":701},[425,135712,135713,135715,135717],{"class":427,"line":721},[425,135714,52540],{"class":701},[425,135716,52366],{"class":52055},[425,135718,52062],{"class":701},[19,135720,135721],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[393,135723],{"style":127163,"src":135724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[14,135726,135728],{"id":135727},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,135730,135731],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,135733,135734,135735,135738],{},"把压缩包里面的 ",[400,135736,135737],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,135740,135741],{},"打开网站，点下方：",[393,135743],{"style":127163,"src":135744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[393,135746],{"style":127163,"src":135747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[393,135749],{"style":127163,"src":135750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,135752,135753],{},"点yes重新加载",[19,135755,135756],{},"然后重复之前的操作就可以实现了",[19,135758,135759],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[14,135761,135763],{"id":135762},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[393,135765],{"style":127163,"src":135766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[1074,135768,135769],{},"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":395,"searchDepth":698,"depth":698,"links":135771},[135772,135778,135783],{"id":134375,"depth":698,"text":134376,"children":135773},[135774,135775,135776,135777],{"id":134387,"depth":710,"text":134388},{"id":134416,"depth":710,"text":134417},{"id":134444,"depth":710,"text":134445},{"id":134502,"depth":710,"text":134503},{"id":134974,"depth":698,"text":134975,"children":135779},[135780,135781,135782],{"id":134978,"depth":710,"text":134979},{"id":135023,"depth":710,"text":135024},{"id":135039,"depth":710,"text":135040},{"id":135139,"depth":698,"text":135140,"children":135784},[135785,135786,135787,135788,135789,135790],{"id":135143,"depth":710,"text":135144},{"id":135177,"depth":710,"text":135178},{"id":135200,"depth":710,"text":135201},{"id":135247,"depth":710,"text":135248},{"id":135727,"depth":710,"text":135728},{"id":135762,"depth":710,"text":135763},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134367,"description":24374},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135797,"title":135798,"body":135799,"description":24374,"extension":1082,"meta":137026,"navigation":1084,"path":137027,"seo":137028,"stem":137029,"__hash__":137030},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135800,"toc":137007},[135801,135804,135808,135811,135825,135893,135923,135926,135930,135934,136036,136083,136087,136090,136093,136127,136130,136133,136136,136139,136142,136145,136148,136150,136153,136156,136159,136162,136165,136168,136171,136199,136202,136206,136209,136216,136219,136222,136248,136251,136255,136258,136261,136268,136272,136275,136277,136309,136312,136315,136327,136333,136336,136339,136342,136344,136348,136351,136354,136357,136402,136406,136408,136411,136418,136460,136463,136467,136472,136486,136490,136493,136496,136499,136502,136505,136539,136542,136545,136599,136602,136605,136608,136611,136663,136666,136669,136718,136722,136724,136727,136730,136733,136736,136739,136797,136800,136806,136809,136812,136844,136847,136851,136855,136858,136890,136894,136897,136941,136945,136948,136951,136954,136957,136960,136963,136966,136968,136971,136973,136976,136979,136982,136985,136990,136993,136995,136998,137001,137004],[10,135802,135798],{"id":135803},"_13-界面样式与布局技巧",[1099,135805,135807],{"id":135806},"_131-css三角","13.1 css三角",[19,135809,135810],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[447,135812,135813,135816,135819,135822],{},[450,135814,135815],{},"用css 边框可以模拟三角效果",[450,135817,135818],{},"宽度高度为0",[450,135820,135821],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[450,135823,135824],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[416,135826,135828],{"className":127307,"code":135827,"language":127309,"meta":395,"style":395},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[422,135829,135830,135835,135842,135852,135862,135878,135889],{"__ignoreMap":395},[425,135831,135832],{"class":427,"line":428},[425,135833,135834],{"class":1216},"\u002F* CSS 实现三角形 *\u002F\n",[425,135836,135837,135840],{"class":427,"line":698},[425,135838,135839],{"class":431},".triangle",[425,135841,16569],{"class":701},[425,135843,135844,135846,135848,135850],{"class":427,"line":710},[425,135845,71323],{"class":691},[425,135847,52192],{"class":701},[425,135849,1341],{"class":691},[425,135851,2307],{"class":701},[425,135853,135854,135856,135858,135860],{"class":427,"line":721},[425,135855,71543],{"class":691},[425,135857,52192],{"class":701},[425,135859,1341],{"class":691},[425,135861,2307],{"class":701},[425,135863,135864,135866,135868,135870,135872,135874,135876],{"class":427,"line":735},[425,135865,71651],{"class":691},[425,135867,52192],{"class":701},[425,135869,1594],{"class":691},[425,135871,52247],{"class":1155},[425,135873,52276],{"class":691},[425,135875,64746],{"class":691},[425,135877,2307],{"class":701},[425,135879,135880,135883,135885,135887],{"class":427,"line":743},[425,135881,135882],{"class":691},"  border-bottom-color",[425,135884,52192],{"class":701},[425,135886,63124],{"class":691},[425,135888,2307],{"class":701},[425,135890,135891],{"class":427,"line":751},[425,135892,2578],{"class":701},[416,135894,135895],{"className":127307,"code":131464,"language":127309,"meta":395,"style":395},[422,135896,135897,135903,135919],{"__ignoreMap":395},[425,135898,135899,135901],{"class":427,"line":428},[425,135900,52366],{"class":52055},[425,135902,16569],{"class":701},[425,135904,135905,135907,135909,135911,135913,135915,135917],{"class":427,"line":698},[425,135906,71651],{"class":691},[425,135908,52192],{"class":701},[425,135910,1367],{"class":691},[425,135912,52247],{"class":1155},[425,135914,52276],{"class":691},[425,135916,130699],{"class":691},[425,135918,2307],{"class":701},[425,135920,135921],{"class":427,"line":710},[425,135922,2578],{"class":701},[393,135924],{"style":127163,"src":135925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[1099,135927,135929],{"id":135928},"_132-css用户界面样式","13.2 css用户界面样式",[14,135931,135933],{"id":135932},"_1321-鼠标样式","13.2.1 鼠标样式",[416,135935,135937],{"className":127307,"code":135936,"language":127309,"meta":395,"style":395},"\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",[422,135938,135939,135944,135963,135981,136000,136017],{"__ignoreMap":395},[425,135940,135941],{"class":427,"line":428},[425,135942,135943],{"class":1216},"\u002F* 鼠标样式 *\u002F\n",[425,135945,135946,135948,135950,135953,135955,135957,135960],{"class":427,"line":698},[425,135947,52366],{"class":52055},[425,135949,80562],{"class":701},[425,135951,135952],{"class":691},"cursor",[425,135954,52192],{"class":701},[425,135956,62785],{"class":691},[425,135958,135959],{"class":701},"; }   ",[425,135961,135962],{"class":1216},"\u002F* 手型 *\u002F\n",[425,135964,135965,135967,135969,135971,135973,135976,135978],{"class":427,"line":710},[425,135966,52366],{"class":52055},[425,135968,80562],{"class":701},[425,135970,135952],{"class":691},[425,135972,52192],{"class":701},[425,135974,135975],{"class":691},"default",[425,135977,135959],{"class":701},[425,135979,135980],{"class":1216},"\u002F* 默认 *\u002F\n",[425,135982,135983,135985,135987,135989,135991,135994,135997],{"class":427,"line":721},[425,135984,52366],{"class":52055},[425,135986,80562],{"class":701},[425,135988,135952],{"class":691},[425,135990,52192],{"class":701},[425,135992,135993],{"class":691},"move",[425,135995,135996],{"class":701},"; }      ",[425,135998,135999],{"class":1216},"\u002F* 移动 *\u002F\n",[425,136001,136002,136004,136006,136008,136010,136012,136014],{"class":427,"line":735},[425,136003,52366],{"class":52055},[425,136005,80562],{"class":701},[425,136007,135952],{"class":691},[425,136009,52192],{"class":701},[425,136011,6187],{"class":691},[425,136013,135996],{"class":701},[425,136015,136016],{"class":1216},"\u002F* 文本 *\u002F\n",[425,136018,136019,136021,136023,136025,136027,136030,136033],{"class":427,"line":743},[425,136020,52366],{"class":52055},[425,136022,80562],{"class":701},[425,136024,135952],{"class":691},[425,136026,52192],{"class":701},[425,136028,136029],{"class":691},"not-allowed",[425,136031,136032],{"class":701},"; } ",[425,136034,136035],{"class":1216},"\u002F* 禁止 *\u002F\n",[35,136037,136038,136046],{},[38,136039,136040],{},[41,136041,136042,136044],{},[44,136043,127771],{"align":46},[44,136045,50],{"align":46},[55,136047,136048,136055,136062,136069,136076],{},[41,136049,136050,136052],{},[60,136051,135975],{"align":46},[60,136053,136054],{"align":46},"小白 默认",[41,136056,136057,136059],{},[60,136058,62785],{"align":46},[60,136060,136061],{"align":46},"小手",[41,136063,136064,136066],{},[60,136065,135993],{"align":46},[60,136067,136068],{"align":46},"移动",[41,136070,136071,136073],{},[60,136072,6187],{"align":46},[60,136074,136075],{"align":46},"文本",[41,136077,136078,136080],{},[60,136079,136029],{"align":46},[60,136081,136082],{"align":46},"禁止",[14,136084,136086],{"id":136085},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,136088,136089],{},"去除表单轮廓线",[19,136091,136092],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[416,136094,136095],{"className":127307,"code":130671,"language":127309,"meta":395,"style":395},[422,136096,136097,136101,136107,136123],{"__ignoreMap":395},[425,136098,136099],{"class":427,"line":428},[425,136100,130678],{"class":1216},[425,136102,136103,136105],{"class":427,"line":698},[425,136104,52366],{"class":52055},[425,136106,16569],{"class":701},[425,136108,136109,136111,136113,136115,136117,136119,136121],{"class":427,"line":710},[425,136110,71651],{"class":691},[425,136112,52192],{"class":701},[425,136114,1367],{"class":691},[425,136116,52247],{"class":1155},[425,136118,52276],{"class":691},[425,136120,130699],{"class":691},[425,136122,2307],{"class":701},[425,136124,136125],{"class":427,"line":721},[425,136126,2578],{"class":701},[19,136128,136129],{},"文本域：",[393,136131],{"style":127163,"src":136132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,136134,136135],{},"此时会有一个空白区域",[393,136137],{"style":127163,"src":136138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,136140,136141],{},"写在同一行就不会出现这个问题",[393,136143],{"style":127163,"src":136144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,136146,136147],{},"文本域是行内块元素，一定记住！！！",[19,136149,98988],{},[393,136151],{"style":127163,"src":136152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,136154,136155],{},"文本域尽量放在一行",[19,136157,136158],{},"知识回顾：cols是列，rols是行",[393,136160],{"style":127163,"src":136161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,136163,136164],{},"它可以进行拖动，显然这是我们不愿意看到的",[393,136166],{"style":127163,"src":136167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,136169,136170],{},"使用resize进行解决",[416,136172,136174],{"className":127307,"code":136173,"language":127309,"meta":395,"style":395},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[422,136175,136176,136182,136195],{"__ignoreMap":395},[425,136177,136178,136180],{"class":427,"line":428},[425,136179,54576],{"class":52055},[425,136181,16569],{"class":701},[425,136183,136184,136186,136188,136190,136192],{"class":427,"line":698},[425,136185,71553],{"class":691},[425,136187,52192],{"class":701},[425,136189,55492],{"class":691},[425,136191,131170],{"class":701},[425,136193,136194],{"class":1216},"\u002F* 取消表单轮廓线 *\u002F\n",[425,136196,136197],{"class":427,"line":710},[425,136198,2578],{"class":701},[19,136200,136201],{},"此时就无法通过右下方实现拖动了",[14,136203,136205],{"id":136204},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,136207,136208],{},"实现一个盒子中的文字和图片对齐",[19,136210,136211,136212,136215],{},"用于设置一个元素的 ",[400,136213,136214],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,136217,136218],{},"图片和文字默认是基线对齐",[393,136220],{"style":127163,"src":136221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[416,136223,136224],{"className":127307,"code":136173,"language":127309,"meta":395,"style":395},[422,136225,136226,136232,136244],{"__ignoreMap":395},[425,136227,136228,136230],{"class":427,"line":428},[425,136229,54576],{"class":52055},[425,136231,16569],{"class":701},[425,136233,136234,136236,136238,136240,136242],{"class":427,"line":698},[425,136235,71553],{"class":691},[425,136237,52192],{"class":701},[425,136239,55492],{"class":691},[425,136241,131170],{"class":701},[425,136243,136194],{"class":1216},[425,136245,136246],{"class":427,"line":710},[425,136247,2578],{"class":701},[393,136249],{"style":127163,"src":136250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22995,136252,136254],{"id":136253},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,136256,136257],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[393,136259],{"style":127163,"src":136260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,136262,136263,136264,136267],{},"此时可以给图片、表单这些行内块元素的 ",[400,136265,136266],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22995,136269,136271],{"id":136270},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,136273,136274],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,136276,15630],{},[416,136278,136280],{"className":127307,"code":136279,"language":127309,"meta":395,"style":395},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[422,136281,136282,136287,136293,136305],{"__ignoreMap":395},[425,136283,136284],{"class":427,"line":428},[425,136285,136286],{"class":1216},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[425,136288,136289,136291],{"class":427,"line":698},[425,136290,393],{"class":52055},[425,136292,16569],{"class":701},[425,136294,136295,136298,136300,136303],{"class":427,"line":710},[425,136296,136297],{"class":691},"  vertical-align",[425,136299,52192],{"class":701},[425,136301,136302],{"class":691},"middle",[425,136304,2307],{"class":701},[425,136306,136307],{"class":427,"line":721},[425,136308,2578],{"class":701},[393,136310],{"style":127163,"src":136311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,136313,136314],{},"主要解决方法有两种：",[972,136316,136317],{},[450,136318,136319,136322,136323,136326],{},[400,136320,136321],{},"给图片"," 添加 ",[400,136324,136325],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,136328,136329,136330],{},"2.把图片转换为块级元素 ",[400,136331,136332],{},"display: block",[19,136334,136335],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,136337,136338],{},"img {",[19,136340,136341],{},"vertical-align:middle;",[19,136343,2093],{},[14,136345,136347],{"id":136346},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,136349,136350],{},"效果：",[393,136352],{"style":127163,"src":136353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,136355,136356],{},"单行文本溢出显示省略号--必须满足三个条件：",[416,136358,136360],{"className":127307,"code":136359,"language":127309,"meta":395,"style":395},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[422,136361,136362,136367,136373,136383,136388,136398],{"__ignoreMap":395},[425,136363,136364],{"class":427,"line":428},[425,136365,136366],{"class":1216},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[425,136368,136369,136371],{"class":427,"line":698},[425,136370,393],{"class":52055},[425,136372,16569],{"class":701},[425,136374,136375,136377,136379,136381],{"class":427,"line":710},[425,136376,136297],{"class":691},[425,136378,52192],{"class":701},[425,136380,136302],{"class":691},[425,136382,2307],{"class":701},[425,136384,136385],{"class":427,"line":721},[425,136386,136387],{"class":1216},"  \u002F* 或 *\u002F\n",[425,136389,136390,136392,136394,136396],{"class":427,"line":735},[425,136391,128923],{"class":691},[425,136393,52192],{"class":701},[425,136395,61624],{"class":691},[425,136397,2307],{"class":701},[425,136399,136400],{"class":427,"line":743},[425,136401,2578],{"class":701},[14,136403,136405],{"id":136404},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,136407,136350],{},[393,136409],{"style":127163,"src":136410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,136412,136413,136414,136417],{},"多行文本溢出显示省略号， ",[400,136415,136416],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[416,136419,136420],{"className":127307,"code":136359,"language":127309,"meta":395,"style":395},[422,136421,136422,136426,136432,136442,136446,136456],{"__ignoreMap":395},[425,136423,136424],{"class":427,"line":428},[425,136425,136366],{"class":1216},[425,136427,136428,136430],{"class":427,"line":698},[425,136429,393],{"class":52055},[425,136431,16569],{"class":701},[425,136433,136434,136436,136438,136440],{"class":427,"line":710},[425,136435,136297],{"class":691},[425,136437,52192],{"class":701},[425,136439,136302],{"class":691},[425,136441,2307],{"class":701},[425,136443,136444],{"class":427,"line":721},[425,136445,136387],{"class":1216},[425,136447,136448,136450,136452,136454],{"class":427,"line":735},[425,136449,128923],{"class":691},[425,136451,52192],{"class":701},[425,136453,61624],{"class":691},[425,136455,2307],{"class":701},[425,136457,136458],{"class":427,"line":743},[425,136459,2578],{"class":701},[19,136461,136462],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[1099,136464,136466],{"id":136465},"_133-常见布局技巧","13.3 常见布局技巧",[19,136468,136469],{},[400,136470,136471],{},"巧妙利用一个技术更快更好的布局：",[972,136473,136474,136477,136480,136483],{},[450,136475,136476],{},"margin负值的运用",[450,136478,136479],{},"文字围绕浮动元素",[450,136481,136482],{},"行内块的巧妙运用",[450,136484,136485],{},"CSS三角强化",[14,136487,136489],{"id":136488},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,136491,136492],{},"应用场景：",[393,136494],{"style":127163,"src":136495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[393,136497],{"style":127163,"src":136498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,136500,136501],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,136503,136504],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[416,136506,136507],{"className":127307,"code":130671,"language":127309,"meta":395,"style":395},[422,136508,136509,136513,136519,136535],{"__ignoreMap":395},[425,136510,136511],{"class":427,"line":428},[425,136512,130678],{"class":1216},[425,136514,136515,136517],{"class":427,"line":698},[425,136516,52366],{"class":52055},[425,136518,16569],{"class":701},[425,136520,136521,136523,136525,136527,136529,136531,136533],{"class":427,"line":710},[425,136522,71651],{"class":691},[425,136524,52192],{"class":701},[425,136526,1367],{"class":691},[425,136528,52247],{"class":1155},[425,136530,52276],{"class":691},[425,136532,130699],{"class":691},[425,136534,2307],{"class":701},[425,136536,136537],{"class":427,"line":721},[425,136538,2578],{"class":701},[393,136540],{"style":127163,"src":136541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,136543,136544],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[416,136546,136548],{"className":127307,"code":136547,"language":127309,"meta":395,"style":395},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[422,136549,136550,136555,136561,136571,136583,136595],{"__ignoreMap":395},[425,136551,136552],{"class":427,"line":428},[425,136553,136554],{"class":1216},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[425,136556,136557,136559],{"class":427,"line":698},[425,136558,131155],{"class":431},[425,136560,16569],{"class":701},[425,136562,136563,136565,136567,136569],{"class":427,"line":710},[425,136564,133113],{"class":691},[425,136566,52192],{"class":701},[425,136568,55519],{"class":691},[425,136570,2307],{"class":701},[425,136572,136573,136575,136577,136579,136581],{"class":427,"line":721},[425,136574,133127],{"class":691},[425,136576,52192],{"class":701},[425,136578,1594],{"class":691},[425,136580,52247],{"class":1155},[425,136582,2307],{"class":701},[425,136584,136585,136587,136589,136591,136593],{"class":427,"line":735},[425,136586,133144],{"class":691},[425,136588,52192],{"class":701},[425,136590,1848],{"class":691},[425,136592,52247],{"class":1155},[425,136594,2307],{"class":701},[425,136596,136597],{"class":427,"line":743},[425,136598,2578],{"class":701},[19,136600,136601],{},"加上上述代码会发现：",[393,136603],{"style":127163,"src":136604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,136606,136607],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,136609,136610],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[416,136612,136613],{"className":127307,"code":136547,"language":127309,"meta":395,"style":395},[422,136614,136615,136619,136625,136635,136647,136659],{"__ignoreMap":395},[425,136616,136617],{"class":427,"line":428},[425,136618,136554],{"class":1216},[425,136620,136621,136623],{"class":427,"line":698},[425,136622,131155],{"class":431},[425,136624,16569],{"class":701},[425,136626,136627,136629,136631,136633],{"class":427,"line":710},[425,136628,133113],{"class":691},[425,136630,52192],{"class":701},[425,136632,55519],{"class":691},[425,136634,2307],{"class":701},[425,136636,136637,136639,136641,136643,136645],{"class":427,"line":721},[425,136638,133127],{"class":691},[425,136640,52192],{"class":701},[425,136642,1594],{"class":691},[425,136644,52247],{"class":1155},[425,136646,2307],{"class":701},[425,136648,136649,136651,136653,136655,136657],{"class":427,"line":735},[425,136650,133144],{"class":691},[425,136652,52192],{"class":701},[425,136654,1848],{"class":691},[425,136656,52247],{"class":1155},[425,136658,2307],{"class":701},[425,136660,136661],{"class":427,"line":743},[425,136662,2578],{"class":701},[19,136664,136665],{},"解决方式2：",[19,136667,136668],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[416,136670,136672],{"className":127307,"code":136671,"language":127309,"meta":395,"style":395},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[422,136673,136674,136680,136690,136702,136714],{"__ignoreMap":395},[425,136675,136676,136678],{"class":427,"line":428},[425,136677,52366],{"class":52055},[425,136679,16569],{"class":701},[425,136681,136682,136684,136686,136688],{"class":427,"line":698},[425,136683,133113],{"class":691},[425,136685,52192],{"class":701},[425,136687,55519],{"class":691},[425,136689,2307],{"class":701},[425,136691,136692,136694,136696,136698,136700],{"class":427,"line":710},[425,136693,133127],{"class":691},[425,136695,52192],{"class":701},[425,136697,1594],{"class":691},[425,136699,52247],{"class":1155},[425,136701,2307],{"class":701},[425,136703,136704,136706,136708,136710,136712],{"class":427,"line":721},[425,136705,133144],{"class":691},[425,136707,52192],{"class":701},[425,136709,1848],{"class":691},[425,136711,52247],{"class":1155},[425,136713,2307],{"class":701},[425,136715,136716],{"class":427,"line":735},[425,136717,2578],{"class":701},[14,136719,136721],{"id":136720},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,136723,136492],{},[393,136725],{"style":127163,"src":136726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,136728,136729],{},"实现结构图：",[393,136731],{"style":127163,"src":136732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,136734,136735],{},"巧妙运用浮动元素不会压住文字的特性",[19,136737,136738],{},"代码显示：",[416,136740,136742],{"className":127307,"code":136741,"language":127309,"meta":395,"style":395},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[422,136743,136744,136750,136760,136764,136769,136773,136779,136793],{"__ignoreMap":395},[425,136745,136746,136748],{"class":427,"line":428},[425,136747,131155],{"class":431},[425,136749,16569],{"class":701},[425,136751,136752,136754,136756,136758],{"class":427,"line":698},[425,136753,131787],{"class":691},[425,136755,52192],{"class":701},[425,136757,46],{"class":691},[425,136759,2307],{"class":701},[425,136761,136762],{"class":427,"line":710},[425,136763,2578],{"class":701},[425,136765,136766],{"class":427,"line":721},[425,136767,136768],{"class":701},"```Css\n",[425,136770,136771],{"class":427,"line":735},[425,136772,131150],{"class":1216},[425,136774,136775,136777],{"class":427,"line":743},[425,136776,131155],{"class":431},[425,136778,16569],{"class":701},[425,136780,136781,136783,136785,136787,136789,136791],{"class":427,"line":751},[425,136782,71225],{"class":691},[425,136784,52192],{"class":701},[425,136786,1341],{"class":691},[425,136788,52311],{"class":691},[425,136790,131170],{"class":701},[425,136792,131173],{"class":1216},[425,136794,136795],{"class":427,"line":759},[425,136796,2578],{"class":701},[19,136798,136799],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[416,136801,136804],{"className":136802,"code":136803,"language":6187},[6185],"\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",[422,136805,136803],{"__ignoreMap":395},[393,136807],{"style":127163,"src":136808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,136810,136811],{},"最终展示结果：",[416,136813,136814],{"className":127307,"code":131143,"language":127309,"meta":395,"style":395},[422,136815,136816,136820,136826,136840],{"__ignoreMap":395},[425,136817,136818],{"class":427,"line":428},[425,136819,131150],{"class":1216},[425,136821,136822,136824],{"class":427,"line":698},[425,136823,131155],{"class":431},[425,136825,16569],{"class":701},[425,136827,136828,136830,136832,136834,136836,136838],{"class":427,"line":710},[425,136829,71225],{"class":691},[425,136831,52192],{"class":701},[425,136833,1341],{"class":691},[425,136835,52311],{"class":691},[425,136837,131170],{"class":701},[425,136839,131173],{"class":1216},[425,136841,136842],{"class":427,"line":721},[425,136843,2578],{"class":701},[393,136845],{"style":127163,"src":136846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[1099,136848,136850],{"id":136849},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[14,136852,136854],{"id":136853},"_1341-原理","13.4.1 原理",[393,136856],{"style":127163,"src":136857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[416,136859,136860],{"className":127307,"code":131143,"language":127309,"meta":395,"style":395},[422,136861,136862,136866,136872,136886],{"__ignoreMap":395},[425,136863,136864],{"class":427,"line":428},[425,136865,131150],{"class":1216},[425,136867,136868,136870],{"class":427,"line":698},[425,136869,131155],{"class":431},[425,136871,16569],{"class":701},[425,136873,136874,136876,136878,136880,136882,136884],{"class":427,"line":710},[425,136875,71225],{"class":691},[425,136877,52192],{"class":701},[425,136879,1341],{"class":691},[425,136881,52311],{"class":691},[425,136883,131170],{"class":701},[425,136885,131173],{"class":1216},[425,136887,136888],{"class":427,"line":721},[425,136889,2578],{"class":701},[14,136891,136893],{"id":136892},"_1342-实例","13.4.2 实例",[393,136895],{"style":127163,"src":136896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[416,136898,136899],{"className":127307,"code":131773,"language":127309,"meta":395,"style":395},[422,136900,136901,136907,136917,136921,136927,136937],{"__ignoreMap":395},[425,136902,136903,136905],{"class":427,"line":428},[425,136904,131780],{"class":431},[425,136906,16569],{"class":701},[425,136908,136909,136911,136913,136915],{"class":427,"line":698},[425,136910,131787],{"class":691},[425,136912,52192],{"class":701},[425,136914,46],{"class":691},[425,136916,2307],{"class":701},[425,136918,136919],{"class":427,"line":710},[425,136920,2578],{"class":701},[425,136922,136923,136925],{"class":427,"line":721},[425,136924,131802],{"class":431},[425,136926,16569],{"class":701},[425,136928,136929,136931,136933,136935],{"class":427,"line":735},[425,136930,131787],{"class":691},[425,136932,52192],{"class":701},[425,136934,73277],{"class":691},[425,136936,2307],{"class":701},[425,136938,136939],{"class":427,"line":743},[425,136940,2578],{"class":701},[1099,136942,136944],{"id":136943},"_135-css的初始化","13.5 css的初始化",[19,136946,136947],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,136949,136950],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,136952,136953],{},"每个网页都必须首先进行 CSS初始化。",[19,136955,136956],{},"这里我们以 京东CSS初始化代码为例。",[19,136958,136959],{},"在网页右键查看网页源代码",[19,136961,136962],{},"找到css的link引入语句",[19,136964,136965],{},"然后ctrl+f 输入body",[19,136967,77981],{},[393,136969],{"style":127163,"src":136970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,136972,78004],{},[393,136974],{"style":127163,"src":136975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,136977,136978],{},"③打开了网页上传压缩的代码",[393,136980],{"style":127163,"src":136981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,136983,136984],{},"④从body前可以查看这个网页的初始化代码",[19,136986,136987],{},[400,136988,136989],{},"Unicode编码字体：",[19,136991,136992],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,136994,83962],{},[19,136996,136997],{},"黑体 \\9ED1\\4F53",[19,136999,137000],{},"宋体 \\5B8B\\4F53",[19,137002,137003],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[1074,137005,137006],{},"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":395,"searchDepth":698,"depth":698,"links":137008},[137009,137010,137017,137021,137025],{"id":135806,"depth":698,"text":135807},{"id":135928,"depth":698,"text":135929,"children":137011},[137012,137013,137014,137015,137016],{"id":135932,"depth":710,"text":135933},{"id":136085,"depth":710,"text":136086},{"id":136204,"depth":710,"text":136205},{"id":136346,"depth":710,"text":136347},{"id":136404,"depth":710,"text":136405},{"id":136465,"depth":698,"text":136466,"children":137018},[137019,137020],{"id":136488,"depth":710,"text":136489},{"id":136720,"depth":710,"text":136721},{"id":136849,"depth":698,"text":136850,"children":137022},[137023,137024],{"id":136853,"depth":710,"text":136854},{"id":136892,"depth":710,"text":136893},{"id":136943,"depth":698,"text":136944},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135798,"description":24374},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":137032,"title":137033,"body":137034,"description":24374,"extension":1082,"meta":138720,"navigation":1084,"path":138721,"seo":138722,"stem":138723,"__hash__":138724},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":137035,"toc":138709},[137036,137039,137043,137047,137050,137057,137060,137063,137101,137104,137106,137120,137124,137133,137137,137142,137145,137148,137151,137186,137191,137194,137224,137227,137232,137235,137238,137268,137271,137325,137328,137332,137337,137349,137352,137356,137386,137389,137394,137397,137427,137430,137434,137451,137455,137459,137462,137495,137498,137502,137505,137508,137511,137514,137517,137628,137631,137634,137637,137739,137742,137746,137750,137754,137757,137797,137800,137802,137818,137822,137825,137830,137911,137914,137917,138043,138048,138051,138059,138062,138067,138152,138155,138159,138162,138165,138169,138189,138194,138278,138281,138286,138289,138292,138370,138373,138376,138379,138382,138385,138390,138393,138396,138468,138471,138476,138479,138576,138579,138585,138588,138591,138594,138597,138600,138603,138606,138609,138613,138618,138621,138654,138659,138662,138703,138706],[10,137037,137033],{"id":137038},"_14-html5与css3新特性",[1099,137040,137042],{"id":137041},"_141-html5的新特性","14.1 HTML5的新特性",[14,137044,137046],{"id":137045},"_1411-基本标签","14.1.1 基本标签",[19,137048,137049],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,137051,137052,137053,137056],{},"这些新特性都有兼容性问题，基本是 ",[400,137054,137055],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,137058,137059],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,137061,137062],{},"现在使用的是新特性：",[447,137064,137065,137071,137077,137083,137089,137095],{},[450,137066,137067,137070],{},[422,137068,137069],{},"\u003Cheader>"," 头部标签",[450,137072,137073,137076],{},[422,137074,137075],{},"\u003Cnav>"," 导航标签",[450,137078,137079,137082],{},[422,137080,137081],{},"\u003Carticle>"," 内容标签",[450,137084,137085,137088],{},[422,137086,137087],{},"\u003Csection>"," 定义文档某个区域",[450,137090,137091,137094],{},[422,137092,137093],{},"\u003Caside>"," 侧边栏标签",[450,137096,137097,137100],{},[422,137098,137099],{},"\u003Cfooter>"," 尾部标签",[393,137102],{"style":127163,"src":137103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,137105,1188],{},[447,137107,137108,137111,137114,137117],{},[450,137109,137110],{},"这种语义化标准主要是针对搜索引擎的",[450,137112,137113],{},"这些标签页面中可以经常使用",[450,137115,137116],{},"在IE9中，需要把这些元素转换为块级元素",[450,137118,137119],{},"移动端更喜欢使用这些标签",[14,137121,137123],{"id":137122},"_1412-多媒体标签","14.1.2 多媒体标签",[19,137125,137126,137127,137129,137130,137132],{},"音频 ",[400,137128,765],{}," 和视频 ",[400,137131,775],{}," 两个标签",[22995,137134,137136],{"id":137135},"_14121-视频标签-video","14.1.2.1 视频标签- video",[972,137138,137139],{},[450,137140,137141],{},"支持格式：",[393,137143],{"style":127163,"src":137144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,137146,137147],{},"尽量使用MP4，兼容性好",[19,137149,137150],{},"用MP4就可以",[416,137152,137154],{"className":128054,"code":137153,"language":128056,"meta":395,"style":395},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[422,137155,137156],{"__ignoreMap":395},[425,137157,137158,137160,137162,137164,137166,137169,137171,137174,137177,137180,137182,137184],{"class":427,"line":428},[425,137159,2057],{"class":701},[425,137161,775],{"class":52055},[425,137163,55994],{"class":431},[425,137165,1204],{"class":701},[425,137167,137168],{"class":435},"\"movie.mp4\"",[425,137170,93178],{"class":431},[425,137172,137173],{"class":431}," autoplay",[425,137175,137176],{"class":431}," muted",[425,137178,137179],{"class":431}," loop",[425,137181,56069],{"class":701},[425,137183,775],{"class":52055},[425,137185,52062],{"class":701},[972,137187,137188],{"start":698},[450,137189,137190],{},"兼容写法",[19,137192,137193],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[416,137195,137196],{"className":128054,"code":137153,"language":128056,"meta":395,"style":395},[422,137197,137198],{"__ignoreMap":395},[425,137199,137200,137202,137204,137206,137208,137210,137212,137214,137216,137218,137220,137222],{"class":427,"line":428},[425,137201,2057],{"class":701},[425,137203,775],{"class":52055},[425,137205,55994],{"class":431},[425,137207,1204],{"class":701},[425,137209,137168],{"class":435},[425,137211,93178],{"class":431},[425,137213,137173],{"class":431},[425,137215,137176],{"class":431},[425,137217,137179],{"class":431},[425,137219,56069],{"class":701},[425,137221,775],{"class":52055},[425,137223,52062],{"class":701},[19,137225,137226],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[972,137228,137229],{"start":710},[450,137230,137231],{},"video常用属性",[393,137233],{"style":127163,"src":137234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,137236,137237],{},"poster属性后面是跟的等待加载图片的地址",[416,137239,137240],{"className":128054,"code":134809,"language":128056,"meta":395,"style":395},[422,137241,137242],{"__ignoreMap":395},[425,137243,137244,137246,137248,137250,137252,137254,137256,137258,137260,137262,137264,137266],{"class":427,"line":428},[425,137245,2057],{"class":701},[425,137247,393],{"class":52055},[425,137249,55994],{"class":431},[425,137251,1204],{"class":701},[425,137253,134824],{"class":435},[425,137255,56002],{"class":431},[425,137257,1204],{"class":701},[425,137259,134831],{"class":435},[425,137261,134834],{"class":431},[425,137263,1204],{"class":701},[425,137265,134839],{"class":435},[425,137267,52062],{"class":701},[19,137269,137270],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[416,137272,137274],{"className":127307,"code":137273,"language":127309,"meta":395,"style":395},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[422,137275,137276,137281,137287,137311,137316,137321],{"__ignoreMap":395},[425,137277,137278],{"class":427,"line":428},[425,137279,137280],{"class":1216},"\u002F* 2D 位移 *\u002F\n",[425,137282,137283,137285],{"class":427,"line":698},[425,137284,52366],{"class":52055},[425,137286,16569],{"class":701},[425,137288,137289,137292,137294,137297,137299,137301,137303,137305,137307,137309],{"class":427,"line":710},[425,137290,137291],{"class":691},"  transform",[425,137293,52192],{"class":701},[425,137295,137296],{"class":691},"translate",[425,137298,1159],{"class":701},[425,137300,1460],{"class":691},[425,137302,52247],{"class":1155},[425,137304,13434],{"class":701},[425,137306,1804],{"class":691},[425,137308,52247],{"class":1155},[425,137310,3719],{"class":701},[425,137312,137313],{"class":427,"line":721},[425,137314,137315],{"class":1216},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[425,137317,137318],{"class":427,"line":735},[425,137319,137320],{"class":1216},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[425,137322,137323],{"class":427,"line":743},[425,137324,2578],{"class":701},[19,137326,137327],{},"muted:自动静音属性",[22995,137329,137331],{"id":137330},"_14122-音频标签audio","14.1.2.2 音频标签audio",[972,137333,137334],{},[450,137335,137336],{},"基本使用",[19,137338,137339,137340,137345,137346],{},"当前 ",[400,137341,137342],{},[422,137343,137344],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[400,137347,137348],{},"mp3格式",[393,137350],{"style":127163,"src":137351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[972,137353,137354],{"start":698},[450,137355,137190],{},[416,137357,137358],{"className":128054,"code":137153,"language":128056,"meta":395,"style":395},[422,137359,137360],{"__ignoreMap":395},[425,137361,137362,137364,137366,137368,137370,137372,137374,137376,137378,137380,137382,137384],{"class":427,"line":428},[425,137363,2057],{"class":701},[425,137365,775],{"class":52055},[425,137367,55994],{"class":431},[425,137369,1204],{"class":701},[425,137371,137168],{"class":435},[425,137373,93178],{"class":431},[425,137375,137173],{"class":431},[425,137377,137176],{"class":431},[425,137379,137179],{"class":431},[425,137381,56069],{"class":701},[425,137383,775],{"class":52055},[425,137385,52062],{"class":701},[19,137387,137388],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[972,137390,137391],{"start":710},[450,137392,137393],{},"常用属性",[393,137395],{"style":127163,"src":137396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[416,137398,137399],{"className":128054,"code":137153,"language":128056,"meta":395,"style":395},[422,137400,137401],{"__ignoreMap":395},[425,137402,137403,137405,137407,137409,137411,137413,137415,137417,137419,137421,137423,137425],{"class":427,"line":428},[425,137404,2057],{"class":701},[425,137406,775],{"class":52055},[425,137408,55994],{"class":431},[425,137410,1204],{"class":701},[425,137412,137168],{"class":435},[425,137414,93178],{"class":431},[425,137416,137173],{"class":431},[425,137418,137176],{"class":431},[425,137420,137179],{"class":431},[425,137422,56069],{"class":701},[425,137424,775],{"class":52055},[425,137426,52062],{"class":701},[19,137428,137429],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22995,137431,137433],{"id":137432},"_14123-总结","14.1.2.3 总结",[447,137435,137436,137439,137442,137445,137448],{},[450,137437,137438],{},"音频标签和视频标签使用方式基本一致",[450,137440,137441],{},"浏览器支持情况不同",[450,137443,137444],{},"谷歌浏览器把音频和视频自动播放禁止了",[450,137446,137447],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[450,137449,137450],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[14,137452,137454],{"id":137453},"_1413-表单元素","14.1.3 表单元素",[22995,137456,137458],{"id":137457},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[393,137460],{"style":127163,"src":137461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[416,137463,137465],{"className":128054,"code":137464,"language":128056,"meta":395,"style":395},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[422,137466,137467],{"__ignoreMap":395},[425,137468,137469,137471,137473,137475,137477,137479,137481,137483,137486,137488,137490,137493],{"class":427,"line":428},[425,137470,2057],{"class":701},[425,137472,54576],{"class":52055},[425,137474,54579],{"class":431},[425,137476,1204],{"class":701},[425,137478,63454],{"class":435},[425,137480,15917],{"class":431},[425,137482,1204],{"class":701},[425,137484,137485],{"class":435},"\"username\"",[425,137487,61775],{"class":431},[425,137489,1204],{"class":701},[425,137491,137492],{"class":435},"\"请输入用户名\"",[425,137494,52062],{"class":701},[393,137496],{"style":127163,"src":137497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22995,137499,137501],{"id":137500},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[393,137503],{"style":127163,"src":137504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,137506,137507],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,137509,137510],{},"快捷操作：",[393,137512],{"style":127163,"src":137513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,137515,137516],{},"例子1：",[416,137518,137520],{"className":128054,"code":137519,"language":128056,"meta":395,"style":395},"\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",[422,137521,137522,137545,137572,137601,137620],{"__ignoreMap":395},[425,137523,137524,137526,137528,137530,137532,137535,137538,137540,137543],{"class":427,"line":428},[425,137525,2057],{"class":701},[425,137527,67380],{"class":52055},[425,137529,67383],{"class":431},[425,137531,1204],{"class":701},[425,137533,137534],{"class":435},"\"\u002Fsubmit\"",[425,137536,137537],{"class":431}," method",[425,137539,1204],{"class":701},[425,137541,137542],{"class":435},"\"post\"",[425,137544,52062],{"class":701},[425,137546,137547,137549,137551,137553,137555,137557,137559,137561,137563,137565,137567,137570],{"class":427,"line":698},[425,137548,52899],{"class":701},[425,137550,54576],{"class":52055},[425,137552,54579],{"class":431},[425,137554,1204],{"class":701},[425,137556,63454],{"class":435},[425,137558,15917],{"class":431},[425,137560,1204],{"class":701},[425,137562,137485],{"class":435},[425,137564,61775],{"class":431},[425,137566,1204],{"class":701},[425,137568,137569],{"class":435},"\"用户名\"",[425,137571,52062],{"class":701},[425,137573,137574,137576,137578,137580,137582,137585,137587,137589,137592,137594,137596,137599],{"class":427,"line":710},[425,137575,52899],{"class":701},[425,137577,54576],{"class":52055},[425,137579,54579],{"class":431},[425,137581,1204],{"class":701},[425,137583,137584],{"class":435},"\"password\"",[425,137586,15917],{"class":431},[425,137588,1204],{"class":701},[425,137590,137591],{"class":435},"\"pwd\"",[425,137593,61775],{"class":431},[425,137595,1204],{"class":701},[425,137597,137598],{"class":435},"\"密码\"",[425,137600,52062],{"class":701},[425,137602,137603,137605,137607,137609,137611,137613,137616,137618],{"class":427,"line":721},[425,137604,52899],{"class":701},[425,137606,54642],{"class":52055},[425,137608,54579],{"class":431},[425,137610,1204],{"class":701},[425,137612,67403],{"class":435},[425,137614,137615],{"class":701},">提交\u003C\u002F",[425,137617,54642],{"class":52055},[425,137619,52062],{"class":701},[425,137621,137622,137624,137626],{"class":427,"line":735},[425,137623,52540],{"class":701},[425,137625,67380],{"class":52055},[425,137627,52062],{"class":701},[393,137629],{"style":127163,"src":137630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,137632,137633],{},"value是表单域的内容",[19,137635,137636],{},"例子2：",[416,137638,137639],{"className":128054,"code":137519,"language":128056,"meta":395,"style":395},[422,137640,137641,137661,137687,137713,137731],{"__ignoreMap":395},[425,137642,137643,137645,137647,137649,137651,137653,137655,137657,137659],{"class":427,"line":428},[425,137644,2057],{"class":701},[425,137646,67380],{"class":52055},[425,137648,67383],{"class":431},[425,137650,1204],{"class":701},[425,137652,137534],{"class":435},[425,137654,137537],{"class":431},[425,137656,1204],{"class":701},[425,137658,137542],{"class":435},[425,137660,52062],{"class":701},[425,137662,137663,137665,137667,137669,137671,137673,137675,137677,137679,137681,137683,137685],{"class":427,"line":698},[425,137664,52899],{"class":701},[425,137666,54576],{"class":52055},[425,137668,54579],{"class":431},[425,137670,1204],{"class":701},[425,137672,63454],{"class":435},[425,137674,15917],{"class":431},[425,137676,1204],{"class":701},[425,137678,137485],{"class":435},[425,137680,61775],{"class":431},[425,137682,1204],{"class":701},[425,137684,137569],{"class":435},[425,137686,52062],{"class":701},[425,137688,137689,137691,137693,137695,137697,137699,137701,137703,137705,137707,137709,137711],{"class":427,"line":710},[425,137690,52899],{"class":701},[425,137692,54576],{"class":52055},[425,137694,54579],{"class":431},[425,137696,1204],{"class":701},[425,137698,137584],{"class":435},[425,137700,15917],{"class":431},[425,137702,1204],{"class":701},[425,137704,137591],{"class":435},[425,137706,61775],{"class":431},[425,137708,1204],{"class":701},[425,137710,137598],{"class":435},[425,137712,52062],{"class":701},[425,137714,137715,137717,137719,137721,137723,137725,137727,137729],{"class":427,"line":721},[425,137716,52899],{"class":701},[425,137718,54642],{"class":52055},[425,137720,54579],{"class":431},[425,137722,1204],{"class":701},[425,137724,67403],{"class":435},[425,137726,137615],{"class":701},[425,137728,54642],{"class":52055},[425,137730,52062],{"class":701},[425,137732,137733,137735,137737],{"class":427,"line":735},[425,137734,52540],{"class":701},[425,137736,67380],{"class":52055},[425,137738,52062],{"class":701},[393,137740],{"style":127163,"src":137741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[1099,137743,137745],{"id":137744},"_142-css新特性","14.2 CSS新特性",[14,137747,137749],{"id":137748},"_1421-新增选择器","14.2.1 新增选择器",[22995,137751,137753],{"id":137752},"_14211-属性选择器","14.2.1.1 属性选择器",[393,137755],{"style":127163,"src":137756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[416,137758,137760],{"className":127307,"code":137759,"language":127309,"meta":395,"style":395},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[422,137761,137762,137777,137793],{"__ignoreMap":395},[425,137763,137764,137766,137768,137770,137772,137774],{"class":427,"line":428},[425,137765,54576],{"class":52055},[425,137767,2037],{"class":701},[425,137769,103862],{"class":431},[425,137771,1204],{"class":1155},[425,137773,63454],{"class":435},[425,137775,137776],{"class":701},"] {\n",[425,137778,137779,137781,137783,137785,137787,137789,137791],{"class":427,"line":698},[425,137780,71651],{"class":691},[425,137782,52192],{"class":701},[425,137784,1367],{"class":691},[425,137786,52247],{"class":1155},[425,137788,52276],{"class":691},[425,137790,130887],{"class":691},[425,137792,2307],{"class":701},[425,137794,137795],{"class":427,"line":710},[425,137796,2578],{"class":701},[393,137798],{"style":127163,"src":137799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,137801,1188],{},[447,137803,137804,137807,137810,137813],{},[450,137805,137806],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[450,137808,137809],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[450,137811,137812],{},"属性选择器也可以选择出来自定义的属性",[450,137814,137815,137817],{},[400,137816,970],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22995,137819,137821],{"id":137820},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[393,137823],{"style":127163,"src":137824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[972,137826,137827],{},[450,137828,137829],{},"fist-child",[416,137831,137833],{"className":127307,"code":137832,"language":127309,"meta":395,"style":395},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[422,137834,137835,137840,137855,137875,137893],{"__ignoreMap":395},[425,137836,137837],{"class":427,"line":428},[425,137838,137839],{"class":1216},"\u002F* 属性选择器 *\u002F\n",[425,137841,137842,137844,137846,137848,137850,137852],{"class":427,"line":698},[425,137843,54576],{"class":52055},[425,137845,2037],{"class":701},[425,137847,103862],{"class":431},[425,137849,1204],{"class":1155},[425,137851,63454],{"class":435},[425,137853,137854],{"class":701},"] { }\n",[425,137856,137857,137859,137861,137863,137866,137869,137872],{"class":427,"line":710},[425,137858,54576],{"class":52055},[425,137860,2037],{"class":701},[425,137862,15691],{"class":431},[425,137864,137865],{"class":1155},"^=",[425,137867,137868],{"class":435},"\"icon\"",[425,137870,137871],{"class":701},"] { }  ",[425,137873,137874],{"class":1216},"\u002F* 以 icon 开头 *\u002F\n",[425,137876,137877,137879,137881,137883,137886,137888,137890],{"class":427,"line":721},[425,137878,54576],{"class":52055},[425,137880,2037],{"class":701},[425,137882,15691],{"class":431},[425,137884,137885],{"class":1155},"$=",[425,137887,137868],{"class":435},[425,137889,137871],{"class":701},[425,137891,137892],{"class":1216},"\u002F* 以 icon 结尾 *\u002F\n",[425,137894,137895,137897,137899,137901,137904,137906,137908],{"class":427,"line":735},[425,137896,54576],{"class":52055},[425,137898,2037],{"class":701},[425,137900,15691],{"class":431},[425,137902,137903],{"class":1155},"*=",[425,137905,137868],{"class":435},[425,137907,137871],{"class":701},[425,137909,137910],{"class":1216},"\u002F* 包含 icon *\u002F\n",[19,137912,137913],{},"ul的第一个儿子文本为红色",[19,137915,137916],{},"一定要在冒号前加空格，不然就是选中所有的了",[416,137918,137920],{"className":127307,"code":137919,"language":127309,"meta":395,"style":395},".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",[422,137921,137922,137928,137938,137942,137946,137951,137964,137977,137993,138010,138027],{"__ignoreMap":395},[425,137923,137924,137926],{"class":427,"line":428},[425,137925,127598],{"class":431},[425,137927,16569],{"class":701},[425,137929,137930,137932,137934,137936],{"class":427,"line":698},[425,137931,71660],{"class":691},[425,137933,52192],{"class":701},[425,137935,58176],{"class":691},[425,137937,2307],{"class":701},[425,137939,137940],{"class":427,"line":710},[425,137941,2578],{"class":701},[425,137943,137944],{"class":427,"line":721},[425,137945,136768],{"class":701},[425,137947,137948],{"class":427,"line":735},[425,137949,137950],{"class":1216},"\u002F* 结构伪类选择器 *\u002F\n",[425,137952,137953,137955,137958,137961],{"class":427,"line":743},[425,137954,450],{"class":52055},[425,137956,137957],{"class":431},":first-child",[425,137959,137960],{"class":701}," { }           ",[425,137962,137963],{"class":1216},"\u002F* 第一个 *\u002F\n",[425,137965,137966,137968,137971,137974],{"class":427,"line":751},[425,137967,450],{"class":52055},[425,137969,137970],{"class":431},":last-child",[425,137972,137973],{"class":701}," { }            ",[425,137975,137976],{"class":1216},"\u002F* 最后一个 *\u002F\n",[425,137978,137979,137981,137983,137985,137987,137990],{"class":427,"line":759},[425,137980,450],{"class":52055},[425,137982,130221],{"class":431},[425,137984,1159],{"class":701},[425,137986,1235],{"class":691},[425,137988,137989],{"class":701},") { }          ",[425,137991,137992],{"class":1216},"\u002F* 第2个 *\u002F\n",[425,137994,137995,137997,137999,138001,138004,138007],{"class":427,"line":770},[425,137996,450],{"class":52055},[425,137998,130221],{"class":431},[425,138000,1159],{"class":701},[425,138002,138003],{"class":691},"2n",[425,138005,138006],{"class":701},") { }         ",[425,138008,138009],{"class":1216},"\u002F* 偶数 *\u002F\n",[425,138011,138012,138014,138016,138018,138021,138024],{"class":427,"line":780},[425,138013,450],{"class":52055},[425,138015,130221],{"class":431},[425,138017,1159],{"class":701},[425,138019,138020],{"class":691},"2n+1",[425,138022,138023],{"class":701},") { }       ",[425,138025,138026],{"class":1216},"\u002F* 奇数 *\u002F\n",[425,138028,138029,138031,138033,138035,138038,138040],{"class":427,"line":790},[425,138030,450],{"class":52055},[425,138032,130221],{"class":431},[425,138034,1159],{"class":701},[425,138036,138037],{"class":691},"-n+3",[425,138039,138023],{"class":701},[425,138041,138042],{"class":1216},"\u002F* 前3个 *\u002F\n",[52366,138044,138047],{"className":138045},[138046],"example","\n  示例内容\n",[19,138049,138050],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[447,138052,138053],{},[450,138054,138055,138058],{},[422,138056,138057],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,138060,138061],{},"也就是说它选择的是熊大",[972,138063,138064],{"start":743},[450,138065,138066],{},"权重",[416,138068,138070],{"className":127307,"code":138069,"language":127309,"meta":395,"style":395},"\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",[422,138071,138072,138076,138086,138096,138110,138124,138138],{"__ignoreMap":395},[425,138073,138074],{"class":427,"line":428},[425,138075,137950],{"class":1216},[425,138077,138078,138080,138082,138084],{"class":427,"line":698},[425,138079,450],{"class":52055},[425,138081,137957],{"class":431},[425,138083,137960],{"class":701},[425,138085,137963],{"class":1216},[425,138087,138088,138090,138092,138094],{"class":427,"line":710},[425,138089,450],{"class":52055},[425,138091,137970],{"class":431},[425,138093,137973],{"class":701},[425,138095,137976],{"class":1216},[425,138097,138098,138100,138102,138104,138106,138108],{"class":427,"line":721},[425,138099,450],{"class":52055},[425,138101,130221],{"class":431},[425,138103,1159],{"class":701},[425,138105,1235],{"class":691},[425,138107,137989],{"class":701},[425,138109,137992],{"class":1216},[425,138111,138112,138114,138116,138118,138120,138122],{"class":427,"line":735},[425,138113,450],{"class":52055},[425,138115,130221],{"class":431},[425,138117,1159],{"class":701},[425,138119,138003],{"class":691},[425,138121,138006],{"class":701},[425,138123,138009],{"class":1216},[425,138125,138126,138128,138130,138132,138134,138136],{"class":427,"line":743},[425,138127,450],{"class":52055},[425,138129,130221],{"class":431},[425,138131,1159],{"class":701},[425,138133,138020],{"class":691},[425,138135,138023],{"class":701},[425,138137,138026],{"class":1216},[425,138139,138140,138142,138144,138146,138148,138150],{"class":427,"line":751},[425,138141,450],{"class":52055},[425,138143,130221],{"class":431},[425,138145,1159],{"class":701},[425,138147,138037],{"class":691},[425,138149,138023],{"class":701},[425,138151,138042],{"class":1216},[19,138153,138154],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22995,138156,138158],{"id":138157},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,138160,138161],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[393,138163],{"style":127163,"src":138164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[972,138166,138167],{},[450,138168,1188],{},[447,138170,138171,138174,138177,138180,138183,138186],{},[450,138172,138173],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[450,138175,138176],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[450,138178,138179],{},"语法： element::before {}",[450,138181,138182],{},"before 和 after 必须有 content 属性",[450,138184,138185],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[450,138187,138188],{},"伪元素选择器和标签选择器一样，权重为 1",[972,138190,138191],{"start":698},[450,138192,138193],{},"实例",[416,138195,138196],{"className":127307,"code":138069,"language":127309,"meta":395,"style":395},[422,138197,138198,138202,138212,138222,138236,138250,138264],{"__ignoreMap":395},[425,138199,138200],{"class":427,"line":428},[425,138201,137950],{"class":1216},[425,138203,138204,138206,138208,138210],{"class":427,"line":698},[425,138205,450],{"class":52055},[425,138207,137957],{"class":431},[425,138209,137960],{"class":701},[425,138211,137963],{"class":1216},[425,138213,138214,138216,138218,138220],{"class":427,"line":710},[425,138215,450],{"class":52055},[425,138217,137970],{"class":431},[425,138219,137973],{"class":701},[425,138221,137976],{"class":1216},[425,138223,138224,138226,138228,138230,138232,138234],{"class":427,"line":721},[425,138225,450],{"class":52055},[425,138227,130221],{"class":431},[425,138229,1159],{"class":701},[425,138231,1235],{"class":691},[425,138233,137989],{"class":701},[425,138235,137992],{"class":1216},[425,138237,138238,138240,138242,138244,138246,138248],{"class":427,"line":735},[425,138239,450],{"class":52055},[425,138241,130221],{"class":431},[425,138243,1159],{"class":701},[425,138245,138003],{"class":691},[425,138247,138006],{"class":701},[425,138249,138009],{"class":1216},[425,138251,138252,138254,138256,138258,138260,138262],{"class":427,"line":743},[425,138253,450],{"class":52055},[425,138255,130221],{"class":431},[425,138257,1159],{"class":701},[425,138259,138020],{"class":691},[425,138261,138023],{"class":701},[425,138263,138026],{"class":1216},[425,138265,138266,138268,138270,138272,138274,138276],{"class":427,"line":751},[425,138267,450],{"class":52055},[425,138269,130221],{"class":431},[425,138271,1159],{"class":701},[425,138273,138037],{"class":691},[425,138275,138023],{"class":701},[425,138277,138042],{"class":1216},[393,138279],{"style":127163,"src":138280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[972,138282,138283],{"start":710},[450,138284,138285],{},"使用场景1",[393,138287],{"style":127163,"src":138288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,138290,138291],{},"不需要再加盒子来整红色那部分了",[416,138293,138295],{"className":127307,"code":138294,"language":127309,"meta":395,"style":395},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[422,138296,138297,138302,138311,138322,138332,138336,138345,138356,138366],{"__ignoreMap":395},[425,138298,138299],{"class":427,"line":428},[425,138300,138301],{"class":1216},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[425,138303,138304,138306,138309],{"class":427,"line":698},[425,138305,52366],{"class":52055},[425,138307,138308],{"class":431},"::before",[425,138310,16569],{"class":701},[425,138312,138313,138316,138318,138320],{"class":427,"line":710},[425,138314,138315],{"class":691},"  content",[425,138317,52192],{"class":701},[425,138319,8652],{"class":435},[425,138321,2307],{"class":701},[425,138323,138324,138326,138328,138330],{"class":427,"line":721},[425,138325,128923],{"class":691},[425,138327,52192],{"class":701},[425,138329,61624],{"class":691},[425,138331,2307],{"class":701},[425,138333,138334],{"class":427,"line":735},[425,138335,2578],{"class":701},[425,138337,138338,138340,138343],{"class":427,"line":743},[425,138339,52366],{"class":52055},[425,138341,138342],{"class":431},"::after",[425,138344,16569],{"class":701},[425,138346,138347,138349,138351,138354],{"class":427,"line":751},[425,138348,138315],{"class":691},[425,138350,52192],{"class":701},[425,138352,138353],{"class":435},"\"→\"",[425,138355,2307],{"class":701},[425,138357,138358,138360,138362,138364],{"class":427,"line":759},[425,138359,71660],{"class":691},[425,138361,52192],{"class":701},[425,138363,62825],{"class":691},[425,138365,2307],{"class":701},[425,138367,138368],{"class":427,"line":770},[425,138369,2578],{"class":701},[393,138371],{"style":127163,"src":138372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,138374,138375],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[393,138377],{"style":127163,"src":138378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,138380,138381],{},"但是在引用时需要先转义一下",[19,138383,138384],{},"content='\\e930'",[972,138386,138387],{"start":721},[450,138388,138389],{},"使用场景2",[19,138391,138392],{},"仿土豆效果",[19,138394,138395],{},"通过使用伪元素选择器可以减少body中盒子的数量",[416,138397,138398],{"className":127307,"code":138294,"language":127309,"meta":395,"style":395},[422,138399,138400,138404,138412,138422,138432,138436,138444,138454,138464],{"__ignoreMap":395},[425,138401,138402],{"class":427,"line":428},[425,138403,138301],{"class":1216},[425,138405,138406,138408,138410],{"class":427,"line":698},[425,138407,52366],{"class":52055},[425,138409,138308],{"class":431},[425,138411,16569],{"class":701},[425,138413,138414,138416,138418,138420],{"class":427,"line":710},[425,138415,138315],{"class":691},[425,138417,52192],{"class":701},[425,138419,8652],{"class":435},[425,138421,2307],{"class":701},[425,138423,138424,138426,138428,138430],{"class":427,"line":721},[425,138425,128923],{"class":691},[425,138427,52192],{"class":701},[425,138429,61624],{"class":691},[425,138431,2307],{"class":701},[425,138433,138434],{"class":427,"line":735},[425,138435,2578],{"class":701},[425,138437,138438,138440,138442],{"class":427,"line":743},[425,138439,52366],{"class":52055},[425,138441,138342],{"class":431},[425,138443,16569],{"class":701},[425,138445,138446,138448,138450,138452],{"class":427,"line":751},[425,138447,138315],{"class":691},[425,138449,52192],{"class":701},[425,138451,138353],{"class":435},[425,138453,2307],{"class":701},[425,138455,138456,138458,138460,138462],{"class":427,"line":759},[425,138457,71660],{"class":691},[425,138459,52192],{"class":701},[425,138461,62825],{"class":691},[425,138463,2307],{"class":701},[425,138465,138466],{"class":427,"line":770},[425,138467,2578],{"class":701},[393,138469],{"style":127163,"src":138470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[972,138472,138473],{"start":735},[450,138474,138475],{},"使用场景3",[19,138477,138478],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[416,138480,138482],{"className":127307,"code":138481,"language":127309,"meta":395,"style":395},".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",[422,138483,138484,138490,138500,138504,138508,138512,138520,138530,138540,138544,138552,138562,138572],{"__ignoreMap":395},[425,138485,138486,138488],{"class":427,"line":428},[425,138487,131155],{"class":431},[425,138489,16569],{"class":701},[425,138491,138492,138494,138496,138498],{"class":427,"line":698},[425,138493,131787],{"class":691},[425,138495,52192],{"class":701},[425,138497,46],{"class":691},[425,138499,2307],{"class":701},[425,138501,138502],{"class":427,"line":710},[425,138503,2578],{"class":701},[425,138505,138506],{"class":427,"line":721},[425,138507,136768],{"class":701},[425,138509,138510],{"class":427,"line":735},[425,138511,138301],{"class":1216},[425,138513,138514,138516,138518],{"class":427,"line":743},[425,138515,52366],{"class":52055},[425,138517,138308],{"class":431},[425,138519,16569],{"class":701},[425,138521,138522,138524,138526,138528],{"class":427,"line":751},[425,138523,138315],{"class":691},[425,138525,52192],{"class":701},[425,138527,8652],{"class":435},[425,138529,2307],{"class":701},[425,138531,138532,138534,138536,138538],{"class":427,"line":759},[425,138533,128923],{"class":691},[425,138535,52192],{"class":701},[425,138537,61624],{"class":691},[425,138539,2307],{"class":701},[425,138541,138542],{"class":427,"line":770},[425,138543,2578],{"class":701},[425,138545,138546,138548,138550],{"class":427,"line":780},[425,138547,52366],{"class":52055},[425,138549,138342],{"class":431},[425,138551,16569],{"class":701},[425,138553,138554,138556,138558,138560],{"class":427,"line":790},[425,138555,138315],{"class":691},[425,138557,52192],{"class":701},[425,138559,138353],{"class":435},[425,138561,2307],{"class":701},[425,138563,138564,138566,138568,138570],{"class":427,"line":805},[425,138565,71660],{"class":691},[425,138567,52192],{"class":701},[425,138569,62825],{"class":691},[425,138571,2307],{"class":701},[425,138573,138574],{"class":427,"line":818},[425,138575,2578],{"class":701},[19,138577,138578],{},"div {\nmargin: 0 auto;\n}",[416,138580,138583],{"className":138581,"code":138582,"language":6187},[6185],"\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",[422,138584,138582],{"__ignoreMap":395},[19,138586,138587],{},"如果想让多个元素都发生变化",[19,138589,138590],{},"不能如下操作：",[19,138592,138593],{},"transition: width 2s ease 0.5s;",[19,138595,138596],{},"transition: height 2s ease 0.5s;不对！！！",[19,138598,138599],{},"上方会样式冲突，导致不显示任何过渡效果",[19,138601,138602],{},"使用如下：加逗号隔开",[19,138604,138605],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,138607,138608],{},"transition all 2s ease;",[14,138610,138612],{"id":138611},"_1426-过渡练习","14.2.6 过渡练习",[972,138614,138615],{},[450,138616,138617],{},"进度条",[393,138619],{"style":127163,"src":138620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[416,138622,138624],{"className":127307,"code":138623,"language":127309,"meta":395,"style":395},"div {\n  transition: all 0.3s ease;\n}\n",[422,138625,138626,138632,138650],{"__ignoreMap":395},[425,138627,138628,138630],{"class":427,"line":428},[425,138629,52366],{"class":52055},[425,138631,16569],{"class":701},[425,138633,138634,138637,138639,138641,138644,138646,138648],{"class":427,"line":698},[425,138635,138636],{"class":691},"  transition",[425,138638,52192],{"class":701},[425,138640,705],{"class":691},[425,138642,138643],{"class":691}," 0.3",[425,138645,1843],{"class":1155},[425,138647,79435],{"class":691},[425,138649,2307],{"class":701},[425,138651,138652],{"class":427,"line":710},[425,138653,2578],{"class":701},[972,138655,138656],{"start":698},[450,138657,138658],{},"小米logo",[19,138660,138661],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[416,138663,138665],{"className":127307,"code":138664,"language":127309,"meta":395,"style":395},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[422,138666,138667,138672,138678,138694,138699],{"__ignoreMap":395},[425,138668,138669],{"class":427,"line":428},[425,138670,138671],{"class":1216},"\u002F* CSS3 过渡 *\u002F\n",[425,138673,138674,138676],{"class":427,"line":698},[425,138675,52366],{"class":52055},[425,138677,16569],{"class":701},[425,138679,138680,138682,138684,138686,138688,138690,138692],{"class":427,"line":710},[425,138681,138636],{"class":691},[425,138683,52192],{"class":701},[425,138685,705],{"class":691},[425,138687,138643],{"class":691},[425,138689,1843],{"class":1155},[425,138691,79435],{"class":691},[425,138693,2307],{"class":701},[425,138695,138696],{"class":427,"line":721},[425,138697,138698],{"class":1216},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[425,138700,138701],{"class":427,"line":735},[425,138702,2578],{"class":701},[19,138704,138705],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[1074,138707,138708],{},"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":395,"searchDepth":698,"depth":698,"links":138710},[138711,138716],{"id":137041,"depth":698,"text":137042,"children":138712},[138713,138714,138715],{"id":137045,"depth":710,"text":137046},{"id":137122,"depth":710,"text":137123},{"id":137453,"depth":710,"text":137454},{"id":137744,"depth":698,"text":137745,"children":138717},[138718,138719],{"id":137748,"depth":710,"text":137749},{"id":138611,"depth":710,"text":138612},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":137033,"description":24374},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138726,"title":138727,"body":138728,"description":24374,"extension":1082,"meta":140472,"navigation":1084,"path":140473,"seo":140474,"stem":140475,"__hash__":140476},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138729,"toc":140453},[138730,138733,138737,138740,138746,138752,138756,138758,138761,138764,138767,138770,138773,138776,138779,138783,138787,138790,138793,138796,138800,138803,138806,138811,138814,138817,138820,138824,138827,138836,138839,138842,138846,138849,138852,138857,138864,138878,138886,138893,138898,138901,138904,138907,138914,138918,138924,138930,138933,138936,138941,138947,138949,138957,138962,138965,138971,138973,138978,138983,138986,138988,138993,138996,139001,139006,139040,139044,139048,139051,139055,139058,139144,139147,139184,139187,139223,139227,139232,139245,139299,139301,139329,139331,139359,139365,139379,139381,139425,139427,139471,139474,139481,139492,139494,139521,139523,139549,139556,139572,139574,139668,139670,139764,139771,139774,139779,139785,139859,139862,139864,139900,139902,139938,139941,139948,139967,139970,139973,139975,140000,140002,140026,140029,140032,140062,140066,140069,140132,140134,140200,140202,140266,140269,140301,140303,140329,140331,140357,140360,140391,140393,140419,140421,140447,140450],[10,138731,138727],{"id":138732},"_15-品优购项目上篇-搭建与公共模块",[1099,138734,138736],{"id":138735},"_151-项目规划","15.1 项目规划",[393,138738],{"style":127163,"src":138739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,138741,138742,138745],{},[400,138743,138744],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,138747,138748,138751],{},[400,138749,138750],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[1099,138753,138755],{"id":138754},"_152-项目介绍","15.2 项目介绍",[19,138757,138744],{},[393,138759],{"style":127163,"src":138760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,138762,138763],{},"主页：",[393,138765],{"style":127163,"src":138766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,138768,138769],{},"列表页：",[393,138771],{"style":127163,"src":138772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,138774,138775],{},"注册页：",[393,138777],{"style":127163,"src":138778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[1099,138780,138782],{"id":138781},"_153-项目搭建工作","15.3 项目搭建工作",[14,138784,138786],{"id":138785},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[393,138788],{"style":127163,"src":138789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,138791,138792],{},"经常更换的图片要放到upload文件夹中",[19,138794,138795],{},"不经常换的放到images文件夹中",[14,138797,138799],{"id":138798},"_1532-创建文件如下","15.3.2 创建文件如下",[393,138801],{"style":127163,"src":138802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[393,138804],{"style":127163,"src":138805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,138807,138808],{},[400,138809,138810],{},"初始化样式：",[19,138812,138813],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,138815,138816],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,138818,138819],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[14,138821,138823],{"id":138822},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,138825,138826],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,138828,138829,138830,138835],{},"这里最典型的应用就是 ",[400,138831,138832],{},[422,138833,138834],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[393,138837],{"style":127163,"src":138838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,138840,138841],{},"通过link方法来引入",[14,138843,138845],{"id":138844},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[393,138847],{"style":127163,"src":138848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,138850,138851],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[972,138853,138854],{},[450,138855,138856],{},"制作favicon图标",[19,138858,138859,138860,138863],{},"①把品优购图标切成 ",[422,138861,138862],{},"png"," 图片",[19,138865,138866,138867,138869,138870,138873,138874],{},"②把 ",[422,138868,138862],{}," 图片转换为 ",[422,138871,138872],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[22,138875,138876],{"href":138876,"rel":138877},"http:\u002F\u002Fwww.bitbug.net\u002F",[26],[972,138879,138880,138883],{"start":698},[450,138881,138882],{},"favicon图标放到网站根目录下",[450,138884,138885],{},"HTML页面引入favicon",[19,138887,138888,138889,138892],{},"在html 页面里面的 ",[422,138890,138891],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,138894,138895],{},[422,138896,138897],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,138899,138900],{},"复制这行代码或者在生成这个的网站进行复制",[393,138902],{"style":127163,"src":138903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,138905,138906],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,138908,138909,138910],{},"例如:",[22,138911,138912],{"href":138912,"rel":138913},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[26],[14,138915,138917],{"id":138916},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,138919,138920,138923],{},[400,138921,138922],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,138925,138926,138929],{},[400,138927,138928],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,138931,138932],{},"页面必须有三个标签用来符合 SEO 优化",[393,138934],{"style":127163,"src":138935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[972,138937,138938],{},[450,138939,138940],{},"title网站标题",[19,138942,138943,138946],{},[400,138944,138945],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,138948,69545],{},[447,138950,138951,138954],{},[450,138952,138953],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[450,138955,138956],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[972,138958,138959],{"start":698},[450,138960,138961],{},"description网站描述",[19,138963,138964],{},"简要说明我们网站主要是做什么的",[19,138966,138967,138970],{},[400,138968,138969],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,138972,69545],{},[19,138974,138975],{},[422,138976,138977],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[972,138979,138980],{"start":710},[450,138981,138982],{},"keywords关键词",[19,138984,138985],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,138987,69545],{},[19,138989,138990],{},[422,138991,138992],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,138994,138995],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,138997,138998],{},[400,138999,139000],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[972,139002,139003],{"start":721},[450,139004,139005],{},"代码总结",[416,139007,139008],{"className":128054,"code":131411,"language":128056,"meta":395,"style":395},[422,139009,139010,139014,139028,139032],{"__ignoreMap":395},[425,139011,139012],{"class":427,"line":428},[425,139013,131418],{"class":1216},[425,139015,139016,139018,139020,139022,139024,139026],{"class":427,"line":698},[425,139017,2057],{"class":701},[425,139019,52366],{"class":52055},[425,139021,54241],{"class":431},[425,139023,1204],{"class":701},[425,139025,131431],{"class":435},[425,139027,52062],{"class":701},[425,139029,139030],{"class":427,"line":710},[425,139031,131438],{"class":701},[425,139033,139034,139036,139038],{"class":427,"line":721},[425,139035,52540],{"class":701},[425,139037,52366],{"class":52055},[425,139039,52062],{"class":701},[1099,139041,139043],{"id":139042},"_154-项目公共部分制作","15.4 项目公共部分制作",[14,139045,139047],{"id":139046},"_1541-常用模块类命名","15.4.1 常用模块类命名",[393,139049],{"style":127163,"src":139050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[14,139052,139054],{"id":139053},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,139056,139057],{},"布局思路：",[447,139059,139060,139063,139066,139088,139121],{},[450,139061,139062],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[450,139064,139065],{},"里面包含版心的盒子",[450,139067,139068,139069],{},"版心盒子里面包含 1 号左侧盒子左浮动",[447,139070,139071,139079,139085],{},[450,139072,139073,139074,22497,139076,139078],{},"1 号盒子 里面包含一个",[422,139075,447],{},[422,139077,447],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[450,139080,139081,139082,139084],{},"里面的内容是水平排列，所以需要给",[422,139083,450],{},"设置浮动",[450,139086,139087],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[450,139089,139090,139091],{},"版心盒子里面包含 2 号右侧盒子右浮动",[447,139092,139093,139107,139112],{},[450,139094,139095,139096,22497,139098,139100,139101,139103,139104,139106],{},"2 号盒子 里面包含一个",[422,139097,447],{},[422,139099,447],{},"包裹",[422,139102,450],{},"，中间的",[422,139105,2068],{},"可以用样式去设置，也可以用字符 |",[450,139108,139109,139110,139084],{},"里面内容水平排列，给",[422,139111,450],{},[450,139113,139114,139115,139117,139118,139120],{},"找到里面所有偶数的 ",[422,139116,450],{}," 设置样式（偶数的 ",[422,139119,450],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[450,139122,139123,139124],{},"需要用到字体图标",[447,139125,139126,139132,139135,139138,139141],{},[450,139127,139128,139129],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[422,139130,139131],{},"arrow-icon",[450,139133,139134],{},"先要引入字体图片的资源",[450,139136,139137],{},"在样式里面利用 font-face 来进行声明",[450,139139,139140],{},"在伪元素的 content属性设置 图标的编码",[450,139142,139143],{},"给伪元素设置font-family属性",[19,139145,139146],{},"结构实例代码：",[416,139148,139150],{"className":127307,"code":139149,"language":127309,"meta":395,"style":395},"div::before {\n  content: \"\";\n  display: block;\n}\n",[422,139151,139152,139160,139170,139180],{"__ignoreMap":395},[425,139153,139154,139156,139158],{"class":427,"line":428},[425,139155,52366],{"class":52055},[425,139157,138308],{"class":431},[425,139159,16569],{"class":701},[425,139161,139162,139164,139166,139168],{"class":427,"line":698},[425,139163,138315],{"class":691},[425,139165,52192],{"class":701},[425,139167,8652],{"class":435},[425,139169,2307],{"class":701},[425,139171,139172,139174,139176,139178],{"class":427,"line":710},[425,139173,128923],{"class":691},[425,139175,52192],{"class":701},[425,139177,61624],{"class":691},[425,139179,2307],{"class":701},[425,139181,139182],{"class":427,"line":721},[425,139183,2578],{"class":701},[19,139185,139186],{},"样式实例代码：",[416,139188,139189],{"className":127307,"code":139149,"language":127309,"meta":395,"style":395},[422,139190,139191,139199,139209,139219],{"__ignoreMap":395},[425,139192,139193,139195,139197],{"class":427,"line":428},[425,139194,52366],{"class":52055},[425,139196,138308],{"class":431},[425,139198,16569],{"class":701},[425,139200,139201,139203,139205,139207],{"class":427,"line":698},[425,139202,138315],{"class":691},[425,139204,52192],{"class":701},[425,139206,8652],{"class":435},[425,139208,2307],{"class":701},[425,139210,139211,139213,139215,139217],{"class":427,"line":710},[425,139212,128923],{"class":691},[425,139214,52192],{"class":701},[425,139216,61624],{"class":691},[425,139218,2307],{"class":701},[425,139220,139221],{"class":427,"line":721},[425,139222,2578],{"class":701},[14,139224,139226],{"id":139225},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[447,139228,139229],{},[450,139230,139231],{},"header 盒子必须要有高度",[19,139233,139234,139235,139237,139238],{},"1 号盒子是 ",[422,139236,132319],{}," 标志定位，在正常开发过程中， ",[400,139239,139240,139241,139244],{},"logo的布局其实是有讲究的，需要进行 ",[422,139242,139243],{},"logoSEO","的优化 （★★★）",[447,139246,139247,139255,139263,139290],{},[450,139248,139249,139251,139252,139254],{},[422,139250,132319],{}," 里面首先放一个 ",[422,139253,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[450,139256,139257,139259,139260,139262],{},[422,139258,10],{}," 里面再放一个链接，可以返回首页的，把 ",[422,139261,132319],{}," 的背景图片给链接即可",[450,139264,139265,139266],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[447,139267,139268,139283],{},[450,139269,139270,139271,139274,139275,139278,139279,139282],{},"方法1：",[422,139272,139273],{},"text-indent"," 移到盒子外面（",[422,139276,139277],{},"text-indent: -9999px",") ，然后 ",[422,139280,139281],{},"overflow:hidden"," ，淘宝的做法",[450,139284,139285,139286,139289],{},"方法2：直接给 ",[422,139287,139288],{},"font-size: 0;"," 就看不到文字了，京东的做法",[450,139291,139292,139293,139295,139296,139298],{},"最后给链接一个 ",[422,139294,52162],{}," 属性，这样鼠标放到 ",[422,139297,132319],{}," 上就可以看到提示文字了",[19,139300,139146],{},[416,139302,139303],{"className":128054,"code":132540,"language":128056,"meta":395,"style":395},[422,139304,139305],{"__ignoreMap":395},[425,139306,139307,139309,139311,139313,139315,139317,139319,139321,139323,139325,139327],{"class":427,"line":428},[425,139308,2057],{"class":701},[425,139310,22],{"class":52055},[425,139312,61812],{"class":431},[425,139314,1204],{"class":701},[425,139316,132555],{"class":435},[425,139318,132558],{"class":431},[425,139320,1204],{"class":701},[425,139322,132563],{"class":435},[425,139324,132566],{"class":701},[425,139326,22],{"class":52055},[425,139328,52062],{"class":701},[19,139330,139186],{},[416,139332,139333],{"className":128054,"code":132540,"language":128056,"meta":395,"style":395},[422,139334,139335],{"__ignoreMap":395},[425,139336,139337,139339,139341,139343,139345,139347,139349,139351,139353,139355,139357],{"class":427,"line":428},[425,139338,2057],{"class":701},[425,139340,22],{"class":52055},[425,139342,61812],{"class":431},[425,139344,1204],{"class":701},[425,139346,132555],{"class":435},[425,139348,132558],{"class":431},[425,139350,1204],{"class":701},[425,139352,132563],{"class":435},[425,139354,132566],{"class":701},[425,139356,22],{"class":52055},[425,139358,52062],{"class":701},[19,139360,139361,139362,139364],{},"2 号盒子是 ",[422,139363,132332],{}," 搜索模块定位",[447,139366,139367,139370,139373,139376],{},[450,139368,139369],{},"search盒子利用定位的方式放在对应的位置",[450,139371,139372],{},"search盒子设置绝对定位，header盒子设置相对定位",[450,139374,139375],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[450,139377,139378],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,139380,139146],{},[416,139382,139383],{"className":127307,"code":132627,"language":127309,"meta":395,"style":395},[422,139384,139385,139407,139411,139421],{"__ignoreMap":395},[425,139386,139387,139389,139391,139393,139395,139397,139399,139401,139403,139405],{"class":427,"line":428},[425,139388,52366],{"class":52055},[425,139390,13434],{"class":701},[425,139392,19],{"class":52055},[425,139394,13434],{"class":701},[425,139396,10],{"class":52055},[425,139398,13434],{"class":701},[425,139400,447],{"class":52055},[425,139402,13434],{"class":701},[425,139404,450],{"class":52055},[425,139406,16569],{"class":701},[425,139408,139409],{"class":427,"line":698},[425,139410,132656],{"class":1216},[425,139412,139413,139415,139417,139419],{"class":427,"line":710},[425,139414,128923],{"class":691},[425,139416,52192],{"class":701},[425,139418,61624],{"class":691},[425,139420,2307],{"class":701},[425,139422,139423],{"class":427,"line":721},[425,139424,2578],{"class":701},[19,139426,139186],{},[416,139428,139429],{"className":127307,"code":132627,"language":127309,"meta":395,"style":395},[422,139430,139431,139453,139457,139467],{"__ignoreMap":395},[425,139432,139433,139435,139437,139439,139441,139443,139445,139447,139449,139451],{"class":427,"line":428},[425,139434,52366],{"class":52055},[425,139436,13434],{"class":701},[425,139438,19],{"class":52055},[425,139440,13434],{"class":701},[425,139442,10],{"class":52055},[425,139444,13434],{"class":701},[425,139446,447],{"class":52055},[425,139448,13434],{"class":701},[425,139450,450],{"class":52055},[425,139452,16569],{"class":701},[425,139454,139455],{"class":427,"line":698},[425,139456,132656],{"class":1216},[425,139458,139459,139461,139463,139465],{"class":427,"line":710},[425,139460,128923],{"class":691},[425,139462,52192],{"class":701},[425,139464,61624],{"class":691},[425,139466,2307],{"class":701},[425,139468,139469],{"class":427,"line":721},[425,139470,2578],{"class":701},[19,139472,139473],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,139475,139476,139477,139480],{},"3 号盒子是 ",[422,139478,139479],{},"hotwords"," 热词模块定位",[447,139482,139483,139486,139489],{},[450,139484,139485],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[450,139487,139488],{},"给里面所有的a标签设置 左右10px的外边距",[450,139490,139491],{},"给第一个a标签设置文字变红色（#c81623）",[19,139493,139146],{},[416,139495,139497],{"className":127307,"code":139496,"language":127309,"meta":395,"style":395},"div {\n  margin: 0 auto;\n}\n",[422,139498,139499,139505,139517],{"__ignoreMap":395},[425,139500,139501,139503],{"class":427,"line":428},[425,139502,52366],{"class":52055},[425,139504,16569],{"class":701},[425,139506,139507,139509,139511,139513,139515],{"class":427,"line":698},[425,139508,71225],{"class":691},[425,139510,52192],{"class":701},[425,139512,1341],{"class":691},[425,139514,52311],{"class":691},[425,139516,2307],{"class":701},[425,139518,139519],{"class":427,"line":710},[425,139520,2578],{"class":701},[19,139522,139186],{},[416,139524,139525],{"className":127307,"code":139496,"language":127309,"meta":395,"style":395},[422,139526,139527,139533,139545],{"__ignoreMap":395},[425,139528,139529,139531],{"class":427,"line":428},[425,139530,52366],{"class":52055},[425,139532,16569],{"class":701},[425,139534,139535,139537,139539,139541,139543],{"class":427,"line":698},[425,139536,71225],{"class":691},[425,139538,52192],{"class":701},[425,139540,1341],{"class":691},[425,139542,52311],{"class":691},[425,139544,2307],{"class":701},[425,139546,139547],{"class":427,"line":710},[425,139548,2578],{"class":701},[19,139550,139551,139552,139555],{},"4 号盒子是 ",[422,139553,139554],{},"shopcar"," 购物车模块",[447,139557,139558,139563,139566,139569],{},[450,139559,124090,139560,139562],{},[422,139561,139554],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[450,139564,139565],{},"count 统计部分用绝对定位做",[450,139567,139568],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[450,139570,139571],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,139573,139146],{},[416,139575,139576],{"className":127307,"code":132739,"language":127309,"meta":395,"style":395},[422,139577,139578,139582,139596,139600,139614,139618,139632,139636,139650,139654],{"__ignoreMap":395},[425,139579,139580],{"class":427,"line":428},[425,139581,132746],{"class":1216},[425,139583,139584,139586,139588,139590,139592,139594],{"class":427,"line":698},[425,139585,132751],{"class":431},[425,139587,80562],{"class":701},[425,139589,129667],{"class":691},[425,139591,52192],{"class":701},[425,139593,132760],{"class":691},[425,139595,130237],{"class":701},[425,139597,139598],{"class":427,"line":710},[425,139599,132767],{"class":1216},[425,139601,139602,139604,139606,139608,139610,139612],{"class":427,"line":721},[425,139603,132772],{"class":431},[425,139605,80562],{"class":701},[425,139607,129667],{"class":691},[425,139609,52192],{"class":701},[425,139611,55519],{"class":691},[425,139613,130237],{"class":701},[425,139615,139616],{"class":427,"line":735},[425,139617,132787],{"class":1216},[425,139619,139620,139622,139624,139626,139628,139630],{"class":427,"line":743},[425,139621,132792],{"class":431},[425,139623,80562],{"class":701},[425,139625,129667],{"class":691},[425,139627,52192],{"class":701},[425,139629,55586],{"class":691},[425,139631,130237],{"class":701},[425,139633,139634],{"class":427,"line":751},[425,139635,132807],{"class":1216},[425,139637,139638,139640,139642,139644,139646,139648],{"class":427,"line":759},[425,139639,132812],{"class":431},[425,139641,80562],{"class":701},[425,139643,129667],{"class":691},[425,139645,52192],{"class":701},[425,139647,86988],{"class":691},[425,139649,130237],{"class":701},[425,139651,139652],{"class":427,"line":770},[425,139653,132827],{"class":1216},[425,139655,139656,139658,139660,139662,139664,139666],{"class":427,"line":780},[425,139657,132832],{"class":431},[425,139659,80562],{"class":701},[425,139661,129667],{"class":691},[425,139663,52192],{"class":701},[425,139665,132841],{"class":691},[425,139667,130237],{"class":701},[19,139669,139186],{},[416,139671,139672],{"className":127307,"code":132739,"language":127309,"meta":395,"style":395},[422,139673,139674,139678,139692,139696,139710,139714,139728,139732,139746,139750],{"__ignoreMap":395},[425,139675,139676],{"class":427,"line":428},[425,139677,132746],{"class":1216},[425,139679,139680,139682,139684,139686,139688,139690],{"class":427,"line":698},[425,139681,132751],{"class":431},[425,139683,80562],{"class":701},[425,139685,129667],{"class":691},[425,139687,52192],{"class":701},[425,139689,132760],{"class":691},[425,139691,130237],{"class":701},[425,139693,139694],{"class":427,"line":710},[425,139695,132767],{"class":1216},[425,139697,139698,139700,139702,139704,139706,139708],{"class":427,"line":721},[425,139699,132772],{"class":431},[425,139701,80562],{"class":701},[425,139703,129667],{"class":691},[425,139705,52192],{"class":701},[425,139707,55519],{"class":691},[425,139709,130237],{"class":701},[425,139711,139712],{"class":427,"line":735},[425,139713,132787],{"class":1216},[425,139715,139716,139718,139720,139722,139724,139726],{"class":427,"line":743},[425,139717,132792],{"class":431},[425,139719,80562],{"class":701},[425,139721,129667],{"class":691},[425,139723,52192],{"class":701},[425,139725,55586],{"class":691},[425,139727,130237],{"class":701},[425,139729,139730],{"class":427,"line":751},[425,139731,132807],{"class":1216},[425,139733,139734,139736,139738,139740,139742,139744],{"class":427,"line":759},[425,139735,132812],{"class":431},[425,139737,80562],{"class":701},[425,139739,129667],{"class":691},[425,139741,52192],{"class":701},[425,139743,86988],{"class":691},[425,139745,130237],{"class":701},[425,139747,139748],{"class":427,"line":770},[425,139749,132827],{"class":1216},[425,139751,139752,139754,139756,139758,139760,139762],{"class":427,"line":780},[425,139753,132832],{"class":431},[425,139755,80562],{"class":701},[425,139757,129667],{"class":691},[425,139759,52192],{"class":701},[425,139761,132841],{"class":691},[425,139763,130237],{"class":701},[14,139765,139767,139768,139770],{"id":139766},"_1544-nav导航模块制作","15.4.4 ",[422,139769,54468],{},"导航模块制作",[393,139772],{"style":127163,"src":139773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,139775,139776,139778],{},[422,139777,54468],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,139780,139781,139782],{},"1 号盒子左侧浮动，",[422,139783,139784],{},"dropdown",[447,139786,139787,139797,139805,139811,139819,139829,139837,139848],{},[450,139788,139789,139790,101773,139793,139796],{},"1号盒子有讲究，根据相关性 里面包含 ",[422,139791,139792],{},".dt",[422,139794,139795],{},".dd"," 两个盒子",[450,139798,139799,139801,139802,139804],{},[422,139800,139792],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[422,139803,139795],{}," 挤到下面去了",[450,139806,139807,139808,139810],{},"给 ",[422,139809,139795],{}," 盒子设置宽度 和 高度，以及背景颜色",[450,139812,139807,139813,139815,139816,120992],{},[422,139814,139795],{}," 盒子里面定义 无序列表 （",[422,139817,139818],{},"ul > li > a",[450,139820,139821,139822,139824,139825,139828],{},"每个 ",[422,139823,450],{}," 都有一个高度（",[422,139826,139827],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[450,139830,139807,139831,139833,139834,120992],{},[422,139832,450],{}," 里面的a设置文字大小（",[422,139835,139836],{},"14px",[450,139838,139807,139839,139841,139842,139844,139845,139847],{},[422,139840,450],{}," 设置 ",[422,139843,128468],{},"，当鼠标移入的时候，让",[422,139846,450],{},"的背景变成白色，让里面的文字变成红色",[450,139849,139850,139852,139853,139855,139856,139858],{},[422,139851,450],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[422,139854,450],{},"的右侧，那么给",[422,139857,450],{},"设置相对定位",[19,139860,139861],{},"一定要注意相关性",[19,139863,139146],{},[416,139865,139866],{"className":127307,"code":139149,"language":127309,"meta":395,"style":395},[422,139867,139868,139876,139886,139896],{"__ignoreMap":395},[425,139869,139870,139872,139874],{"class":427,"line":428},[425,139871,52366],{"class":52055},[425,139873,138308],{"class":431},[425,139875,16569],{"class":701},[425,139877,139878,139880,139882,139884],{"class":427,"line":698},[425,139879,138315],{"class":691},[425,139881,52192],{"class":701},[425,139883,8652],{"class":435},[425,139885,2307],{"class":701},[425,139887,139888,139890,139892,139894],{"class":427,"line":710},[425,139889,128923],{"class":691},[425,139891,52192],{"class":701},[425,139893,61624],{"class":691},[425,139895,2307],{"class":701},[425,139897,139898],{"class":427,"line":721},[425,139899,2578],{"class":701},[19,139901,139186],{},[416,139903,139904],{"className":127307,"code":139149,"language":127309,"meta":395,"style":395},[422,139905,139906,139914,139924,139934],{"__ignoreMap":395},[425,139907,139908,139910,139912],{"class":427,"line":428},[425,139909,52366],{"class":52055},[425,139911,138308],{"class":431},[425,139913,16569],{"class":701},[425,139915,139916,139918,139920,139922],{"class":427,"line":698},[425,139917,138315],{"class":691},[425,139919,52192],{"class":701},[425,139921,8652],{"class":435},[425,139923,2307],{"class":701},[425,139925,139926,139928,139930,139932],{"class":427,"line":710},[425,139927,128923],{"class":691},[425,139929,52192],{"class":701},[425,139931,61624],{"class":691},[425,139933,2307],{"class":701},[425,139935,139936],{"class":427,"line":721},[425,139937,2578],{"class":701},[19,139939,139940],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,139942,139943,139944,139947],{},"2 号盒子左侧浮动，",[422,139945,139946],{},"navitems"," 导航栏组",[447,139949,139950,139955,139964],{},[450,139951,139952,139953],{},"里面结构是 ",[422,139954,139818],{},[450,139956,139957,139958,139960,139961,139963],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[422,139959,22],{},"左右的",[422,139962,31638],{},"把两侧撑开",[450,139965,139966],{},"让文字垂直居中（行高等于高度）",[393,139968],{"style":127163,"src":139969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,139971,139972],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,139974,139146],{},[416,139976,139978],{"className":127307,"code":139977,"language":127309,"meta":395,"style":395},".box {\n  float: left;\n}\n",[422,139979,139980,139986,139996],{"__ignoreMap":395},[425,139981,139982,139984],{"class":427,"line":428},[425,139983,131155],{"class":431},[425,139985,16569],{"class":701},[425,139987,139988,139990,139992,139994],{"class":427,"line":698},[425,139989,131787],{"class":691},[425,139991,52192],{"class":701},[425,139993,46],{"class":691},[425,139995,2307],{"class":701},[425,139997,139998],{"class":427,"line":710},[425,139999,2578],{"class":701},[19,140001,139186],{},[416,140003,140004],{"className":127307,"code":139977,"language":127309,"meta":395,"style":395},[422,140005,140006,140012,140022],{"__ignoreMap":395},[425,140007,140008,140010],{"class":427,"line":428},[425,140009,131155],{"class":431},[425,140011,16569],{"class":701},[425,140013,140014,140016,140018,140020],{"class":427,"line":698},[425,140015,131787],{"class":691},[425,140017,52192],{"class":701},[425,140019,46],{"class":691},[425,140021,2307],{"class":701},[425,140023,140024],{"class":427,"line":710},[425,140025,2578],{"class":701},[19,140027,140028],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[393,140030],{"style":127163,"src":140031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[416,140033,140034],{"className":127307,"code":131464,"language":127309,"meta":395,"style":395},[422,140035,140036,140042,140058],{"__ignoreMap":395},[425,140037,140038,140040],{"class":427,"line":428},[425,140039,52366],{"class":52055},[425,140041,16569],{"class":701},[425,140043,140044,140046,140048,140050,140052,140054,140056],{"class":427,"line":698},[425,140045,71651],{"class":691},[425,140047,52192],{"class":701},[425,140049,1367],{"class":691},[425,140051,52247],{"class":1155},[425,140053,52276],{"class":691},[425,140055,130699],{"class":691},[425,140057,2307],{"class":701},[425,140059,140060],{"class":427,"line":710},[425,140061,2578],{"class":701},[14,140063,140065],{"id":140064},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[393,140067],{"style":127163,"src":140068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[447,140070,140071,140076,140081],{},[450,140072,140073,140075],{},[422,140074,132510],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[450,140077,140078,140080],{},[422,140079,132510],{}," 里面有一个大的版心",[450,140082,140083,140084,140087,140088],{},"版心里面包含 1 号盒子，",[422,140085,140086],{},"mod_service"," 是服务模块，mod 是模块的意思",[447,140089,140090,140095,140108,140124,140129],{},[450,140091,139807,140092,140094],{},[422,140093,140086],{}," 设置高度（80px）和下边框",[450,140096,140097,140098,140101,140102,140104,140105,140107],{},"在里面定义 ",[422,140099,140100],{},"ul > li"," ,每个",[422,140103,450],{}," 宽度是300px 高度是 50px，给每个",[422,140106,450],{},"设置35px的左内边距",[450,140109,140110,140111,140113,140114,140116,140117,140119,140120,19407,140122,120992],{},"在每个",[422,140112,450],{},"里面，放一个 ",[422,140115,23907],{},"（里面放图标），一个",[422,140118,52366],{},"（里面放",[422,140121,52366],{},[422,140123,19],{},[450,140125,139807,140126,140128],{},[422,140127,23907],{},"设置浮动，让h5与这个div左右排列",[450,140130,140131],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,140133,139146],{},[416,140135,140137],{"className":127307,"code":140136,"language":127309,"meta":395,"style":395},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[422,140138,140139,140145,140157,140169,140196],{"__ignoreMap":395},[425,140140,140141,140143],{"class":427,"line":428},[425,140142,135064],{"class":431},[425,140144,16569],{"class":701},[425,140146,140147,140149,140151,140153,140155],{"class":427,"line":698},[425,140148,71323],{"class":691},[425,140150,52192],{"class":701},[425,140152,1848],{"class":691},[425,140154,52247],{"class":1155},[425,140156,2307],{"class":701},[425,140158,140159,140161,140163,140165,140167],{"class":427,"line":710},[425,140160,71543],{"class":691},[425,140162,52192],{"class":701},[425,140164,1848],{"class":691},[425,140166,52247],{"class":1155},[425,140168,2307],{"class":701},[425,140170,140171,140173,140175,140177,140179,140181,140183,140185,140188,140190,140192,140194],{"class":427,"line":721},[425,140172,71366],{"class":691},[425,140174,52192],{"class":701},[425,140176,62481],{"class":691},[425,140178,1159],{"class":701},[425,140180,135103],{"class":6216},[425,140182,938],{"class":701},[425,140184,62491],{"class":691},[425,140186,140187],{"class":691}," -10",[425,140189,52247],{"class":1155},[425,140191,135122],{"class":691},[425,140193,52247],{"class":1155},[425,140195,2307],{"class":701},[425,140197,140198],{"class":427,"line":735},[425,140199,2578],{"class":701},[19,140201,139186],{},[416,140203,140204],{"className":127307,"code":140136,"language":127309,"meta":395,"style":395},[422,140205,140206,140212,140224,140236,140262],{"__ignoreMap":395},[425,140207,140208,140210],{"class":427,"line":428},[425,140209,135064],{"class":431},[425,140211,16569],{"class":701},[425,140213,140214,140216,140218,140220,140222],{"class":427,"line":698},[425,140215,71323],{"class":691},[425,140217,52192],{"class":701},[425,140219,1848],{"class":691},[425,140221,52247],{"class":1155},[425,140223,2307],{"class":701},[425,140225,140226,140228,140230,140232,140234],{"class":427,"line":710},[425,140227,71543],{"class":691},[425,140229,52192],{"class":701},[425,140231,1848],{"class":691},[425,140233,52247],{"class":1155},[425,140235,2307],{"class":701},[425,140237,140238,140240,140242,140244,140246,140248,140250,140252,140254,140256,140258,140260],{"class":427,"line":721},[425,140239,71366],{"class":691},[425,140241,52192],{"class":701},[425,140243,62481],{"class":691},[425,140245,1159],{"class":701},[425,140247,135103],{"class":6216},[425,140249,938],{"class":701},[425,140251,62491],{"class":691},[425,140253,140187],{"class":691},[425,140255,52247],{"class":1155},[425,140257,135122],{"class":691},[425,140259,52247],{"class":1155},[425,140261,2307],{"class":701},[425,140263,140264],{"class":427,"line":735},[425,140265,2578],{"class":701},[19,140267,140268],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[447,140270,140271,140274,140280,140286,140298],{},[450,140272,140273],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[450,140275,140276,140277,120992],{},"里面的布局利用 自定义列表来实现（",[422,140278,140279],{},"dl > dt + dd",[450,140281,139807,140282,140285],{},[422,140283,140284],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[450,140287,139807,140288,140291,140292,19407,140294,140297],{},[422,140289,140290],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[422,140293,140290],{},[422,140295,140296],{},"dd","之间有些距离",[450,140299,140300],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,140302,139146],{},[416,140304,140305],{"className":127307,"code":139496,"language":127309,"meta":395,"style":395},[422,140306,140307,140313,140325],{"__ignoreMap":395},[425,140308,140309,140311],{"class":427,"line":428},[425,140310,52366],{"class":52055},[425,140312,16569],{"class":701},[425,140314,140315,140317,140319,140321,140323],{"class":427,"line":698},[425,140316,71225],{"class":691},[425,140318,52192],{"class":701},[425,140320,1341],{"class":691},[425,140322,52311],{"class":691},[425,140324,2307],{"class":701},[425,140326,140327],{"class":427,"line":710},[425,140328,2578],{"class":701},[19,140330,139186],{},[416,140332,140333],{"className":127307,"code":139496,"language":127309,"meta":395,"style":395},[422,140334,140335,140341,140353],{"__ignoreMap":395},[425,140336,140337,140339],{"class":427,"line":428},[425,140338,52366],{"class":52055},[425,140340,16569],{"class":701},[425,140342,140343,140345,140347,140349,140351],{"class":427,"line":698},[425,140344,71225],{"class":691},[425,140346,52192],{"class":701},[425,140348,1341],{"class":691},[425,140350,52311],{"class":691},[425,140352,2307],{"class":701},[425,140354,140355],{"class":427,"line":710},[425,140356,2578],{"class":701},[19,140358,140359],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[447,140361,140362,140371,140374,140385],{},[450,140363,140364,140365,140367,140368,140370],{},"分为上下两块，上面是 ",[422,140366,132527],{}," 友情链接，下面是 ",[422,140369,132520],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[450,140372,140373],{},"把内容分别复制到相应模块中",[450,140375,139807,140376,140378,140379,140381,140382,140384],{},[422,140377,132527],{}," 设置 15px 的下外边距，给",[422,140380,132527],{}," 里面 的 ",[422,140383,22],{}," 标签设置 左右 3px 的外边距",[450,140386,140387,140388,140390],{},"给",[422,140389,132520],{}," 设置 20px 的行高",[19,140392,139146],{},[416,140394,140395],{"className":127307,"code":139496,"language":127309,"meta":395,"style":395},[422,140396,140397,140403,140415],{"__ignoreMap":395},[425,140398,140399,140401],{"class":427,"line":428},[425,140400,52366],{"class":52055},[425,140402,16569],{"class":701},[425,140404,140405,140407,140409,140411,140413],{"class":427,"line":698},[425,140406,71225],{"class":691},[425,140408,52192],{"class":701},[425,140410,1341],{"class":691},[425,140412,52311],{"class":691},[425,140414,2307],{"class":701},[425,140416,140417],{"class":427,"line":710},[425,140418,2578],{"class":701},[19,140420,139186],{},[416,140422,140423],{"className":127307,"code":139496,"language":127309,"meta":395,"style":395},[422,140424,140425,140431,140443],{"__ignoreMap":395},[425,140426,140427,140429],{"class":427,"line":428},[425,140428,52366],{"class":52055},[425,140430,16569],{"class":701},[425,140432,140433,140435,140437,140439,140441],{"class":427,"line":698},[425,140434,71225],{"class":691},[425,140436,52192],{"class":701},[425,140438,1341],{"class":691},[425,140440,52311],{"class":691},[425,140442,2307],{"class":701},[425,140444,140445],{"class":427,"line":710},[425,140446,2578],{"class":701},[19,140448,140449],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[1074,140451,140452],{},"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":395,"searchDepth":698,"depth":698,"links":140454},[140455,140456,140457,140464],{"id":138735,"depth":698,"text":138736},{"id":138754,"depth":698,"text":138755},{"id":138781,"depth":698,"text":138782,"children":140458},[140459,140460,140461,140462,140463],{"id":138785,"depth":710,"text":138786},{"id":138798,"depth":710,"text":138799},{"id":138822,"depth":710,"text":138823},{"id":138844,"depth":710,"text":138845},{"id":138916,"depth":710,"text":138917},{"id":139042,"depth":698,"text":139043,"children":140465},[140466,140467,140468,140469,140471],{"id":139046,"depth":710,"text":139047},{"id":139053,"depth":710,"text":139054},{"id":139225,"depth":710,"text":139226},{"id":139766,"depth":710,"text":140470},"15.4.4 nav导航模块制作",{"id":140064,"depth":710,"text":140065},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138727,"description":24374},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140478,"title":140479,"body":140480,"description":24374,"extension":1082,"meta":142882,"navigation":1084,"path":142883,"seo":142884,"stem":142885,"__hash__":142886},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140481,"toc":142859},[140482,140485,140489,140493,140505,140508,140511,140514,140525,140527,140551,140553,140577,140582,140585,140587,140623,140625,140661,140664,140669,140672,140675,140678,140708,140715,140718,140728,140730,140764,140767,140801,140807,140824,140826,140862,140864,140900,140905,140930,140932,140958,140960,140984,140991,140994,141058,141060,141102,141104,141144,141151,141156,141158,141188,141190,141220,141224,141227,141234,141246,141248,141274,141276,141300,141303,141305,141329,141335,141345,141347,141377,141379,141409,141416,141457,141459,141495,141497,141533,141537,141540,141543,141546,141552,141557,141560,141583,141586,141610,141613,141637,141642,141645,141648,141651,141654,141657,141731,141733,141763,141765,141795,141798,141801,141833,141837,141841,141855,141864,141867,141872,141874,141968,141970,142064,142087,142089,142113,142115,142139,142146,142149,142159,142161,142185,142190,142198,142200,142230,142235,142275,142277,142303,142305,142331,142335,142338,142343,142346,142350,142358,142365,142373,142375,142405,142407,142437,142445,142448,142451,142453,142483,142485,142515,142518,142523,142525,142549,142551,142575,142578,142663,142665,142689,142691,142715,142719,142721,142745,142747,142781,142785,142799,142802,142807,142810,142815,142818,142848,142856],[10,140483,140479],{"id":140484},"_16-品优购项目下篇-主体与页面开发",[1099,140486,140488],{"id":140487},"_161-项目主体模块制作","16.1 项目主体模块制作",[14,140490,140492],{"id":140491},"_1611-首页制作","16.1.1 首页制作",[19,140494,140495,140497,140498,140500,140501,140504],{},[400,140496,102813],{}," 主体模块是 ",[400,140499,74813],{}," 里面专有的，注意需要新的样式文件 ",[400,140502,140503],{},"index.css，"," 就不要写在common.css中了",[393,140506],{"style":127163,"src":140507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[393,140509],{"style":127163,"src":140510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,140512,140513],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[447,140515,140516,140519,140522],{},[450,140517,140518],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[450,140520,140521],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[450,140523,140524],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,140526,139146],{},[416,140528,140529],{"className":127307,"code":139977,"language":127309,"meta":395,"style":395},[422,140530,140531,140537,140547],{"__ignoreMap":395},[425,140532,140533,140535],{"class":427,"line":428},[425,140534,131155],{"class":431},[425,140536,16569],{"class":701},[425,140538,140539,140541,140543,140545],{"class":427,"line":698},[425,140540,131787],{"class":691},[425,140542,52192],{"class":701},[425,140544,46],{"class":691},[425,140546,2307],{"class":701},[425,140548,140549],{"class":427,"line":710},[425,140550,2578],{"class":701},[19,140552,139186],{},[416,140554,140555],{"className":127307,"code":139977,"language":127309,"meta":395,"style":395},[422,140556,140557,140563,140573],{"__ignoreMap":395},[425,140558,140559,140561],{"class":427,"line":428},[425,140560,131155],{"class":431},[425,140562,16569],{"class":701},[425,140564,140565,140567,140569,140571],{"class":427,"line":698},[425,140566,131787],{"class":691},[425,140568,52192],{"class":701},[425,140570,46],{"class":691},[425,140572,2307],{"class":701},[425,140574,140575],{"class":427,"line":710},[425,140576,2578],{"class":701},[972,140578,140579],{},[450,140580,140581],{},"左侧focus模块制作",[393,140583],{"style":127163,"src":140584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,140586,139146],{},[416,140588,140589],{"className":127307,"code":128630,"language":127309,"meta":395,"style":395},[422,140590,140591,140599,140609,140619],{"__ignoreMap":395},[425,140592,140593,140595,140597],{"class":427,"line":428},[425,140594,54576],{"class":52055},[425,140596,62655],{"class":431},[425,140598,16569],{"class":701},[425,140600,140601,140603,140605,140607],{"class":427,"line":698},[425,140602,128645],{"class":691},[425,140604,52192],{"class":701},[425,140606,55644],{"class":691},[425,140608,2307],{"class":701},[425,140610,140611,140613,140615,140617],{"class":427,"line":710},[425,140612,71553],{"class":691},[425,140614,52192],{"class":701},[425,140616,55492],{"class":691},[425,140618,2307],{"class":701},[425,140620,140621],{"class":427,"line":721},[425,140622,2578],{"class":701},[19,140624,139186],{},[416,140626,140627],{"className":127307,"code":128630,"language":127309,"meta":395,"style":395},[422,140628,140629,140637,140647,140657],{"__ignoreMap":395},[425,140630,140631,140633,140635],{"class":427,"line":428},[425,140632,54576],{"class":52055},[425,140634,62655],{"class":431},[425,140636,16569],{"class":701},[425,140638,140639,140641,140643,140645],{"class":427,"line":698},[425,140640,128645],{"class":691},[425,140642,52192],{"class":701},[425,140644,55644],{"class":691},[425,140646,2307],{"class":701},[425,140648,140649,140651,140653,140655],{"class":427,"line":710},[425,140650,71553],{"class":691},[425,140652,52192],{"class":701},[425,140654,55492],{"class":691},[425,140656,2307],{"class":701},[425,140658,140659],{"class":427,"line":721},[425,140660,2578],{"class":701},[19,140662,140663],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[972,140665,140666],{"start":698},[450,140667,140668],{},"右侧newsflash模块制作",[393,140670],{"style":127163,"src":140671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,140673,140674],{},"右侧的模块 分为上中下三个盒子",[19,140676,140677],{},"结构代码：",[416,140679,140680],{"className":128054,"code":134809,"language":128056,"meta":395,"style":395},[422,140681,140682],{"__ignoreMap":395},[425,140683,140684,140686,140688,140690,140692,140694,140696,140698,140700,140702,140704,140706],{"class":427,"line":428},[425,140685,2057],{"class":701},[425,140687,393],{"class":52055},[425,140689,55994],{"class":431},[425,140691,1204],{"class":701},[425,140693,134824],{"class":435},[425,140695,56002],{"class":431},[425,140697,1204],{"class":701},[425,140699,134831],{"class":435},[425,140701,134834],{"class":431},[425,140703,1204],{"class":701},[425,140705,134839],{"class":435},[425,140707,52062],{"class":701},[19,140709,140710,140711,140714],{},"1 号盒子为 ",[422,140712,140713],{},"news"," 新闻模块 高度为 165px",[393,140716],{"style":127163,"src":140717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,140719,140720,140721,140724,140725],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[422,140722,140723],{},"news-hd","，下面是 ",[422,140726,140727],{},"news-bd",[19,140729,140677],{},[416,140731,140732],{"className":128054,"code":131411,"language":128056,"meta":395,"style":395},[422,140733,140734,140738,140752,140756],{"__ignoreMap":395},[425,140735,140736],{"class":427,"line":428},[425,140737,131418],{"class":1216},[425,140739,140740,140742,140744,140746,140748,140750],{"class":427,"line":698},[425,140741,2057],{"class":701},[425,140743,52366],{"class":52055},[425,140745,54241],{"class":431},[425,140747,1204],{"class":701},[425,140749,131431],{"class":435},[425,140751,52062],{"class":701},[425,140753,140754],{"class":427,"line":710},[425,140755,131438],{"class":701},[425,140757,140758,140760,140762],{"class":427,"line":721},[425,140759,52540],{"class":701},[425,140761,52366],{"class":52055},[425,140763,52062],{"class":701},[19,140765,140766],{},"样式代码：",[416,140768,140769],{"className":128054,"code":131411,"language":128056,"meta":395,"style":395},[422,140770,140771,140775,140789,140793],{"__ignoreMap":395},[425,140772,140773],{"class":427,"line":428},[425,140774,131418],{"class":1216},[425,140776,140777,140779,140781,140783,140785,140787],{"class":427,"line":698},[425,140778,2057],{"class":701},[425,140780,52366],{"class":52055},[425,140782,54241],{"class":431},[425,140784,1204],{"class":701},[425,140786,131431],{"class":435},[425,140788,52062],{"class":701},[425,140790,140791],{"class":427,"line":710},[425,140792,131438],{"class":701},[425,140794,140795,140797,140799],{"class":427,"line":721},[425,140796,52540],{"class":701},[425,140798,52366],{"class":52055},[425,140800,52062],{"class":701},[19,140802,140803,140804,140806],{},"上面是",[422,140805,140723],{},"，设置高度是 33px，设置下边框",[447,140808,140809,140815],{},[450,140810,140811,140812,140814],{},"里面放一个",[422,140813,23907],{}," 标题",[450,140816,140817,140818,140820,140821,140823],{},"放一个a",[422,140819,103448],{},"，内容是 更多，然后让 ",[422,140822,22],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,140825,140677],{},[416,140827,140828],{"className":127307,"code":139149,"language":127309,"meta":395,"style":395},[422,140829,140830,140838,140848,140858],{"__ignoreMap":395},[425,140831,140832,140834,140836],{"class":427,"line":428},[425,140833,52366],{"class":52055},[425,140835,138308],{"class":431},[425,140837,16569],{"class":701},[425,140839,140840,140842,140844,140846],{"class":427,"line":698},[425,140841,138315],{"class":691},[425,140843,52192],{"class":701},[425,140845,8652],{"class":435},[425,140847,2307],{"class":701},[425,140849,140850,140852,140854,140856],{"class":427,"line":710},[425,140851,128923],{"class":691},[425,140853,52192],{"class":701},[425,140855,61624],{"class":691},[425,140857,2307],{"class":701},[425,140859,140860],{"class":427,"line":721},[425,140861,2578],{"class":701},[19,140863,140766],{},[416,140865,140866],{"className":127307,"code":139149,"language":127309,"meta":395,"style":395},[422,140867,140868,140876,140886,140896],{"__ignoreMap":395},[425,140869,140870,140872,140874],{"class":427,"line":428},[425,140871,52366],{"class":52055},[425,140873,138308],{"class":431},[425,140875,16569],{"class":701},[425,140877,140878,140880,140882,140884],{"class":427,"line":698},[425,140879,138315],{"class":691},[425,140881,52192],{"class":701},[425,140883,8652],{"class":435},[425,140885,2307],{"class":701},[425,140887,140888,140890,140892,140894],{"class":427,"line":710},[425,140889,128923],{"class":691},[425,140891,52192],{"class":701},[425,140893,61624],{"class":691},[425,140895,2307],{"class":701},[425,140897,140898],{"class":427,"line":721},[425,140899,2578],{"class":701},[19,140901,140902,140903],{},"下面是",[422,140904,140727],{},[447,140906,140907,140915],{},[450,140908,140909,140910,101773,140912,140914],{},"里面包含 ",[422,140911,447],{},[422,140913,450],{}," 还有链接",[450,140916,140387,140917,140919,140920,140922,140923,140926,140927],{},[422,140918,450],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[422,140921,131973],{}," 2.设置 ",[422,140924,140925],{},"white-space: nowrap;"," 3. 设置 ",[422,140928,140929],{},"text-overflow: ellipsis;",[19,140931,140677],{},[416,140933,140935],{"className":127307,"code":140934,"language":127309,"meta":395,"style":395},"div {\n  overflow: hidden;\n}\n",[422,140936,140937,140943,140954],{"__ignoreMap":395},[425,140938,140939,140941],{"class":427,"line":428},[425,140940,52366],{"class":52055},[425,140942,16569],{"class":701},[425,140944,140945,140948,140950,140952],{"class":427,"line":698},[425,140946,140947],{"class":691},"  overflow",[425,140949,52192],{"class":701},[425,140951,62469],{"class":691},[425,140953,2307],{"class":701},[425,140955,140956],{"class":427,"line":710},[425,140957,2578],{"class":701},[19,140959,140766],{},[416,140961,140962],{"className":127307,"code":140934,"language":127309,"meta":395,"style":395},[422,140963,140964,140970,140980],{"__ignoreMap":395},[425,140965,140966,140968],{"class":427,"line":428},[425,140967,52366],{"class":52055},[425,140969,16569],{"class":701},[425,140971,140972,140974,140976,140978],{"class":427,"line":698},[425,140973,140947],{"class":691},[425,140975,52192],{"class":701},[425,140977,62469],{"class":691},[425,140979,2307],{"class":701},[425,140981,140982],{"class":427,"line":710},[425,140983,2578],{"class":701},[19,140985,140986,140987,140990],{},"2 号盒子为 ",[422,140988,140989],{},"lifeservice"," 生活服务模块 高度为 209px",[393,140992],{"style":127163,"src":140993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[447,140995,140996,140999,141009,141033,141044],{},[450,140997,140998],{},"设置边框（左右下边框）",[450,141000,141001,141002,141005,141006,141008],{},"里面的内容 是 ",[422,141003,141004],{},"ul > 12*li","，给",[422,141007,450],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[450,141010,141011,141012],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[447,141013,141014,141019,141028],{},[450,141015,141016,141018],{},[422,141017,140989],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[450,141020,141021,141022,141024,141025,141027],{},"可以让 ",[422,141023,140989],{}," 里面的 ",[422,141026,447],{}," 宽度为 252，就可以装的下 4 个 小 li",[450,141029,141030,141032],{},[422,141031,140989],{}," 盒子 overflow 隐藏多余的部分就可以了",[450,141034,117222,141035,141037,141038,141040,141041,141043],{},[422,141036,450],{}," 里面放一个 ",[422,141039,1589],{},"（里面放图标），下面的文本用 ",[422,141042,19],{}," 标签包裹",[450,141045,139807,141046,141048,141049,141051,141052,139841,141054,141057],{},[422,141047,1589],{}," 设置 24px宽和28px的高（注意 ",[422,141050,1589],{}," 是行内元素， 转成行内块），给 ",[422,141053,450],{},[422,141055,141056],{},"text-align:center"," 让里面内容居中显示",[19,141059,140677],{},[416,141061,141063],{"className":127307,"code":141062,"language":127309,"meta":395,"style":395},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[422,141064,141065,141083,141088,141098],{"__ignoreMap":395},[425,141066,141067,141069,141071,141073,141075,141077,141079,141081],{"class":427,"line":428},[425,141068,425],{"class":52055},[425,141070,13434],{"class":701},[425,141072,22],{"class":52055},[425,141074,13434],{"class":701},[425,141076,993],{"class":52055},[425,141078,13434],{"class":701},[425,141080,400],{"class":52055},[425,141082,16569],{"class":701},[425,141084,141085],{"class":427,"line":698},[425,141086,141087],{"class":1216},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[425,141089,141090,141092,141094,141096],{"class":427,"line":710},[425,141091,128923],{"class":691},[425,141093,52192],{"class":701},[425,141095,128985],{"class":691},[425,141097,2307],{"class":701},[425,141099,141100],{"class":427,"line":721},[425,141101,2578],{"class":701},[19,141103,140766],{},[416,141105,141106],{"className":127307,"code":141062,"language":127309,"meta":395,"style":395},[422,141107,141108,141126,141130,141140],{"__ignoreMap":395},[425,141109,141110,141112,141114,141116,141118,141120,141122,141124],{"class":427,"line":428},[425,141111,425],{"class":52055},[425,141113,13434],{"class":701},[425,141115,22],{"class":52055},[425,141117,13434],{"class":701},[425,141119,993],{"class":52055},[425,141121,13434],{"class":701},[425,141123,400],{"class":52055},[425,141125,16569],{"class":701},[425,141127,141128],{"class":427,"line":698},[425,141129,141087],{"class":1216},[425,141131,141132,141134,141136,141138],{"class":427,"line":710},[425,141133,128923],{"class":691},[425,141135,52192],{"class":701},[425,141137,128985],{"class":691},[425,141139,2307],{"class":701},[425,141141,141142],{"class":427,"line":721},[425,141143,2578],{"class":701},[19,141145,141146,141147,141150],{},"3 号盒子为 ",[422,141148,141149],{},"bargain"," 特价商品",[447,141152,141153],{},[450,141154,141155],{},"这个比较简单，直接插入一张图片即可",[19,141157,140677],{},[416,141159,141160],{"className":128054,"code":134809,"language":128056,"meta":395,"style":395},[422,141161,141162],{"__ignoreMap":395},[425,141163,141164,141166,141168,141170,141172,141174,141176,141178,141180,141182,141184,141186],{"class":427,"line":428},[425,141165,2057],{"class":701},[425,141167,393],{"class":52055},[425,141169,55994],{"class":431},[425,141171,1204],{"class":701},[425,141173,134824],{"class":435},[425,141175,56002],{"class":431},[425,141177,1204],{"class":701},[425,141179,134831],{"class":435},[425,141181,134834],{"class":431},[425,141183,1204],{"class":701},[425,141185,134839],{"class":435},[425,141187,52062],{"class":701},[19,141189,140766],{},[416,141191,141192],{"className":128054,"code":134809,"language":128056,"meta":395,"style":395},[422,141193,141194],{"__ignoreMap":395},[425,141195,141196,141198,141200,141202,141204,141206,141208,141210,141212,141214,141216,141218],{"class":427,"line":428},[425,141197,2057],{"class":701},[425,141199,393],{"class":52055},[425,141201,55994],{"class":431},[425,141203,1204],{"class":701},[425,141205,134824],{"class":435},[425,141207,56002],{"class":431},[425,141209,1204],{"class":701},[425,141211,134831],{"class":435},[425,141213,134834],{"class":431},[425,141215,1204],{"class":701},[425,141217,134839],{"class":435},[425,141219,52062],{"class":701},[14,141221,141223],{"id":141222},"_1612-推荐模块制作","16.1.2 推荐模块制作",[393,141225],{"style":127163,"src":141226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,141228,141229,141230,141233],{},"大盒子 ",[422,141231,141232],{},"recom"," 推荐模块 recommend",[447,141235,141236],{},[450,141237,141238,141239,141241,141242,141245],{},"给这个 ",[422,141240,141232],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[422,141243,141244],{},"#ebebeb","），设置距离上边 12px",[19,141247,140677],{},[416,141249,141251],{"className":127307,"code":141250,"language":127309,"meta":395,"style":395},"div {\n  background-color: #f0f0f0;\n}\n",[422,141252,141253,141259,141270],{"__ignoreMap":395},[425,141254,141255,141257],{"class":427,"line":428},[425,141256,52366],{"class":52055},[425,141258,16569],{"class":701},[425,141260,141261,141263,141265,141268],{"class":427,"line":698},[425,141262,71633],{"class":691},[425,141264,52192],{"class":701},[425,141266,141267],{"class":691},"#f0f0f0",[425,141269,2307],{"class":701},[425,141271,141272],{"class":427,"line":710},[425,141273,2578],{"class":701},[19,141275,140766],{},[416,141277,141278],{"className":127307,"code":141250,"language":127309,"meta":395,"style":395},[422,141279,141280,141286,141296],{"__ignoreMap":395},[425,141281,141282,141284],{"class":427,"line":428},[425,141283,52366],{"class":52055},[425,141285,16569],{"class":701},[425,141287,141288,141290,141292,141294],{"class":427,"line":698},[425,141289,71633],{"class":691},[425,141291,52192],{"class":701},[425,141293,141267],{"class":691},[425,141295,2307],{"class":701},[425,141297,141298],{"class":427,"line":710},[425,141299,2578],{"class":701},[19,141301,141302],{},"里面包含 2 个盒子， 浮动即可",[19,141304,140677],{},[416,141306,141307],{"className":127307,"code":139977,"language":127309,"meta":395,"style":395},[422,141308,141309,141315,141325],{"__ignoreMap":395},[425,141310,141311,141313],{"class":427,"line":428},[425,141312,131155],{"class":431},[425,141314,16569],{"class":701},[425,141316,141317,141319,141321,141323],{"class":427,"line":698},[425,141318,131787],{"class":691},[425,141320,52192],{"class":701},[425,141322,46],{"class":691},[425,141324,2307],{"class":701},[425,141326,141327],{"class":427,"line":710},[425,141328,2578],{"class":701},[19,141330,141331,141332],{},"1 号盒子 ",[422,141333,141334],{},"recom_hd",[447,141336,141337,141340],{},[450,141338,141339],{},"设置宽度205px，高度163px",[450,141341,140811,141342,141344],{},[422,141343,393],{},"标签，插入图片即可",[19,141346,140677],{},[416,141348,141349],{"className":128054,"code":134809,"language":128056,"meta":395,"style":395},[422,141350,141351],{"__ignoreMap":395},[425,141352,141353,141355,141357,141359,141361,141363,141365,141367,141369,141371,141373,141375],{"class":427,"line":428},[425,141354,2057],{"class":701},[425,141356,393],{"class":52055},[425,141358,55994],{"class":431},[425,141360,1204],{"class":701},[425,141362,134824],{"class":435},[425,141364,56002],{"class":431},[425,141366,1204],{"class":701},[425,141368,134831],{"class":435},[425,141370,134834],{"class":431},[425,141372,1204],{"class":701},[425,141374,134839],{"class":435},[425,141376,52062],{"class":701},[19,141378,140766],{},[416,141380,141381],{"className":128054,"code":134809,"language":128056,"meta":395,"style":395},[422,141382,141383],{"__ignoreMap":395},[425,141384,141385,141387,141389,141391,141393,141395,141397,141399,141401,141403,141405,141407],{"class":427,"line":428},[425,141386,2057],{"class":701},[425,141388,393],{"class":52055},[425,141390,55994],{"class":431},[425,141392,1204],{"class":701},[425,141394,134824],{"class":435},[425,141396,56002],{"class":431},[425,141398,1204],{"class":701},[425,141400,134831],{"class":435},[425,141402,134834],{"class":431},[425,141404,1204],{"class":701},[425,141406,134839],{"class":435},[425,141408,52062],{"class":701},[19,141410,141411,141412,141415],{},"2 号盒子 ",[422,141413,141414],{},"recom_bd"," ，注意里面的小竖线",[447,141417,141418,141429,141432,141437,141442],{},[450,141419,141420,141421,141423,141424,141426,141427],{},"右侧结构里面放 ",[422,141422,447],{}," 包含 4个 ",[422,141425,450],{},"，每个li里面包含一个",[422,141428,393],{},[450,141430,141431],{},"直接利用切片工具把里面的内容当成一张图片",[450,141433,139807,141434,141436],{},[422,141435,450],{}," 设置浮动",[450,141438,139807,141439,141441],{},[422,141440,393],{}," 设置宽高，宽度 248px，高度 163px",[450,141443,141444,141445,141005,141448,141450,141451,141453,141454],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[422,141446,141447],{},"top 10px",[422,141449,450],{},"设置相对定位（注意，最后一个",[422,141452,450],{},"不用设置伪元素），可以利用 ",[422,141455,141456],{},"nth-child(-n+3){...}",[19,141458,140677],{},[416,141460,141461],{"className":127307,"code":139149,"language":127309,"meta":395,"style":395},[422,141462,141463,141471,141481,141491],{"__ignoreMap":395},[425,141464,141465,141467,141469],{"class":427,"line":428},[425,141466,52366],{"class":52055},[425,141468,138308],{"class":431},[425,141470,16569],{"class":701},[425,141472,141473,141475,141477,141479],{"class":427,"line":698},[425,141474,138315],{"class":691},[425,141476,52192],{"class":701},[425,141478,8652],{"class":435},[425,141480,2307],{"class":701},[425,141482,141483,141485,141487,141489],{"class":427,"line":710},[425,141484,128923],{"class":691},[425,141486,52192],{"class":701},[425,141488,61624],{"class":691},[425,141490,2307],{"class":701},[425,141492,141493],{"class":427,"line":721},[425,141494,2578],{"class":701},[19,141496,140766],{},[416,141498,141499],{"className":127307,"code":139149,"language":127309,"meta":395,"style":395},[422,141500,141501,141509,141519,141529],{"__ignoreMap":395},[425,141502,141503,141505,141507],{"class":427,"line":428},[425,141504,52366],{"class":52055},[425,141506,138308],{"class":431},[425,141508,16569],{"class":701},[425,141510,141511,141513,141515,141517],{"class":427,"line":698},[425,141512,138315],{"class":691},[425,141514,52192],{"class":701},[425,141516,8652],{"class":435},[425,141518,2307],{"class":701},[425,141520,141521,141523,141525,141527],{"class":427,"line":710},[425,141522,128923],{"class":691},[425,141524,52192],{"class":701},[425,141526,61624],{"class":691},[425,141528,2307],{"class":701},[425,141530,141531],{"class":427,"line":721},[425,141532,2578],{"class":701},[14,141534,141536],{"id":141535},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[393,141538],{"style":127163,"src":141539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,141541,141542],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,141544,141545],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,141547,141548,141551],{},[422,141549,141550],{},"box_hd"," 制作",[19,141553,141331,141554,141556],{},[422,141555,141550],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[393,141558],{"style":127163,"src":141559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[447,141561,141562,141567,141572,141575],{},[450,141563,141564,141566],{},[422,141565,141550],{}," 给 30px 的高度，2个像素的下边框",[450,141568,141569,141570],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[422,141571,139818],{},[450,141573,141574],{},"左侧盒左浮动，右侧盒子右浮动",[450,141576,141577,141579,141580,141582],{},[422,141578,22],{},"标签之间的距离用左右的",[422,141581,31638],{},"撑开即可",[19,141584,141585],{},"结构代码",[416,141587,141588],{"className":127307,"code":139977,"language":127309,"meta":395,"style":395},[422,141589,141590,141596,141606],{"__ignoreMap":395},[425,141591,141592,141594],{"class":427,"line":428},[425,141593,131155],{"class":431},[425,141595,16569],{"class":701},[425,141597,141598,141600,141602,141604],{"class":427,"line":698},[425,141599,131787],{"class":691},[425,141601,52192],{"class":701},[425,141603,46],{"class":691},[425,141605,2307],{"class":701},[425,141607,141608],{"class":427,"line":710},[425,141609,2578],{"class":701},[19,141611,141612],{},"样式代码",[416,141614,141615],{"className":127307,"code":139977,"language":127309,"meta":395,"style":395},[422,141616,141617,141623,141633],{"__ignoreMap":395},[425,141618,141619,141621],{"class":427,"line":428},[425,141620,131155],{"class":431},[425,141622,16569],{"class":701},[425,141624,141625,141627,141629,141631],{"class":427,"line":698},[425,141626,131787],{"class":691},[425,141628,52192],{"class":701},[425,141630,46],{"class":691},[425,141632,2307],{"class":701},[425,141634,141635],{"class":427,"line":710},[425,141636,2578],{"class":701},[19,141638,141639,141551],{},[422,141640,141641],{},"box_bd",[19,141643,141644],{},"2 号盒子 box_bd，不要给高度",[393,141646],{"style":127163,"src":141647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,141649,141650],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,141652,141653],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,141655,141656],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[447,141658,141659,141671,141687],{},[450,141660,141661,141663,141664,141667,141668,141670],{},[422,141662,141641],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[422,141665,141666],{},"tab_content","，在",[422,141669,141666],{}," 里面包裹tab选项卡对应的内容",[450,141672,141673,141674,141677,141678,141680,141681,141683,141684,141686],{},"内容被一个大盒子包裹（",[422,141675,141676],{},"tab_list_item","），里面是 ",[422,141679,447],{}," 包裹 5个 ",[422,141682,450],{},"，每个",[422,141685,450],{},"设置对应的宽度，然后设置浮动",[450,141688,141689,141690,141692,141693,141695,141696],{},"而这5个",[422,141691,450],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[422,141694,450],{},"设置",[447,141697,141698,141716,141719],{},[450,141699,141700,141701,141703,141704,141706,141707,141709,141710,141712,141713,141715],{},"第一个小 ",[422,141702,450],{}," 分为上下结构，上面是 ",[422,141705,447],{}," 包裹 ",[422,141708,450],{}," ，",[422,141711,450],{},"里面包裹 ",[422,141714,22],{},"，下面插入一张图片",[450,141717,141718],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[450,141720,141721,141722,141724,141725,141727,141728,141730],{},"后面的小 ",[422,141723,450],{}," 里面先放一个",[422,141726,22],{},"标签，然后在",[422,141729,22],{},"标签里面插入图片即可",[19,141732,141585],{},[416,141734,141735],{"className":128054,"code":134809,"language":128056,"meta":395,"style":395},[422,141736,141737],{"__ignoreMap":395},[425,141738,141739,141741,141743,141745,141747,141749,141751,141753,141755,141757,141759,141761],{"class":427,"line":428},[425,141740,2057],{"class":701},[425,141742,393],{"class":52055},[425,141744,55994],{"class":431},[425,141746,1204],{"class":701},[425,141748,134824],{"class":435},[425,141750,56002],{"class":431},[425,141752,1204],{"class":701},[425,141754,134831],{"class":435},[425,141756,134834],{"class":431},[425,141758,1204],{"class":701},[425,141760,134839],{"class":435},[425,141762,52062],{"class":701},[19,141764,141612],{},[416,141766,141767],{"className":128054,"code":134809,"language":128056,"meta":395,"style":395},[422,141768,141769],{"__ignoreMap":395},[425,141770,141771,141773,141775,141777,141779,141781,141783,141785,141787,141789,141791,141793],{"class":427,"line":428},[425,141772,2057],{"class":701},[425,141774,393],{"class":52055},[425,141776,55994],{"class":431},[425,141778,1204],{"class":701},[425,141780,134824],{"class":435},[425,141782,56002],{"class":431},[425,141784,1204],{"class":701},[425,141786,134831],{"class":435},[425,141788,134834],{"class":431},[425,141790,1204],{"class":701},[425,141792,134839],{"class":435},[425,141794,52062],{"class":701},[19,141796,141797],{},"tab栏切换需求！！！！！！介绍：",[393,141799],{"style":127163,"src":141800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[447,141802,141803,141811,141817,141820],{},[450,141804,141805,141808,141809],{},[422,141806,141807],{},"tab","栏的布局是 ",[422,141810,139818],{},[450,141812,141813,141814,141816],{},"有多少个",[422,141815,141807],{},"选项卡，那么对应就有多少个内容",[450,141818,141819],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[450,141821,141822,141823,141826,141827,141829,141830,141832],{},"等后面我们学习了",[422,141824,141825],{},"js","之后，我们就会配合",[422,141828,141825],{},"来实现，",[422,141831,141807],{},"栏的切换",[1099,141834,141836],{"id":141835},"_162-列表制作","16.2 列表制作",[14,141838,141840],{"id":141839},"_1621-准备工作","16.2.1 准备工作",[447,141842,141843,141846,141849,141852],{},[450,141844,141845],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[450,141847,141848],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[450,141850,141851],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[450,141853,141854],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[14,141856,141858,141859,101773,141861,141863],{"id":141857},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[422,141860,132312],{},[422,141862,54468],{}," 修改",[393,141865],{"style":127163,"src":141866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[447,141868,141869],{},[450,141870,141871],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,141873,140677],{},[416,141875,141876],{"className":127307,"code":132739,"language":127309,"meta":395,"style":395},[422,141877,141878,141882,141896,141900,141914,141918,141932,141936,141950,141954],{"__ignoreMap":395},[425,141879,141880],{"class":427,"line":428},[425,141881,132746],{"class":1216},[425,141883,141884,141886,141888,141890,141892,141894],{"class":427,"line":698},[425,141885,132751],{"class":431},[425,141887,80562],{"class":701},[425,141889,129667],{"class":691},[425,141891,52192],{"class":701},[425,141893,132760],{"class":691},[425,141895,130237],{"class":701},[425,141897,141898],{"class":427,"line":710},[425,141899,132767],{"class":1216},[425,141901,141902,141904,141906,141908,141910,141912],{"class":427,"line":721},[425,141903,132772],{"class":431},[425,141905,80562],{"class":701},[425,141907,129667],{"class":691},[425,141909,52192],{"class":701},[425,141911,55519],{"class":691},[425,141913,130237],{"class":701},[425,141915,141916],{"class":427,"line":735},[425,141917,132787],{"class":1216},[425,141919,141920,141922,141924,141926,141928,141930],{"class":427,"line":743},[425,141921,132792],{"class":431},[425,141923,80562],{"class":701},[425,141925,129667],{"class":691},[425,141927,52192],{"class":701},[425,141929,55586],{"class":691},[425,141931,130237],{"class":701},[425,141933,141934],{"class":427,"line":751},[425,141935,132807],{"class":1216},[425,141937,141938,141940,141942,141944,141946,141948],{"class":427,"line":759},[425,141939,132812],{"class":431},[425,141941,80562],{"class":701},[425,141943,129667],{"class":691},[425,141945,52192],{"class":701},[425,141947,86988],{"class":691},[425,141949,130237],{"class":701},[425,141951,141952],{"class":427,"line":770},[425,141953,132827],{"class":1216},[425,141955,141956,141958,141960,141962,141964,141966],{"class":427,"line":780},[425,141957,132832],{"class":431},[425,141959,80562],{"class":701},[425,141961,129667],{"class":691},[425,141963,52192],{"class":701},[425,141965,132841],{"class":691},[425,141967,130237],{"class":701},[19,141969,140766],{},[416,141971,141972],{"className":127307,"code":132739,"language":127309,"meta":395,"style":395},[422,141973,141974,141978,141992,141996,142010,142014,142028,142032,142046,142050],{"__ignoreMap":395},[425,141975,141976],{"class":427,"line":428},[425,141977,132746],{"class":1216},[425,141979,141980,141982,141984,141986,141988,141990],{"class":427,"line":698},[425,141981,132751],{"class":431},[425,141983,80562],{"class":701},[425,141985,129667],{"class":691},[425,141987,52192],{"class":701},[425,141989,132760],{"class":691},[425,141991,130237],{"class":701},[425,141993,141994],{"class":427,"line":710},[425,141995,132767],{"class":1216},[425,141997,141998,142000,142002,142004,142006,142008],{"class":427,"line":721},[425,141999,132772],{"class":431},[425,142001,80562],{"class":701},[425,142003,129667],{"class":691},[425,142005,52192],{"class":701},[425,142007,55519],{"class":691},[425,142009,130237],{"class":701},[425,142011,142012],{"class":427,"line":735},[425,142013,132787],{"class":1216},[425,142015,142016,142018,142020,142022,142024,142026],{"class":427,"line":743},[425,142017,132792],{"class":431},[425,142019,80562],{"class":701},[425,142021,129667],{"class":691},[425,142023,52192],{"class":701},[425,142025,55586],{"class":691},[425,142027,130237],{"class":701},[425,142029,142030],{"class":427,"line":751},[425,142031,132807],{"class":1216},[425,142033,142034,142036,142038,142040,142042,142044],{"class":427,"line":759},[425,142035,132812],{"class":431},[425,142037,80562],{"class":701},[425,142039,129667],{"class":691},[425,142041,52192],{"class":701},[425,142043,86988],{"class":691},[425,142045,130237],{"class":701},[425,142047,142048],{"class":427,"line":770},[425,142049,132827],{"class":1216},[425,142051,142052,142054,142056,142058,142060,142062],{"class":427,"line":780},[425,142053,132832],{"class":431},[425,142055,80562],{"class":701},[425,142057,129667],{"class":691},[425,142059,52192],{"class":701},[425,142061,132841],{"class":691},[425,142063,130237],{"class":701},[447,142065,142066,142077],{},[450,142067,142068,142069,142072,142073,101773,142075],{},"1 号盒子左侧浮动 ",[422,142070,142071],{},"sk_list"," 里面包含 ",[422,142074,447],{},[422,142076,450],{},[450,142078,142079,142080,142072,142083,101773,142085],{},"2 号盒子左侧浮动 ",[422,142081,142082],{},"sk_con",[422,142084,447],{},[422,142086,450],{},[19,142088,140677],{},[416,142090,142091],{"className":127307,"code":139977,"language":127309,"meta":395,"style":395},[422,142092,142093,142099,142109],{"__ignoreMap":395},[425,142094,142095,142097],{"class":427,"line":428},[425,142096,131155],{"class":431},[425,142098,16569],{"class":701},[425,142100,142101,142103,142105,142107],{"class":427,"line":698},[425,142102,131787],{"class":691},[425,142104,52192],{"class":701},[425,142106,46],{"class":691},[425,142108,2307],{"class":701},[425,142110,142111],{"class":427,"line":710},[425,142112,2578],{"class":701},[19,142114,140766],{},[416,142116,142117],{"className":127307,"code":139977,"language":127309,"meta":395,"style":395},[422,142118,142119,142125,142135],{"__ignoreMap":395},[425,142120,142121,142123],{"class":427,"line":428},[425,142122,131155],{"class":431},[425,142124,16569],{"class":701},[425,142126,142127,142129,142131,142133],{"class":427,"line":698},[425,142128,131787],{"class":691},[425,142130,52192],{"class":701},[425,142132,46],{"class":691},[425,142134,2307],{"class":701},[425,142136,142137],{"class":427,"line":710},[425,142138,2578],{"class":701},[14,142140,142142,142143],{"id":142141},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[422,142144,142145],{},"sk_container",[393,142147],{"style":127163,"src":142148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[447,142150,142151,142156],{},[450,142152,141331,142153,142155],{},[422,142154,142145],{}," 给宽度 1200，不要给高度",[450,142157,142158],{},"一定不要忘记清除浮动",[19,142160,140677],{},[416,142162,142163],{"className":127307,"code":139977,"language":127309,"meta":395,"style":395},[422,142164,142165,142171,142181],{"__ignoreMap":395},[425,142166,142167,142169],{"class":427,"line":428},[425,142168,131155],{"class":431},[425,142170,16569],{"class":701},[425,142172,142173,142175,142177,142179],{"class":427,"line":698},[425,142174,131787],{"class":691},[425,142176,52192],{"class":701},[425,142178,46],{"class":691},[425,142180,2307],{"class":701},[425,142182,142183],{"class":427,"line":710},[425,142184,2578],{"class":701},[972,142186,142187],{},[450,142188,142189],{},"sk_hd制作",[447,142191,142192],{},[450,142193,141411,142194,142197],{},[422,142195,142196],{},"sk_hd"," ，插入图片即可",[19,142199,140677],{},[416,142201,142202],{"className":128054,"code":134809,"language":128056,"meta":395,"style":395},[422,142203,142204],{"__ignoreMap":395},[425,142205,142206,142208,142210,142212,142214,142216,142218,142220,142222,142224,142226,142228],{"class":427,"line":428},[425,142207,2057],{"class":701},[425,142209,393],{"class":52055},[425,142211,55994],{"class":431},[425,142213,1204],{"class":701},[425,142215,134824],{"class":435},[425,142217,56002],{"class":431},[425,142219,1204],{"class":701},[425,142221,134831],{"class":435},[425,142223,134834],{"class":431},[425,142225,1204],{"class":701},[425,142227,134839],{"class":435},[425,142229,52062],{"class":701},[972,142231,142232],{"start":698},[450,142233,142234],{},"sk_bd制作",[447,142236,142237],{},[450,142238,142239,142240,142243,142244,101773,142246,142248],{},"3 号盒子 ",[422,142241,142242],{},"sk_bd"," ，里面包含很多的 ",[422,142245,447],{},[422,142247,450],{},[447,142249,142250,142259],{},[450,142251,142252,142253,142255,142256,142258],{},"当鼠标移入到 ",[422,142254,450],{}," 上面的时候显示红色的边框，在这里先给 ",[422,142257,450],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[450,142260,142261,142262,142264,142265,142267,142268,142271,142272,142274],{},"由于给每个 ",[422,142263,450],{}," 都设置了外边距，导致一行的最后一个 ",[422,142266,450],{}," 掉了下来，在这里我们利用 ",[422,142269,142270],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[422,142273,450],{},"，去掉外边距就好了",[19,142276,140677],{},[416,142278,142279],{"className":127307,"code":139496,"language":127309,"meta":395,"style":395},[422,142280,142281,142287,142299],{"__ignoreMap":395},[425,142282,142283,142285],{"class":427,"line":428},[425,142284,52366],{"class":52055},[425,142286,16569],{"class":701},[425,142288,142289,142291,142293,142295,142297],{"class":427,"line":698},[425,142290,71225],{"class":691},[425,142292,52192],{"class":701},[425,142294,1341],{"class":691},[425,142296,52311],{"class":691},[425,142298,2307],{"class":701},[425,142300,142301],{"class":427,"line":710},[425,142302,2578],{"class":701},[19,142304,140766],{},[416,142306,142307],{"className":127307,"code":139496,"language":127309,"meta":395,"style":395},[422,142308,142309,142315,142327],{"__ignoreMap":395},[425,142310,142311,142313],{"class":427,"line":428},[425,142312,52366],{"class":52055},[425,142314,16569],{"class":701},[425,142316,142317,142319,142321,142323,142325],{"class":427,"line":698},[425,142318,71225],{"class":691},[425,142320,52192],{"class":701},[425,142322,1341],{"class":691},[425,142324,52311],{"class":691},[425,142326,2307],{"class":701},[425,142328,142329],{"class":427,"line":710},[425,142330,2578],{"class":701},[1099,142332,142334],{"id":142333},"_163-注册页面制作","16.3 注册页面制作",[393,142336],{"style":127163,"src":142337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,142339,142340,142342],{},[400,142341,970],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[393,142344],{"style":127163,"src":142345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[14,142347,142349],{"id":142348},"_1631-准备工作","16.3.1 准备工作",[447,142351,142352,142355],{},[450,142353,142354],{},"创建register.html，引入 base.css，引入favicon图标",[450,142356,142357],{},"创建register.css ，在html页面进行引入",[14,142359,142361,142362,142364],{"id":142360},"_1632-header-头部实现","16.3.2 ",[422,142363,132312],{}," 头部实现",[447,142366,142367,142370],{},[450,142368,142369],{},"整个内容用 版心 进行包裹",[450,142371,142372],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,142374,140677],{},[416,142376,142377],{"className":128054,"code":134809,"language":128056,"meta":395,"style":395},[422,142378,142379],{"__ignoreMap":395},[425,142380,142381,142383,142385,142387,142389,142391,142393,142395,142397,142399,142401,142403],{"class":427,"line":428},[425,142382,2057],{"class":701},[425,142384,393],{"class":52055},[425,142386,55994],{"class":431},[425,142388,1204],{"class":701},[425,142390,134824],{"class":435},[425,142392,56002],{"class":431},[425,142394,1204],{"class":701},[425,142396,134831],{"class":435},[425,142398,134834],{"class":431},[425,142400,1204],{"class":701},[425,142402,134839],{"class":435},[425,142404,52062],{"class":701},[19,142406,140766],{},[416,142408,142409],{"className":128054,"code":134809,"language":128056,"meta":395,"style":395},[422,142410,142411],{"__ignoreMap":395},[425,142412,142413,142415,142417,142419,142421,142423,142425,142427,142429,142431,142433,142435],{"class":427,"line":428},[425,142414,2057],{"class":701},[425,142416,393],{"class":52055},[425,142418,55994],{"class":431},[425,142420,1204],{"class":701},[425,142422,134824],{"class":435},[425,142424,56002],{"class":431},[425,142426,1204],{"class":701},[425,142428,134831],{"class":435},[425,142430,134834],{"class":431},[425,142432,1204],{"class":701},[425,142434,134839],{"class":435},[425,142436,52062],{"class":701},[14,142438,142440,142441,142444],{"id":142439},"_1633-registerarea-主体模块实现","16.3.3 ",[422,142442,142443],{},"registerarea"," 主体模块实现",[393,142446],{"style":127163,"src":142447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,142449,142450],{},"整个大盒子 高度为 522px，设置4个边框",[19,142452,140677],{},[416,142454,142455],{"className":127307,"code":131464,"language":127309,"meta":395,"style":395},[422,142456,142457,142463,142479],{"__ignoreMap":395},[425,142458,142459,142461],{"class":427,"line":428},[425,142460,52366],{"class":52055},[425,142462,16569],{"class":701},[425,142464,142465,142467,142469,142471,142473,142475,142477],{"class":427,"line":698},[425,142466,71651],{"class":691},[425,142468,52192],{"class":701},[425,142470,1367],{"class":691},[425,142472,52247],{"class":1155},[425,142474,52276],{"class":691},[425,142476,130699],{"class":691},[425,142478,2307],{"class":701},[425,142480,142481],{"class":427,"line":710},[425,142482,2578],{"class":701},[19,142484,140766],{},[416,142486,142487],{"className":127307,"code":131464,"language":127309,"meta":395,"style":395},[422,142488,142489,142495,142511],{"__ignoreMap":395},[425,142490,142491,142493],{"class":427,"line":428},[425,142492,52366],{"class":52055},[425,142494,16569],{"class":701},[425,142496,142497,142499,142501,142503,142505,142507,142509],{"class":427,"line":698},[425,142498,71651],{"class":691},[425,142500,52192],{"class":701},[425,142502,1367],{"class":691},[425,142504,52247],{"class":1155},[425,142506,52276],{"class":691},[425,142508,130699],{"class":691},[425,142510,2307],{"class":701},[425,142512,142513],{"class":427,"line":710},[425,142514,2578],{"class":701},[19,142516,142517],{},"1号盒子 是一个 h3 标签，放标题",[447,142519,142520],{},[450,142521,142522],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,142524,140677],{},[416,142526,142527],{"className":127307,"code":139977,"language":127309,"meta":395,"style":395},[422,142528,142529,142535,142545],{"__ignoreMap":395},[425,142530,142531,142533],{"class":427,"line":428},[425,142532,131155],{"class":431},[425,142534,16569],{"class":701},[425,142536,142537,142539,142541,142543],{"class":427,"line":698},[425,142538,131787],{"class":691},[425,142540,52192],{"class":701},[425,142542,46],{"class":691},[425,142544,2307],{"class":701},[425,142546,142547],{"class":427,"line":710},[425,142548,2578],{"class":701},[19,142550,140766],{},[416,142552,142553],{"className":127307,"code":139977,"language":127309,"meta":395,"style":395},[422,142554,142555,142561,142571],{"__ignoreMap":395},[425,142556,142557,142559],{"class":427,"line":428},[425,142558,131155],{"class":431},[425,142560,16569],{"class":701},[425,142562,142563,142565,142567,142569],{"class":427,"line":698},[425,142564,131787],{"class":691},[425,142566,52192],{"class":701},[425,142568,46],{"class":691},[425,142570,2307],{"class":701},[425,142572,142573],{"class":427,"line":710},[425,142574,2578],{"class":701},[19,142576,142577],{},"2号盒子 里面放注册的内容",[447,142579,142580,142583,142592,142606,142619,142622,142625,142643,142657],{},[450,142581,142582],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[450,142584,142585,142586,142588,142589,142591],{},"里面的内容利用 ",[422,142587,447],{}," 包含 ",[422,142590,450],{}," 来实现的（不需要用表格）",[450,142593,139821,142594,142596,142597,142599,142600,142602,142603,142605],{},[422,142595,450],{}," 里面，左侧放 ",[422,142598,34363],{}," 标签， 中间放",[422,142601,54576],{}," 标签， 右侧放 ",[422,142604,425],{}," 提示信息",[450,142607,142608,142609,142611,142612,142614,142615,142618],{},"左侧 ",[422,142610,34363],{},"里面的文字都是右对齐，我们可以给",[422,142613,34363],{},"设置一个宽度（88px），然后利用",[422,142616,142617],{},"text-align"," 来设置右对齐",[450,142620,142621],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[450,142623,142624],{},"右侧 span修饰一下文字颜色",[450,142626,142627,142628],{},"提示信息的样式优化",[447,142629,142630,142633,142636],{},[450,142631,142632],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[450,142634,142635],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[450,142637,142638,142639,142642],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[422,142640,142641],{},"vertical-algin"," 来设置 图片与文字对齐方式",[450,142644,142645,142646],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[447,142647,142648,142654],{},[450,142649,142650,142651,142653],{},"设置 ",[422,142652,993],{}," 的 左右 12px 的内边距，设置一下文字颜色",[450,142655,142656],{},"分别设置 背景颜色",[450,142658,142659,142660,142662],{},"同意协议 和 完成注册 都是用 ",[422,142661,450],{}," 进行包裹",[19,142664,140677],{},[416,142666,142667],{"className":127307,"code":141250,"language":127309,"meta":395,"style":395},[422,142668,142669,142675,142685],{"__ignoreMap":395},[425,142670,142671,142673],{"class":427,"line":428},[425,142672,52366],{"class":52055},[425,142674,16569],{"class":701},[425,142676,142677,142679,142681,142683],{"class":427,"line":698},[425,142678,71633],{"class":691},[425,142680,52192],{"class":701},[425,142682,141267],{"class":691},[425,142684,2307],{"class":701},[425,142686,142687],{"class":427,"line":710},[425,142688,2578],{"class":701},[19,142690,140766],{},[416,142692,142693],{"className":127307,"code":141250,"language":127309,"meta":395,"style":395},[422,142694,142695,142701,142711],{"__ignoreMap":395},[425,142696,142697,142699],{"class":427,"line":428},[425,142698,52366],{"class":52055},[425,142700,16569],{"class":701},[425,142702,142703,142705,142707,142709],{"class":427,"line":698},[425,142704,71633],{"class":691},[425,142706,52192],{"class":701},[425,142708,141267],{"class":691},[425,142710,2307],{"class":701},[425,142712,142713],{"class":427,"line":710},[425,142714,2578],{"class":701},[14,142716,142718],{"id":142717},"_1634-底部实现","16.3.4 底部实现",[19,142720,140677],{},[416,142722,142723],{"className":127307,"code":141250,"language":127309,"meta":395,"style":395},[422,142724,142725,142731,142741],{"__ignoreMap":395},[425,142726,142727,142729],{"class":427,"line":428},[425,142728,52366],{"class":52055},[425,142730,16569],{"class":701},[425,142732,142733,142735,142737,142739],{"class":427,"line":698},[425,142734,71633],{"class":691},[425,142736,52192],{"class":701},[425,142738,141267],{"class":691},[425,142740,2307],{"class":701},[425,142742,142743],{"class":427,"line":710},[425,142744,2578],{"class":701},[19,142746,140766],{},[416,142748,142749],{"className":128054,"code":131411,"language":128056,"meta":395,"style":395},[422,142750,142751,142755,142769,142773],{"__ignoreMap":395},[425,142752,142753],{"class":427,"line":428},[425,142754,131418],{"class":1216},[425,142756,142757,142759,142761,142763,142765,142767],{"class":427,"line":698},[425,142758,2057],{"class":701},[425,142760,52366],{"class":52055},[425,142762,54241],{"class":431},[425,142764,1204],{"class":701},[425,142766,131431],{"class":435},[425,142768,52062],{"class":701},[425,142770,142771],{"class":427,"line":710},[425,142772,131438],{"class":701},[425,142774,142775,142777,142779],{"class":427,"line":721},[425,142776,52540],{"class":701},[425,142778,52366],{"class":52055},[425,142780,52062],{"class":701},[1099,142782,142784],{"id":142783},"_164-项目总结","16.4 项目总结",[972,142786,142787,142790,142793,142796],{},[450,142788,142789],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[450,142791,142792],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[450,142794,142795],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[450,142797,142798],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[393,142800],{"style":127163,"src":142801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[972,142803,142804],{"start":735},[450,142805,142806],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[393,142808],{"style":127163,"src":142809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[972,142811,142812],{"start":743},[450,142813,142814],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[393,142816],{"style":127163,"src":142817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[416,142819,142820],{"className":128054,"code":137464,"language":128056,"meta":395,"style":395},[422,142821,142822],{"__ignoreMap":395},[425,142823,142824,142826,142828,142830,142832,142834,142836,142838,142840,142842,142844,142846],{"class":427,"line":428},[425,142825,2057],{"class":701},[425,142827,54576],{"class":52055},[425,142829,54579],{"class":431},[425,142831,1204],{"class":701},[425,142833,63454],{"class":435},[425,142835,15917],{"class":431},[425,142837,1204],{"class":701},[425,142839,137485],{"class":435},[425,142841,61775],{"class":431},[425,142843,1204],{"class":701},[425,142845,137492],{"class":435},[425,142847,52062],{"class":701},[972,142849,142850,142853],{"start":751},[450,142851,142852],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[450,142854,142855],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[1074,142857,142858],{},"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":395,"searchDepth":698,"depth":698,"links":142860},[142861,142866,142873,142881],{"id":140487,"depth":698,"text":140488,"children":142862},[142863,142864,142865],{"id":140491,"depth":710,"text":140492},{"id":141222,"depth":710,"text":141223},{"id":141535,"depth":710,"text":141536},{"id":141835,"depth":698,"text":141836,"children":142867},[142868,142869,142871],{"id":141839,"depth":710,"text":141840},{"id":141857,"depth":710,"text":142870},"16.2.2 列表页 header 和 nav 修改",{"id":142141,"depth":710,"text":142872},"16.2.3 列表页主体 sk_container",{"id":142333,"depth":698,"text":142334,"children":142874},[142875,142876,142878,142880],{"id":142348,"depth":710,"text":142349},{"id":142360,"depth":710,"text":142877},"16.3.2 header 头部实现",{"id":142439,"depth":710,"text":142879},"16.3.3 registerarea 主体模块实现",{"id":142717,"depth":710,"text":142718},{"id":142783,"depth":698,"text":142784},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140479,"description":24374},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142888,"title":142889,"body":142890,"description":24374,"extension":1082,"meta":142998,"navigation":1084,"path":142999,"seo":143000,"stem":143001,"__hash__":143002},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142891,"toc":142993},[142892,142895,142899,142902,142905,142914,142923,142927,142932,142939,142957,142960,142963,142966,142969,142972,142975,142978,142981,142984,142987,142990],[10,142893,142889],{"id":142894},"_17-web服务器与网站发布",[1099,142896,142898],{"id":142897},"_171-web服务器","17.1 Web服务器",[19,142900,142901],{},"把自己网站上传到服务器上，可以让其他人访问",[393,142903],{"style":127163,"src":142904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,142906,142907,142910,142911],{},[400,142908,142909],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[400,142912,142913],{},"Web 服务器等",[19,142915,142916,142917,101773,142920,26731],{},"根据服务器在网络中所在的位置不同，又可分为 ",[400,142918,142919],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[400,142921,142922],{},"远程服务器",[14,142924,142926],{"id":142925},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,142928,142929],{},[400,142930,142931],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,142933,142934,142935],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[22,142936,142937],{"href":142937,"rel":142938},"http:\u002F\u002Ffree.3v.do\u002F",[26],[447,142940,142941,142944,142947,142954],{},[450,142942,142943],{},"去免费空间网站注册账号。",[450,142945,142946],{},"记录下主机名、用户名、密码、域名。",[450,142948,142949,142950,142953],{},"利用 ",[422,142951,142952],{},"utftp"," 软件 上传网站到远程服务器",[450,142955,142956],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,142958,142959],{},"使用软件上传，对上传软件文件进行解压",[393,142961],{"style":127163,"src":142962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[393,142964],{"style":127163,"src":142965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,142967,142968],{},"输入刚刚申请的服务器账号信息：",[393,142970],{"style":127163,"src":142971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[393,142973],{"style":127163,"src":142974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[393,142976],{"style":127163,"src":142977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[393,142979],{"style":127163,"src":142980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,142982,142983],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[393,142985],{"style":127163,"src":142986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,142988,142989],{},"浏览器输入域名即可访问",[19,142991,142992],{},"首页一定必须是index",{"title":395,"searchDepth":698,"depth":698,"links":142994},[142995],{"id":142897,"depth":698,"text":142898,"children":142996},[142997],{"id":142925,"depth":710,"text":142926},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142889,"description":24374},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":143004,"title":143005,"body":143006,"description":24374,"extension":1082,"meta":143933,"navigation":1084,"path":143934,"seo":143935,"stem":143936,"__hash__":143937},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":143007,"toc":143916},[143008,143011,143015,143018,143021,143032,143035,143039,143043,143048,143051,143054,143057,143060,143064,143090,143094,143098,143101,143104,143108,143141,143145,143148,143151,143215,143219,143223,143226,143229,143232,143236,143281,143285,143288,143318,143322,143326,143329,143332,143336,143339,143408,143411,143519,143521,143527,143531,143534,143537,143633,143636,143640,143664,143668,143671,143675,143678,143682,143685,143688,143691,143694,143698,143701,143704,143708,143712,143715,143718,143721,143724,143728,143731,143735,143738,143741,143786,143790,143794,143797,143800,143803,143835,143839,143842,143876,143880,143883,143913],[10,143009,143005],{"id":143010},"_18-2d动画与3d转换",[1099,143012,143014],{"id":143013},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,143016,143017],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,143019,143020],{},"转换（transform）你可以简单理解为变形",[447,143022,143023,143026,143029],{},[450,143024,143025],{},"移动：translate",[450,143027,143028],{},"旋转：rotate",[450,143030,143031],{},"缩放：scale",[393,143033],{"style":127163,"src":143034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[14,143036,143038],{"id":143037},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22995,143040,143042],{"id":143041},"_18111-translate介绍","18.1.1.1 translate介绍",[19,143044,143045,143046],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[400,143047,133966],{},[393,143049],{"style":127163,"src":143050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,143052,143053],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,143055,143056],{},"对于行内元素无效",[19,143058,143059],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22995,143061,143063],{"id":143062},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[416,143065,143066],{"className":127307,"code":139496,"language":127309,"meta":395,"style":395},[422,143067,143068,143074,143086],{"__ignoreMap":395},[425,143069,143070,143072],{"class":427,"line":428},[425,143071,52366],{"class":52055},[425,143073,16569],{"class":701},[425,143075,143076,143078,143080,143082,143084],{"class":427,"line":698},[425,143077,71225],{"class":691},[425,143079,52192],{"class":701},[425,143081,1341],{"class":691},[425,143083,52311],{"class":691},[425,143085,2307],{"class":701},[425,143087,143088],{"class":427,"line":710},[425,143089,2578],{"class":701},[14,143091,143093],{"id":143092},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22995,143095,143097],{"id":143096},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,143099,143100],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[393,143102],{"style":127163,"src":143103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22995,143105,143107],{"id":143106},"_18122-旋转效果","18.1.2.2 旋转效果",[416,143109,143111],{"className":127307,"code":143110,"language":127309,"meta":395,"style":395},"div {\n  transform: rotate(45deg);\n}\n",[422,143112,143113,143119,143137],{"__ignoreMap":395},[425,143114,143115,143117],{"class":427,"line":428},[425,143116,52366],{"class":52055},[425,143118,16569],{"class":701},[425,143120,143121,143123,143125,143128,143130,143132,143135],{"class":427,"line":698},[425,143122,137291],{"class":691},[425,143124,52192],{"class":701},[425,143126,143127],{"class":691},"rotate",[425,143129,1159],{"class":701},[425,143131,1677],{"class":691},[425,143133,143134],{"class":1155},"deg",[425,143136,3719],{"class":701},[425,143138,143139],{"class":427,"line":710},[425,143140,2578],{"class":701},[22995,143142,143144],{"id":143143},"_18123-三角做法","18.1.2.3 三角做法",[19,143146,143147],{},"该下标当经过最外层大盒子时会实现向上反转",[393,143149],{"style":127163,"src":143150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[416,143152,143153],{"className":127307,"code":135827,"language":127309,"meta":395,"style":395},[422,143154,143155,143159,143165,143175,143185,143201,143211],{"__ignoreMap":395},[425,143156,143157],{"class":427,"line":428},[425,143158,135834],{"class":1216},[425,143160,143161,143163],{"class":427,"line":698},[425,143162,135839],{"class":431},[425,143164,16569],{"class":701},[425,143166,143167,143169,143171,143173],{"class":427,"line":710},[425,143168,71323],{"class":691},[425,143170,52192],{"class":701},[425,143172,1341],{"class":691},[425,143174,2307],{"class":701},[425,143176,143177,143179,143181,143183],{"class":427,"line":721},[425,143178,71543],{"class":691},[425,143180,52192],{"class":701},[425,143182,1341],{"class":691},[425,143184,2307],{"class":701},[425,143186,143187,143189,143191,143193,143195,143197,143199],{"class":427,"line":735},[425,143188,71651],{"class":691},[425,143190,52192],{"class":701},[425,143192,1594],{"class":691},[425,143194,52247],{"class":1155},[425,143196,52276],{"class":691},[425,143198,64746],{"class":691},[425,143200,2307],{"class":701},[425,143202,143203,143205,143207,143209],{"class":427,"line":743},[425,143204,135882],{"class":691},[425,143206,52192],{"class":701},[425,143208,63124],{"class":691},[425,143210,2307],{"class":701},[425,143212,143213],{"class":427,"line":751},[425,143214,2578],{"class":701},[14,143216,143218],{"id":143217},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22995,143220,143222],{"id":143221},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,143224,143225],{},"设置中心点",[393,143227],{"style":127163,"src":143228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,143230,143231],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22995,143233,143235],{"id":143234},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[416,143237,143239],{"className":127307,"code":143238,"language":127309,"meta":395,"style":395},"\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",[422,143240,143241,143246,143252,143267,143272,143277],{"__ignoreMap":395},[425,143242,143243],{"class":427,"line":428},[425,143244,143245],{"class":1216},"\u002F* 转换中心点 *\u002F\n",[425,143247,143248,143250],{"class":427,"line":698},[425,143249,52366],{"class":52055},[425,143251,16569],{"class":701},[425,143253,143254,143257,143259,143261,143263,143265],{"class":427,"line":710},[425,143255,143256],{"class":691},"  transform-origin",[425,143258,52192],{"class":701},[425,143260,52347],{"class":691},[425,143262,18141],{"class":691},[425,143264,131170],{"class":701},[425,143266,135980],{"class":1216},[425,143268,143269],{"class":427,"line":721},[425,143270,143271],{"class":1216},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[425,143273,143274],{"class":427,"line":735},[425,143275,143276],{"class":1216},"  \u002F* transform-origin: left top; *\u002F\n",[425,143278,143279],{"class":427,"line":743},[425,143280,2578],{"class":701},[22995,143282,143284],{"id":143283},"_18133-旋转案例","18.1.3.3 旋转案例",[393,143286],{"style":127163,"src":143287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[416,143289,143290],{"className":127307,"code":143110,"language":127309,"meta":395,"style":395},[422,143291,143292,143298,143314],{"__ignoreMap":395},[425,143293,143294,143296],{"class":427,"line":428},[425,143295,52366],{"class":52055},[425,143297,16569],{"class":701},[425,143299,143300,143302,143304,143306,143308,143310,143312],{"class":427,"line":698},[425,143301,137291],{"class":691},[425,143303,52192],{"class":701},[425,143305,143127],{"class":691},[425,143307,1159],{"class":701},[425,143309,1677],{"class":691},[425,143311,143134],{"class":1155},[425,143313,3719],{"class":701},[425,143315,143316],{"class":427,"line":710},[425,143317,2578],{"class":701},[14,143319,143321],{"id":143320},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22995,143323,143325],{"id":143324},"_18141-scale介绍","18.1.4.1 scale介绍",[19,143327,143328],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[393,143330],{"style":127163,"src":143331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22995,143333,143335],{"id":143334},"_18142-分页按钮","18.1.4.2 分页按钮",[393,143337],{"style":127163,"src":143338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[416,143340,143342],{"className":127307,"code":143341,"language":127309,"meta":395,"style":395},"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",[422,143343,143344,143350,143366,143370,143374,143379,143385,143399,143404],{"__ignoreMap":395},[425,143345,143346,143348],{"class":427,"line":428},[425,143347,52366],{"class":52055},[425,143349,16569],{"class":701},[425,143351,143352,143354,143356,143359,143361,143364],{"class":427,"line":698},[425,143353,137291],{"class":691},[425,143355,52192],{"class":701},[425,143357,143358],{"class":691},"scale",[425,143360,1159],{"class":701},[425,143362,143363],{"class":691},"1.2",[425,143365,3719],{"class":701},[425,143367,143368],{"class":427,"line":710},[425,143369,2578],{"class":701},[425,143371,143372],{"class":427,"line":721},[425,143373,136768],{"class":701},[425,143375,143376],{"class":427,"line":735},[425,143377,143378],{"class":1216},"\u002F* 2D 缩放 *\u002F\n",[425,143380,143381,143383],{"class":427,"line":743},[425,143382,52366],{"class":52055},[425,143384,16569],{"class":701},[425,143386,143387,143389,143391,143393,143395,143397],{"class":427,"line":751},[425,143388,137291],{"class":691},[425,143390,52192],{"class":701},[425,143392,143358],{"class":691},[425,143394,1159],{"class":701},[425,143396,143363],{"class":691},[425,143398,3719],{"class":701},[425,143400,143401],{"class":427,"line":759},[425,143402,143403],{"class":1216},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[425,143405,143406],{"class":427,"line":770},[425,143407,2578],{"class":701},[19,143409,143410],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[416,143412,143414],{"className":127307,"code":143413,"language":127309,"meta":395,"style":395},"\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",[422,143415,143416,143421,143431,143452,143473,143477,143482,143488,143515],{"__ignoreMap":395},[425,143417,143418],{"class":427,"line":428},[425,143419,143420],{"class":1216},"\u002F* 定义动画 *\u002F\n",[425,143422,143423,143426,143429],{"class":427,"line":698},[425,143424,143425],{"class":1155},"@keyframes",[425,143427,143428],{"class":6216}," move",[425,143430,16569],{"class":701},[425,143432,143433,143436,143438,143440,143442,143445,143447,143449],{"class":427,"line":710},[425,143434,143435],{"class":431},"  0%",[425,143437,80562],{"class":701},[425,143439,48889],{"class":691},[425,143441,52192],{"class":701},[425,143443,143444],{"class":691},"translateX",[425,143446,1159],{"class":701},[425,143448,1341],{"class":691},[425,143450,143451],{"class":701},"); }\n",[425,143453,143454,143457,143459,143461,143463,143465,143467,143469,143471],{"class":427,"line":721},[425,143455,143456],{"class":431},"  100%",[425,143458,80562],{"class":701},[425,143460,48889],{"class":691},[425,143462,52192],{"class":701},[425,143464,143444],{"class":691},[425,143466,1159],{"class":701},[425,143468,1460],{"class":691},[425,143470,52247],{"class":1155},[425,143472,143451],{"class":701},[425,143474,143475],{"class":427,"line":735},[425,143476,2578],{"class":701},[425,143478,143479],{"class":427,"line":743},[425,143480,143481],{"class":1216},"\u002F* 调用动画 *\u002F\n",[425,143483,143484,143486],{"class":427,"line":751},[425,143485,52366],{"class":52055},[425,143487,16569],{"class":701},[425,143489,143490,143493,143495,143497,143499,143501,143503,143505,143507,143510,143513],{"class":427,"line":759},[425,143491,143492],{"class":691},"  animation",[425,143494,52192],{"class":701},[425,143496,135993],{"class":691},[425,143498,26109],{"class":691},[425,143500,1843],{"class":1155},[425,143502,79435],{"class":691},[425,143504,5093],{"class":691},[425,143506,1843],{"class":1155},[425,143508,143509],{"class":691}," infinite",[425,143511,143512],{"class":691}," alternate",[425,143514,2307],{"class":701},[425,143516,143517],{"class":427,"line":770},[425,143518,2578],{"class":701},[19,143520,143410],{},[416,143522,143525],{"className":143523,"code":143524,"language":6187},[6185],"\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",[422,143526,143524],{"__ignoreMap":395},[22995,143528,143530],{"id":143529},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,143532,143533],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[393,143535],{"style":127163,"src":143536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[416,143538,143539],{"className":127307,"code":143413,"language":127309,"meta":395,"style":395},[422,143540,143541,143545,143553,143571,143591,143595,143599,143605,143629],{"__ignoreMap":395},[425,143542,143543],{"class":427,"line":428},[425,143544,143420],{"class":1216},[425,143546,143547,143549,143551],{"class":427,"line":698},[425,143548,143425],{"class":1155},[425,143550,143428],{"class":6216},[425,143552,16569],{"class":701},[425,143554,143555,143557,143559,143561,143563,143565,143567,143569],{"class":427,"line":710},[425,143556,143435],{"class":431},[425,143558,80562],{"class":701},[425,143560,48889],{"class":691},[425,143562,52192],{"class":701},[425,143564,143444],{"class":691},[425,143566,1159],{"class":701},[425,143568,1341],{"class":691},[425,143570,143451],{"class":701},[425,143572,143573,143575,143577,143579,143581,143583,143585,143587,143589],{"class":427,"line":721},[425,143574,143456],{"class":431},[425,143576,80562],{"class":701},[425,143578,48889],{"class":691},[425,143580,52192],{"class":701},[425,143582,143444],{"class":691},[425,143584,1159],{"class":701},[425,143586,1460],{"class":691},[425,143588,52247],{"class":1155},[425,143590,143451],{"class":701},[425,143592,143593],{"class":427,"line":735},[425,143594,2578],{"class":701},[425,143596,143597],{"class":427,"line":743},[425,143598,143481],{"class":1216},[425,143600,143601,143603],{"class":427,"line":751},[425,143602,52366],{"class":52055},[425,143604,16569],{"class":701},[425,143606,143607,143609,143611,143613,143615,143617,143619,143621,143623,143625,143627],{"class":427,"line":759},[425,143608,143492],{"class":691},[425,143610,52192],{"class":701},[425,143612,135993],{"class":691},[425,143614,26109],{"class":691},[425,143616,1843],{"class":1155},[425,143618,79435],{"class":691},[425,143620,5093],{"class":691},[425,143622,1843],{"class":1155},[425,143624,143509],{"class":691},[425,143626,143512],{"class":691},[425,143628,2307],{"class":701},[425,143630,143631],{"class":427,"line":770},[425,143632,2578],{"class":701},[19,143634,143635],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[14,143637,143639],{"id":143638},"_1823-知识点回顾","18.2.3 知识点回顾",[416,143641,143642],{"className":127307,"code":129476,"language":127309,"meta":395,"style":395},[422,143643,143644,143650,143660],{"__ignoreMap":395},[425,143645,143646,143648],{"class":427,"line":428},[425,143647,52366],{"class":52055},[425,143649,16569],{"class":701},[425,143651,143652,143654,143656,143658],{"class":427,"line":698},[425,143653,129489],{"class":691},[425,143655,52192],{"class":701},[425,143657,62491],{"class":691},[425,143659,2307],{"class":701},[425,143661,143662],{"class":427,"line":710},[425,143663,2578],{"class":701},[1099,143665,143667],{"id":143666},"_183-3d-转换","18.3 3D 转换",[19,143669,143670],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[14,143672,143674],{"id":143673},"_1831-坐标轴认识","18.3.1 坐标轴认识",[393,143676],{"style":127163,"src":143677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[14,143679,143681],{"id":143680},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[393,143683],{"style":127163,"src":143684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,143686,143687],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,143689,143690],{},"translate3d的效果需要搭配透视perspective来使用",[393,143692],{"style":127163,"src":143693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[14,143695,143697],{"id":143696},"_1833-透视-perspective","18.3.3 透视 perspective",[393,143699],{"style":127163,"src":143700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,143702,143703],{},"透视写在父盒子上，单位为像素",[14,143705,143707],{"id":143706},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22995,143709,143711],{"id":143710},"_18341-分开解释","18.3.4.1 分开解释",[393,143713],{"style":127163,"src":143714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[393,143716],{"style":127163,"src":143717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[393,143719],{"style":127163,"src":143720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,143722,143723],{},"总结来说就是左手原则",[22995,143725,143727],{"id":143726},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[393,143729],{"style":127163,"src":143730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[14,143732,143734],{"id":143733},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[393,143736],{"style":127163,"src":143737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[393,143739],{"style":127163,"src":143740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[416,143742,143744],{"className":127307,"code":143743,"language":127309,"meta":395,"style":395},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[422,143745,143746,143752,143765,143782],{"__ignoreMap":395},[425,143747,143748,143750],{"class":427,"line":428},[425,143749,52366],{"class":52055},[425,143751,16569],{"class":701},[425,143753,143754,143757,143759,143761,143763],{"class":427,"line":698},[425,143755,143756],{"class":691},"  perspective",[425,143758,52192],{"class":701},[425,143760,65829],{"class":691},[425,143762,52247],{"class":1155},[425,143764,2307],{"class":701},[425,143766,143767,143769,143771,143774,143776,143778,143780],{"class":427,"line":710},[425,143768,137291],{"class":691},[425,143770,52192],{"class":701},[425,143772,143773],{"class":691},"rotateX",[425,143775,1159],{"class":701},[425,143777,1677],{"class":691},[425,143779,143134],{"class":1155},[425,143781,3719],{"class":701},[425,143783,143784],{"class":427,"line":721},[425,143785,2578],{"class":701},[14,143787,143789],{"id":143788},"_1836-案例","18.3.6 案例",[22995,143791,143793],{"id":143792},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[393,143795],{"style":127163,"src":143796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[393,143798],{"style":127163,"src":143799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[393,143801],{"style":127163,"src":143802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[416,143804,143806],{"className":127307,"code":143805,"language":127309,"meta":395,"style":395},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[422,143807,143808,143813,143819,143831],{"__ignoreMap":395},[425,143809,143810],{"class":427,"line":428},[425,143811,143812],{"class":1216},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[425,143814,143815,143817],{"class":427,"line":698},[425,143816,134304],{"class":431},[425,143818,16569],{"class":701},[425,143820,143821,143823,143825,143827,143829],{"class":427,"line":710},[425,143822,143756],{"class":691},[425,143824,52192],{"class":701},[425,143826,65829],{"class":691},[425,143828,52247],{"class":1155},[425,143830,2307],{"class":701},[425,143832,143833],{"class":427,"line":721},[425,143834,2578],{"class":701},[22995,143836,143838],{"id":143837},"_18362-3d导航栏","18.3.6.2 3D导航栏",[393,143840],{"style":127163,"src":143841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[416,143843,143844],{"className":128054,"code":131411,"language":128056,"meta":395,"style":395},[422,143845,143846,143850,143864,143868],{"__ignoreMap":395},[425,143847,143848],{"class":427,"line":428},[425,143849,131418],{"class":1216},[425,143851,143852,143854,143856,143858,143860,143862],{"class":427,"line":698},[425,143853,2057],{"class":701},[425,143855,52366],{"class":52055},[425,143857,54241],{"class":431},[425,143859,1204],{"class":701},[425,143861,131431],{"class":435},[425,143863,52062],{"class":701},[425,143865,143866],{"class":427,"line":710},[425,143867,131438],{"class":701},[425,143869,143870,143872,143874],{"class":427,"line":721},[425,143871,52540],{"class":701},[425,143873,52366],{"class":52055},[425,143875,52062],{"class":701},[22995,143877,143879],{"id":143878},"_18363-旋转木马","18.3.6.3 旋转木马",[393,143881],{"style":127163,"src":143882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[416,143884,143885],{"className":127307,"code":143110,"language":127309,"meta":395,"style":395},[422,143886,143887,143893,143909],{"__ignoreMap":395},[425,143888,143889,143891],{"class":427,"line":428},[425,143890,52366],{"class":52055},[425,143892,16569],{"class":701},[425,143894,143895,143897,143899,143901,143903,143905,143907],{"class":427,"line":698},[425,143896,137291],{"class":691},[425,143898,52192],{"class":701},[425,143900,143127],{"class":691},[425,143902,1159],{"class":701},[425,143904,1677],{"class":691},[425,143906,143134],{"class":1155},[425,143908,3719],{"class":701},[425,143910,143911],{"class":427,"line":710},[425,143912,2578],{"class":701},[1074,143914,143915],{},"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":395,"searchDepth":698,"depth":698,"links":143917},[143918,143925],{"id":143013,"depth":698,"text":143014,"children":143919},[143920,143921,143922,143923,143924],{"id":143037,"depth":710,"text":143038},{"id":143092,"depth":710,"text":143093},{"id":143217,"depth":710,"text":143218},{"id":143320,"depth":710,"text":143321},{"id":143638,"depth":710,"text":143639},{"id":143666,"depth":698,"text":143667,"children":143926},[143927,143928,143929,143930,143931,143932],{"id":143673,"depth":710,"text":143674},{"id":143680,"depth":710,"text":143681},{"id":143696,"depth":710,"text":143697},{"id":143706,"depth":710,"text":143707},{"id":143733,"depth":710,"text":143734},{"id":143788,"depth":710,"text":143789},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":143005,"description":24374},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143939,"title":143940,"body":143941,"description":24374,"extension":1082,"meta":144144,"navigation":1084,"path":144145,"seo":144146,"stem":144147,"__hash__":144148},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143942,"toc":144133},[143943,143946,143950,143953,143956,143960,143963,143966,143969,143973,143976,143980,143983,143987,143990,143994,144008,144012,144037,144040,144043,144060,144064,144068,144071,144074,144078,144081,144084,144102,144106,144109,144123,144127,144130],[10,143944,143940],{"id":143945},"_19-移动端基础-前缀现状与视口",[1099,143947,143949],{"id":143948},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[393,143951],{"style":127163,"src":143952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,143954,143955],{},"意思就是加个前缀，增加兼容性",[1099,143957,143959],{"id":143958},"_192-移动端现状认识","19.2 移动端现状认识",[393,143961],{"style":127163,"src":143962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,143964,143965],{},"调试方法：",[393,143967],{"style":127163,"src":143968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[1099,143970,143972],{"id":143971},"_193-视口","19.3 视口",[19,143974,143975],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[14,143977,143979],{"id":143978},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[393,143981],{"style":127163,"src":143982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[14,143984,143986],{"id":143985},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[393,143988],{"style":127163,"src":143989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[14,143991,143993],{"id":143992},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[447,143995,143996,143999,144002,144005],{},[450,143997,143998],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[450,144000,144001],{},"理想视口，对设备来讲，是最理想的视口尺寸",[450,144003,144004],{},"需要手动添写meta视口标签通知浏览器操作",[450,144006,144007],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[14,144009,144011],{"id":144010},"_1934-meta视口标签","19.3.4 meta视口标签",[416,144013,144015],{"className":128054,"code":144014,"language":128056,"meta":395,"style":395},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[422,144016,144017],{"__ignoreMap":395},[425,144018,144019,144021,144023,144025,144027,144029,144031,144033,144035],{"class":427,"line":428},[425,144020,2057],{"class":701},[425,144022,52099],{"class":52055},[425,144024,15917],{"class":431},[425,144026,1204],{"class":701},[425,144028,52146],{"class":435},[425,144030,52126],{"class":431},[425,144032,1204],{"class":701},[425,144034,52153],{"class":435},[425,144036,52062],{"class":701},[393,144038],{"style":127163,"src":144039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,144041,144042],{},"标准视口设置：",[972,144044,144045,144048,144051,144054,144057],{},[450,144046,144047],{},"视口宽度和设备保持一致",[450,144049,144050],{},"视口的默认缩放比例1.0",[450,144052,144053],{},"不允许用户自行缩放",[450,144055,144056],{},"最大允许的缩放比例1.0",[450,144058,144059],{},"最小允许的缩放比例1.0",[14,144061,144063],{"id":144062},"_1935-二倍图","19.3.5 二倍图",[22995,144065,144067],{"id":144066},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[393,144069],{"style":127163,"src":144070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[393,144072],{"style":127163,"src":144073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22995,144075,144077],{"id":144076},"_19352-多倍图","19.3.5.2 多倍图",[393,144079],{"style":127163,"src":144080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,144082,144083],{},"二倍图法，代码如下：",[416,144085,144087],{"className":127307,"code":144086,"language":127309,"meta":395,"style":395},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[422,144088,144089,144094],{"__ignoreMap":395},[425,144090,144091],{"class":427,"line":428},[425,144092,144093],{"class":1216},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[425,144095,144096,144099],{"class":427,"line":698},[425,144097,144098],{"class":52055},"background-size",[425,144100,144101],{"class":701},": 50% 50%;\n",[22995,144103,144105],{"id":144104},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[393,144107],{"style":127163,"src":144108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[972,144110,144111,144114,144117,144120],{},[450,144112,144113],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[450,144115,144116],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[450,144118,144119],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[450,144121,144122],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22995,144124,144126],{"id":144125},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[393,144128],{"style":127163,"src":144129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[1074,144131,144132],{},"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":395,"searchDepth":698,"depth":698,"links":144134},[144135,144136,144137],{"id":143948,"depth":698,"text":143949},{"id":143958,"depth":698,"text":143959},{"id":143971,"depth":698,"text":143972,"children":144138},[144139,144140,144141,144142,144143],{"id":143978,"depth":710,"text":143979},{"id":143985,"depth":710,"text":143986},{"id":143992,"depth":710,"text":143993},{"id":144010,"depth":710,"text":144011},{"id":144062,"depth":710,"text":144063},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143940,"description":24374},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":144150,"title":144151,"body":144152,"description":24374,"extension":1082,"meta":145029,"navigation":1084,"path":145030,"seo":145031,"stem":145032,"__hash__":145033},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":144153,"toc":145013},[144154,144157,144161,144168,144171,144178,144181,144186,144189,144193,144197,144204,144207,144210,144214,144217,144220,144223,144226,144229,144233,144236,144240,144242,144245,144248,144251,144254,144256,144259,144261,144291,144293,144323,144327,144330,144334,144337,144354,144357,144360,144436,144438,144441,144444,144447,144450,144452,144455,144458,144462,144484,144487,144490,144494,144497,144503,144506,144510,144513,144516,144520,144523,144526,144529,144533,144536,144539,144542,144545,144549,144552,144556,144563,144566,144569,144572,144575,144585,144588,144591,144598,144601,144605,144608,144611,144615,144618,144621,144624,144669,144672,144675,144678,144680,144809,144811,144849,144852,144855,144857,144975,144977,145011],[10,144155,144151],{"id":144156},"_20-移动端布局实战上篇",[1099,144158,144160],{"id":144159},"_201-移动端主流方案","20.1 移动端主流方案",[972,144162,144163],{},[450,144164,144165],{},[400,144166,144167],{},"单独移动端页面（主流）",[393,144169],{"style":127163,"src":144170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[972,144172,144173],{"start":698},[450,144174,144175],{},[400,144176,144177],{},"响应式兼容PC移动端",[393,144179],{"style":127163,"src":144180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[972,144182,144183],{"start":710},[450,144184,144185],{},"两种页面选型布局方式",[393,144187],{"style":127163,"src":144188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[1099,144190,144192],{"id":144191},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[14,144194,144196],{"id":144195},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,144198,144199,144200],{},"官网地址： ",[22,144201,144202],{"href":144202,"rel":144203},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[26],[393,144205],{"style":127163,"src":144206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[393,144208],{"style":127163,"src":144209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[14,144211,144213],{"id":144212},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[393,144215],{"style":127163,"src":144216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[393,144218],{"style":127163,"src":144219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,144221,144222],{},"去除高亮：",[19,144224,144225],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,144227,144228],{},"-webkit- tap-highlight-color: transparent;",[1099,144230,144232],{"id":144231},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[393,144234],{"style":127163,"src":144235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[1099,144237,144239],{"id":144238},"_204-流式布局案例","20.4 流式布局案例",[19,144241,1188],{},[19,144243,144244],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,144246,144247],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,144249,144250],{},"图片格式：",[393,144252],{"style":127163,"src":144253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,144255,136350],{},[393,144257],{"style":127163,"src":144258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,144260,140677],{},[416,144262,144263],{"className":128054,"code":134809,"language":128056,"meta":395,"style":395},[422,144264,144265],{"__ignoreMap":395},[425,144266,144267,144269,144271,144273,144275,144277,144279,144281,144283,144285,144287,144289],{"class":427,"line":428},[425,144268,2057],{"class":701},[425,144270,393],{"class":52055},[425,144272,55994],{"class":431},[425,144274,1204],{"class":701},[425,144276,134824],{"class":435},[425,144278,56002],{"class":431},[425,144280,1204],{"class":701},[425,144282,134831],{"class":435},[425,144284,134834],{"class":431},[425,144286,1204],{"class":701},[425,144288,134839],{"class":435},[425,144290,52062],{"class":701},[19,144292,140766],{},[416,144294,144295],{"className":128054,"code":134809,"language":128056,"meta":395,"style":395},[422,144296,144297],{"__ignoreMap":395},[425,144298,144299,144301,144303,144305,144307,144309,144311,144313,144315,144317,144319,144321],{"class":427,"line":428},[425,144300,2057],{"class":701},[425,144302,393],{"class":52055},[425,144304,55994],{"class":431},[425,144306,1204],{"class":701},[425,144308,134824],{"class":435},[425,144310,56002],{"class":431},[425,144312,1204],{"class":701},[425,144314,134831],{"class":435},[425,144316,134834],{"class":431},[425,144318,1204],{"class":701},[425,144320,134839],{"class":435},[425,144322,52062],{"class":701},[1099,144324,144326],{"id":144325},"_205-flex布局","20.5 flex布局",[393,144328],{"style":127163,"src":144329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[14,144331,144333],{"id":144332},"_2051-布局原理","20.5.1 布局原理",[19,144335,144336],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[447,144338,144339,144342,144345,144348,144351],{},[450,144340,144341],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[450,144343,144344],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[450,144346,144347],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[450,144349,144350],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[450,144352,144353],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,144355,144356],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,144358,144359],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[416,144361,144363],{"className":127307,"code":144362,"language":127309,"meta":395,"style":395},"\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",[422,144364,144365,144370,144377,144387,144399,144410,144421,144432],{"__ignoreMap":395},[425,144366,144367],{"class":427,"line":428},[425,144368,144369],{"class":1216},"\u002F* Flex 弹性布局 *\u002F\n",[425,144371,144372,144375],{"class":427,"line":698},[425,144373,144374],{"class":431},".container",[425,144376,16569],{"class":701},[425,144378,144379,144381,144383,144385],{"class":427,"line":710},[425,144380,128923],{"class":691},[425,144382,52192],{"class":701},[425,144384,52232],{"class":691},[425,144386,2307],{"class":701},[425,144388,144389,144392,144394,144397],{"class":427,"line":721},[425,144390,144391],{"class":691},"  flex-direction",[425,144393,52192],{"class":701},[425,144395,144396],{"class":691},"row",[425,144398,2307],{"class":701},[425,144400,144401,144404,144406,144408],{"class":427,"line":735},[425,144402,144403],{"class":691},"  justify-content",[425,144405,52192],{"class":701},[425,144407,52423],{"class":691},[425,144409,2307],{"class":701},[425,144411,144412,144415,144417,144419],{"class":427,"line":743},[425,144413,144414],{"class":691},"  align-items",[425,144416,52192],{"class":701},[425,144418,52347],{"class":691},[425,144420,2307],{"class":701},[425,144422,144423,144426,144428,144430],{"class":427,"line":751},[425,144424,144425],{"class":691},"  flex-wrap",[425,144427,52192],{"class":701},[425,144429,79365],{"class":691},[425,144431,2307],{"class":701},[425,144433,144434],{"class":427,"line":759},[425,144435,2578],{"class":701},[19,144437,71208],{},[19,144439,144440],{},".form-item .male-label {",[19,144442,144443],{},"   margin-right: 20px;",[19,144445,144446],{},"   display: inline-flex;",[19,144448,144449],{},"   align-items: center;",[19,144451,2093],{},[393,144453],{"style":127163,"src":144454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[393,144456],{"style":127163,"src":144457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[14,144459,144461],{"id":144460},"_2052-常见父项属性","20.5.2 常见父项属性",[972,144463,144464,144467,144470,144473,144476,144479,144482],{},[450,144465,144466],{},"flex-direction：设置主轴的方向",[450,144468,144469],{},"justify-content：设置主轴上的子元素排列方式",[450,144471,144472],{},"flex-wrap：设置子元素是否换行",[450,144474,144475],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[450,144477,144478],{},"align-items：设置侧轴上的子元素排列方式（单行）",[450,144480,144481],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[450,144483,144466],{},[393,144485],{"style":127163,"src":144486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[393,144488],{"style":127163,"src":144489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[972,144491,144492],{"start":698},[450,144493,144469],{},[393,144495],{"style":127163,"src":144496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,144498,144499,144502],{},[422,144500,144501],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,144504,144505],{},"跟着主轴走",[972,144507,144508],{"start":710},[450,144509,144472],{},[393,144511],{"style":127163,"src":144512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,144514,144515],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[972,144517,144518],{"start":721},[450,144519,144475],{},[393,144521],{"style":127163,"src":144522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,144524,144525],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,144527,144528],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[972,144530,144531],{"start":735},[450,144532,144478],{},[393,144534],{"style":127163,"src":144535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,144537,144538],{},"align-items与align-content之间的区别：",[19,144540,144541],{},"单找items，多找content",[393,144543],{"style":127163,"src":144544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[972,144546,144547],{"start":743},[450,144548,144481],{},[393,144550],{"style":127163,"src":144551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[14,144553,144555],{"id":144554},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[972,144557,144558],{},[450,144559,144560],{},[400,144561,144562],{},"flex 属性",[19,144564,144565],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[393,144567],{"style":127163,"src":144568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,144570,144571],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,144573,144574],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[972,144576,144577],{"start":698},[450,144578,144579,978,144582],{},[400,144580,144581],{},"align-self",[400,144583,144584],{},"控制子项自己在侧轴上的排列方式",[393,144586],{"style":127163,"src":144587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,144589,144590],{},"单个子盒子在父盒子侧轴上的排列方式",[972,144592,144593],{"start":710},[450,144594,144595,144597],{},[400,144596,96052],{}," 属性定义项目的排列顺序",[393,144599],{"style":127163,"src":144600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[14,144602,144604],{"id":144603},"_2054-背景线性渐变","20.5.4 背景线性渐变",[393,144606],{"style":127163,"src":144607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,144609,144610],{},"必须要添加浏览器的私有前缀",[14,144612,144614],{"id":144613},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,144616,144617],{},"学到最重要的知识：",[19,144619,144620],{},"flex处理这样的布局思路",[393,144622],{"style":127163,"src":144623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[416,144625,144627],{"className":127307,"code":144626,"language":127309,"meta":395,"style":395},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[422,144628,144629,144635,144645,144655,144665],{"__ignoreMap":395},[425,144630,144631,144633],{"class":427,"line":428},[425,144632,144374],{"class":431},[425,144634,16569],{"class":701},[425,144636,144637,144639,144641,144643],{"class":427,"line":698},[425,144638,128923],{"class":691},[425,144640,52192],{"class":701},[425,144642,52232],{"class":691},[425,144644,2307],{"class":701},[425,144646,144647,144649,144651,144653],{"class":427,"line":710},[425,144648,144403],{"class":691},[425,144650,52192],{"class":701},[425,144652,52347],{"class":691},[425,144654,2307],{"class":701},[425,144656,144657,144659,144661,144663],{"class":427,"line":721},[425,144658,144414],{"class":691},[425,144660,52192],{"class":701},[425,144662,52347],{"class":691},[425,144664,2307],{"class":701},[425,144666,144667],{"class":427,"line":735},[425,144668,2578],{"class":701},[19,144670,144671],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,144673,144674],{},"使用属性选择器",[393,144676],{"style":127163,"src":144677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,144679,69644],{},[416,144681,144683],{"className":128054,"code":144682,"language":128056,"meta":395,"style":395},"\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",[422,144684,144685,144690,144704,144709,144729,144734,144753,144758,144777,144782,144801],{"__ignoreMap":395},[425,144686,144687],{"class":427,"line":428},[425,144688,144689],{"class":1216},"\u003C!-- 携程网移动端案例结构 -->\n",[425,144691,144692,144694,144696,144698,144700,144702],{"class":427,"line":698},[425,144693,2057],{"class":701},[425,144695,52366],{"class":52055},[425,144697,54241],{"class":431},[425,144699,1204],{"class":701},[425,144701,93078],{"class":435},[425,144703,52062],{"class":701},[425,144705,144706],{"class":427,"line":710},[425,144707,144708],{"class":1216},"  \u003C!-- 搜索栏 -->\n",[425,144710,144711,144713,144715,144717,144719,144722,144725,144727],{"class":427,"line":721},[425,144712,52899],{"class":701},[425,144714,52366],{"class":52055},[425,144716,54241],{"class":431},[425,144718,1204],{"class":701},[425,144720,144721],{"class":435},"\"search-index\"",[425,144723,144724],{"class":701},">...\u003C\u002F",[425,144726,52366],{"class":52055},[425,144728,52062],{"class":701},[425,144730,144731],{"class":427,"line":735},[425,144732,144733],{"class":1216},"  \u003C!-- 焦点图 -->\n",[425,144735,144736,144738,144740,144742,144744,144747,144749,144751],{"class":427,"line":743},[425,144737,52899],{"class":701},[425,144739,52366],{"class":52055},[425,144741,54241],{"class":431},[425,144743,1204],{"class":701},[425,144745,144746],{"class":435},"\"focus\"",[425,144748,144724],{"class":701},[425,144750,52366],{"class":52055},[425,144752,52062],{"class":701},[425,144754,144755],{"class":427,"line":751},[425,144756,144757],{"class":1216},"  \u003C!-- 主导航 -->\n",[425,144759,144760,144762,144764,144766,144768,144771,144773,144775],{"class":427,"line":759},[425,144761,52899],{"class":701},[425,144763,52366],{"class":52055},[425,144765,54241],{"class":431},[425,144767,1204],{"class":701},[425,144769,144770],{"class":435},"\"local-nav\"",[425,144772,144724],{"class":701},[425,144774,52366],{"class":52055},[425,144776,52062],{"class":701},[425,144778,144779],{"class":427,"line":770},[425,144780,144781],{"class":1216},"  \u003C!-- 子导航 -->\n",[425,144783,144784,144786,144788,144790,144792,144795,144797,144799],{"class":427,"line":780},[425,144785,52899],{"class":701},[425,144787,52366],{"class":52055},[425,144789,54241],{"class":431},[425,144791,1204],{"class":701},[425,144793,144794],{"class":435},"\"nav-common\"",[425,144796,144724],{"class":701},[425,144798,52366],{"class":52055},[425,144800,52062],{"class":701},[425,144802,144803,144805,144807],{"class":427,"line":790},[425,144804,52540],{"class":701},[425,144806,52366],{"class":52055},[425,144808,52062],{"class":701},[19,144810,71208],{},[416,144812,144813],{"className":127307,"code":137759,"language":127309,"meta":395,"style":395},[422,144814,144815,144829,144845],{"__ignoreMap":395},[425,144816,144817,144819,144821,144823,144825,144827],{"class":427,"line":428},[425,144818,54576],{"class":52055},[425,144820,2037],{"class":701},[425,144822,103862],{"class":431},[425,144824,1204],{"class":1155},[425,144826,63454],{"class":435},[425,144828,137776],{"class":701},[425,144830,144831,144833,144835,144837,144839,144841,144843],{"class":427,"line":698},[425,144832,71651],{"class":691},[425,144834,52192],{"class":701},[425,144836,1367],{"class":691},[425,144838,52247],{"class":1155},[425,144840,52276],{"class":691},[425,144842,130887],{"class":691},[425,144844,2307],{"class":701},[425,144846,144847],{"class":427,"line":710},[425,144848,2578],{"class":701},[19,144850,144851],{},"总代码和效果展示：",[393,144853],{"style":127163,"src":144854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,144856,69644],{},[416,144858,144859],{"className":128054,"code":144682,"language":128056,"meta":395,"style":395},[422,144860,144861,144865,144879,144883,144901,144905,144923,144927,144945,144949,144967],{"__ignoreMap":395},[425,144862,144863],{"class":427,"line":428},[425,144864,144689],{"class":1216},[425,144866,144867,144869,144871,144873,144875,144877],{"class":427,"line":698},[425,144868,2057],{"class":701},[425,144870,52366],{"class":52055},[425,144872,54241],{"class":431},[425,144874,1204],{"class":701},[425,144876,93078],{"class":435},[425,144878,52062],{"class":701},[425,144880,144881],{"class":427,"line":710},[425,144882,144708],{"class":1216},[425,144884,144885,144887,144889,144891,144893,144895,144897,144899],{"class":427,"line":721},[425,144886,52899],{"class":701},[425,144888,52366],{"class":52055},[425,144890,54241],{"class":431},[425,144892,1204],{"class":701},[425,144894,144721],{"class":435},[425,144896,144724],{"class":701},[425,144898,52366],{"class":52055},[425,144900,52062],{"class":701},[425,144902,144903],{"class":427,"line":735},[425,144904,144733],{"class":1216},[425,144906,144907,144909,144911,144913,144915,144917,144919,144921],{"class":427,"line":743},[425,144908,52899],{"class":701},[425,144910,52366],{"class":52055},[425,144912,54241],{"class":431},[425,144914,1204],{"class":701},[425,144916,144746],{"class":435},[425,144918,144724],{"class":701},[425,144920,52366],{"class":52055},[425,144922,52062],{"class":701},[425,144924,144925],{"class":427,"line":751},[425,144926,144757],{"class":1216},[425,144928,144929,144931,144933,144935,144937,144939,144941,144943],{"class":427,"line":759},[425,144930,52899],{"class":701},[425,144932,52366],{"class":52055},[425,144934,54241],{"class":431},[425,144936,1204],{"class":701},[425,144938,144770],{"class":435},[425,144940,144724],{"class":701},[425,144942,52366],{"class":52055},[425,144944,52062],{"class":701},[425,144946,144947],{"class":427,"line":770},[425,144948,144781],{"class":1216},[425,144950,144951,144953,144955,144957,144959,144961,144963,144965],{"class":427,"line":780},[425,144952,52899],{"class":701},[425,144954,52366],{"class":52055},[425,144956,54241],{"class":431},[425,144958,1204],{"class":701},[425,144960,144794],{"class":435},[425,144962,144724],{"class":701},[425,144964,52366],{"class":52055},[425,144966,52062],{"class":701},[425,144968,144969,144971,144973],{"class":427,"line":790},[425,144970,52540],{"class":701},[425,144972,52366],{"class":52055},[425,144974,52062],{"class":701},[19,144976,71208],{},[416,144978,144979],{"className":128054,"code":131411,"language":128056,"meta":395,"style":395},[422,144980,144981,144985,144999,145003],{"__ignoreMap":395},[425,144982,144983],{"class":427,"line":428},[425,144984,131418],{"class":1216},[425,144986,144987,144989,144991,144993,144995,144997],{"class":427,"line":698},[425,144988,2057],{"class":701},[425,144990,52366],{"class":52055},[425,144992,54241],{"class":431},[425,144994,1204],{"class":701},[425,144996,131431],{"class":435},[425,144998,52062],{"class":701},[425,145000,145001],{"class":427,"line":710},[425,145002,131438],{"class":701},[425,145004,145005,145007,145009],{"class":427,"line":721},[425,145006,52540],{"class":701},[425,145008,52366],{"class":52055},[425,145010,52062],{"class":701},[1074,145012,138708],{},{"title":395,"searchDepth":698,"depth":698,"links":145014},[145015,145016,145020,145021,145022],{"id":144159,"depth":698,"text":144160},{"id":144191,"depth":698,"text":144192,"children":145017},[145018,145019],{"id":144195,"depth":710,"text":144196},{"id":144212,"depth":710,"text":144213},{"id":144231,"depth":698,"text":144232},{"id":144238,"depth":698,"text":144239},{"id":144325,"depth":698,"text":144326,"children":145023},[145024,145025,145026,145027,145028],{"id":144332,"depth":710,"text":144333},{"id":144460,"depth":710,"text":144461},{"id":144554,"depth":710,"text":144555},{"id":144603,"depth":710,"text":144604},{"id":144613,"depth":710,"text":144614},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":144151,"description":24374},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":145035,"title":145036,"body":145037,"description":24374,"extension":1082,"meta":146264,"navigation":1084,"path":146265,"seo":146266,"stem":146267,"__hash__":146268},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":145038,"toc":146242},[145039,145042,145046,145050,145053,145056,145060,145065,145068,145071,145074,145077,145080,145137,145140,145145,145148,145151,145155,145166,145170,145173,145176,145183,145188,145192,145195,145201,145204,145208,145211,145218,145221,145224,145231,145234,145241,145244,145247,145254,145257,145260,145262,145279,145283,145286,145289,145292,145296,145299,145302,145305,145308,145311,145314,145316,145319,145322,145384,145387,145497,145504,145510,145513,145516,145520,145523,145527,145532,145535,145542,145545,145551,145556,145559,145562,145565,145568,145571,145574,145577,145580,145636,145638,145664,145668,145671,145674,145677,145685,145688,145691,145695,145751,145754,145758,145764,145775,145778,145783,145786,145789,145795,145798,145801,145804,145807,145810,145813,145816,145819,145844,145850,145853,145856,145859,145862,145865,145868,145873,145876,145879,145882,145890,145893,145900,145903,145906,145908,145932,145934,145937,145940,145943,145946,145949,145952,145955,145989,145992,145995,146029,146036,146039,146042,146045,146048,146051,146054,146061,146064,146067,146070,146073,146080,146083,146086,146093,146096,146099,146103,146106,146109,146112,146115,146118,146121,146124,146127,146129,146153,146155,146179,146183,146194,146197,146200,146203,146206,146209,146212,146215,146218,146221,146224,146227,146230,146233,146236,146239],[10,145040,145036],{"id":145041},"_21-移动端布局实战下篇",[1099,145043,145045],{"id":145044},"_211-rem适配布局","21.1 rem适配布局",[14,145047,145049],{"id":145048},"_2111-rem单位","21.1.1 rem单位",[393,145051],{"style":127163,"src":145052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,145054,145055],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[14,145057,145059],{"id":145058},"_2112-媒体查询","21.1.2 媒体查询",[972,145061,145062],{},[450,145063,145064],{},"参数介绍",[393,145066],{"style":127163,"src":145067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[393,145069],{"style":127163,"src":145070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[393,145072],{"style":127163,"src":145073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[393,145075],{"style":127163,"src":145076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[393,145078],{"style":127163,"src":145079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[416,145081,145083],{"className":127307,"code":145082,"language":127309,"meta":395,"style":395},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[422,145084,145085,145090,145109,145116,145129,145133],{"__ignoreMap":395},[425,145086,145087],{"class":427,"line":428},[425,145088,145089],{"class":1216},"\u002F* 媒体查询 *\u002F\n",[425,145091,145092,145095,145097,145100,145102,145105,145107],{"class":427,"line":698},[425,145093,145094],{"class":1155},"@media",[425,145096,2664],{"class":701},[425,145098,145099],{"class":691},"max-width",[425,145101,52192],{"class":701},[425,145103,145104],{"class":691},"768",[425,145106,52247],{"class":1155},[425,145108,13441],{"class":701},[425,145110,145111,145114],{"class":427,"line":710},[425,145112,145113],{"class":431},"  .container",[425,145115,16569],{"class":701},[425,145117,145118,145121,145123,145125,145127],{"class":427,"line":721},[425,145119,145120],{"class":691},"    width",[425,145122,52192],{"class":701},[425,145124,1460],{"class":691},[425,145126,1477],{"class":1155},[425,145128,2307],{"class":701},[425,145130,145131],{"class":427,"line":735},[425,145132,128103],{"class":701},[425,145134,145135],{"class":427,"line":743},[425,145136,2578],{"class":701},[19,145138,145139],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[972,145141,145142],{"start":698},[450,145143,145144],{},"引入资源",[393,145146],{"style":127163,"src":145147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,145149,145150],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[14,145152,145154],{"id":145153},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[447,145156,145157,145160,145163],{},[450,145158,145159],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[450,145161,145162],{},"媒体查询可以根据不同设备宽度来修改样式",[450,145164,145165],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[1099,145167,145169],{"id":145168},"_212-less基础","21.2 Less基础",[19,145171,145172],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,145174,145175],{},"Less可以解决该问题，它是css的扩展语言",[19,145177,145178,145179],{},"Less中文网址： ",[22,145180,145181],{"href":145181,"rel":145182},"http:\u002F\u002Flesscss.cn\u002F",[26],[19,145184,145185],{},[400,145186,145187],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[14,145189,145191],{"id":145190},"_2121-less安装","21.2.1 less安装",[19,145193,145194],{},"如果使用vscode，则无需进行下方安装步骤",[19,145196,145197],{},[22,145198,145199],{"href":145199,"rel":145200},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[26],[393,145202],{"style":127163,"src":145203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[14,145205,145207],{"id":145206},"_2122-less使用","21.2.2 less使用",[19,145209,145210],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[972,145212,145213],{},[450,145214,145215],{},[400,145216,145217],{},"Less 变量",[393,145219],{"style":127163,"src":145220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[393,145222],{"style":127163,"src":145223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[972,145225,145226],{"start":698},[450,145227,145228],{},[400,145229,145230],{},"Less 编译",[393,145232],{"style":127163,"src":145233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[972,145235,145236],{"start":710},[450,145237,145238],{},[400,145239,145240],{},"Less 嵌套",[393,145242],{"style":127163,"src":145243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[393,145245],{"style":127163,"src":145246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[972,145248,145249],{"start":721},[450,145250,145251],{},[400,145252,145253],{},"Less 运算",[393,145255],{"style":127163,"src":145256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,145258,145259],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,145261,1188],{},[447,145263,145264,145267,145270,145273,145276],{},[450,145265,145266],{},"乘号（*）和除号（\u002F）的写法",[450,145268,145269],{},"运算符中间左右有个空格隔开 1px + 5",[450,145271,145272],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[450,145274,145275],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[450,145277,145278],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[1099,145280,145282],{"id":145281},"_213-rem-适配方案","21.3 rem 适配方案",[19,145284,145285],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,145287,145288],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[393,145290],{"style":127163,"src":145291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[14,145293,145295],{"id":145294},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,145297,145298],{},"rem + 媒体查询 + less 技术",[393,145300],{"style":127163,"src":145301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,145303,145304],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,145306,145307],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[393,145309],{"style":127163,"src":145310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,145312,145313],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,145315,15630],{},[393,145317],{"style":127163,"src":145318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,145320,145321],{},"index.html:",[416,145323,145325],{"className":127307,"code":145324,"language":127309,"meta":395,"style":395},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[422,145326,145327,145332,145338,145354,145358,145364,145380],{"__ignoreMap":395},[425,145328,145329],{"class":427,"line":428},[425,145330,145331],{"class":1216},"\u002F* rem 适配方案 *\u002F\n",[425,145333,145334,145336],{"class":427,"line":698},[425,145335,51390],{"class":52055},[425,145337,16569],{"class":701},[425,145339,145340,145342,145344,145347,145349,145351],{"class":427,"line":710},[425,145341,71381],{"class":691},[425,145343,52192],{"class":701},[425,145345,145346],{"class":691},"62.5",[425,145348,1477],{"class":1155},[425,145350,131170],{"class":701},[425,145352,145353],{"class":1216},"\u002F* 1rem = 10px *\u002F\n",[425,145355,145356],{"class":427,"line":721},[425,145357,2578],{"class":701},[425,145359,145360,145362],{"class":427,"line":735},[425,145361,131155],{"class":431},[425,145363,16569],{"class":701},[425,145365,145366,145368,145370,145372,145375,145377],{"class":427,"line":743},[425,145367,71323],{"class":691},[425,145369,52192],{"class":701},[425,145371,1594],{"class":691},[425,145373,145374],{"class":1155},"rem",[425,145376,131170],{"class":701},[425,145378,145379],{"class":1216},"\u002F* 100px *\u002F\n",[425,145381,145382],{"class":427,"line":751},[425,145383,2578],{"class":701},[19,145385,145386],{},"common.less",[416,145388,145390],{"className":127307,"code":145389,"language":127309,"meta":395,"style":395},"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",[422,145391,145392,145398,145413,145417,145423,145437,145441,145445,145449,145455,145469,145473,145479,145493],{"__ignoreMap":395},[425,145393,145394,145396],{"class":427,"line":428},[425,145395,51390],{"class":52055},[425,145397,16569],{"class":701},[425,145399,145400,145402,145404,145406,145408,145410],{"class":427,"line":698},[425,145401,71381],{"class":691},[425,145403,52192],{"class":701},[425,145405,145346],{"class":691},[425,145407,1477],{"class":1155},[425,145409,27058],{"class":701},[425,145411,145412],{"class":1216},"\u002F* 10px *\u002F\n",[425,145414,145415],{"class":427,"line":710},[425,145416,2578],{"class":701},[425,145418,145419,145421],{"class":427,"line":721},[425,145420,52366],{"class":52055},[425,145422,16569],{"class":701},[425,145424,145425,145427,145429,145431,145433,145435],{"class":427,"line":735},[425,145426,71323],{"class":691},[425,145428,52192],{"class":701},[425,145430,1594],{"class":691},[425,145432,145374],{"class":1155},[425,145434,27058],{"class":701},[425,145436,145379],{"class":1216},[425,145438,145439],{"class":427,"line":743},[425,145440,2578],{"class":701},[425,145442,145443],{"class":427,"line":751},[425,145444,136768],{"class":701},[425,145446,145447],{"class":427,"line":759},[425,145448,145331],{"class":1216},[425,145450,145451,145453],{"class":427,"line":770},[425,145452,51390],{"class":52055},[425,145454,16569],{"class":701},[425,145456,145457,145459,145461,145463,145465,145467],{"class":427,"line":780},[425,145458,71381],{"class":691},[425,145460,52192],{"class":701},[425,145462,145346],{"class":691},[425,145464,1477],{"class":1155},[425,145466,131170],{"class":701},[425,145468,145353],{"class":1216},[425,145470,145471],{"class":427,"line":790},[425,145472,2578],{"class":701},[425,145474,145475,145477],{"class":427,"line":805},[425,145476,131155],{"class":431},[425,145478,16569],{"class":701},[425,145480,145481,145483,145485,145487,145489,145491],{"class":427,"line":818},[425,145482,71323],{"class":691},[425,145484,52192],{"class":701},[425,145486,1594],{"class":691},[425,145488,145374],{"class":1155},[425,145490,131170],{"class":701},[425,145492,145379],{"class":1216},[425,145494,145495],{"class":427,"line":831},[425,145496,2578],{"class":701},[19,145498,145499,145500,145503],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[993,145501,145502],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[416,145505,145508],{"className":145506,"code":145507,"language":6187},[6185],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[422,145509,145507],{"__ignoreMap":395},[19,145511,145512],{},"less保存时会自动变成.css文件",[19,145514,145515],{},"好好搞懂上述代码写法",[14,145517,145519],{"id":145518},"_2132-样式导入样式","21.3.2 样式导入样式",[393,145521],{"style":127163,"src":145522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[14,145524,145526],{"id":145525},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[972,145528,145529],{},[450,145530,145531],{},"准备工作",[393,145533],{"style":127163,"src":145534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,145536,145537,145538],{},"github地址：",[22,145539,145540],{"href":145540,"rel":145541},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[26],[19,145543,145544],{},"下载之后，将index.js文件拖到项目中就可以了",[19,145546,145547,145548],{},"js文件引入到index.html中使用的是",[422,145549,145550],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[972,145552,145553],{"start":698},[450,145554,145555],{},"vscode插件",[393,145557],{"style":127163,"src":145558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,145560,145561],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,145563,145564],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[393,145566],{"style":127163,"src":145567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,145569,145570],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[393,145572],{"style":127163,"src":145573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,145575,145576],{},"修改成75就可以，alt+z为快捷键",[19,145578,145579],{},"index.css：",[416,145581,145582],{"className":127307,"code":145324,"language":127309,"meta":395,"style":395},[422,145583,145584,145588,145594,145608,145612,145618,145632],{"__ignoreMap":395},[425,145585,145586],{"class":427,"line":428},[425,145587,145331],{"class":1216},[425,145589,145590,145592],{"class":427,"line":698},[425,145591,51390],{"class":52055},[425,145593,16569],{"class":701},[425,145595,145596,145598,145600,145602,145604,145606],{"class":427,"line":710},[425,145597,71381],{"class":691},[425,145599,52192],{"class":701},[425,145601,145346],{"class":691},[425,145603,1477],{"class":1155},[425,145605,131170],{"class":701},[425,145607,145353],{"class":1216},[425,145609,145610],{"class":427,"line":721},[425,145611,2578],{"class":701},[425,145613,145614,145616],{"class":427,"line":735},[425,145615,131155],{"class":431},[425,145617,16569],{"class":701},[425,145619,145620,145622,145624,145626,145628,145630],{"class":427,"line":743},[425,145621,71323],{"class":691},[425,145623,52192],{"class":701},[425,145625,1594],{"class":691},[425,145627,145374],{"class":1155},[425,145629,131170],{"class":701},[425,145631,145379],{"class":1216},[425,145633,145634],{"class":427,"line":751},[425,145635,2578],{"class":701},[19,145637,145321],{},[416,145639,145640],{"className":127307,"code":127711,"language":127309,"meta":395,"style":395},[422,145641,145642,145648,145660],{"__ignoreMap":395},[425,145643,145644,145646],{"class":427,"line":428},[425,145645,52555],{"class":52055},[425,145647,16569],{"class":701},[425,145649,145650,145652,145654,145656,145658],{"class":427,"line":698},[425,145651,71381],{"class":691},[425,145653,52192],{"class":701},[425,145655,1749],{"class":691},[425,145657,52247],{"class":1155},[425,145659,2307],{"class":701},[425,145661,145662],{"class":427,"line":710},[425,145663,2578],{"class":701},[1099,145665,145667],{"id":145666},"_214-响应式开发","21.4 响应式开发",[19,145669,145670],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[393,145672],{"style":127163,"src":145673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,145675,145676],{},"做法：",[447,145678,145679,145682],{},[450,145680,145681],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[450,145683,145684],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[393,145686],{"style":127163,"src":145687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,145689,145690],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[14,145692,145694],{"id":145693},"_2141-简单代码示范","21.4.1 简单代码示范",[416,145696,145697],{"className":127307,"code":145324,"language":127309,"meta":395,"style":395},[422,145698,145699,145703,145709,145723,145727,145733,145747],{"__ignoreMap":395},[425,145700,145701],{"class":427,"line":428},[425,145702,145331],{"class":1216},[425,145704,145705,145707],{"class":427,"line":698},[425,145706,51390],{"class":52055},[425,145708,16569],{"class":701},[425,145710,145711,145713,145715,145717,145719,145721],{"class":427,"line":710},[425,145712,71381],{"class":691},[425,145714,52192],{"class":701},[425,145716,145346],{"class":691},[425,145718,1477],{"class":1155},[425,145720,131170],{"class":701},[425,145722,145353],{"class":1216},[425,145724,145725],{"class":427,"line":721},[425,145726,2578],{"class":701},[425,145728,145729,145731],{"class":427,"line":735},[425,145730,131155],{"class":431},[425,145732,16569],{"class":701},[425,145734,145735,145737,145739,145741,145743,145745],{"class":427,"line":743},[425,145736,71323],{"class":691},[425,145738,52192],{"class":701},[425,145740,1594],{"class":691},[425,145742,145374],{"class":1155},[425,145744,131170],{"class":701},[425,145746,145379],{"class":1216},[425,145748,145749],{"class":427,"line":751},[425,145750,2578],{"class":701},[19,145752,145753],{},"父盒子一般命名为container",[14,145755,145757],{"id":145756},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,145759,145760,145761],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[400,145762,145763],{},"使得 Web 开发更加快捷",[447,145765,145766],{},[450,145767,145768,145769],{},"官网：",[400,145770,145771],{},[22,145772,145773],{"href":145773,"rel":145774},"http:\u002F\u002Fgetbootstrap.com\u002F",[26],[19,145776,145777],{},"可以直接去官网拿现成的东西",[972,145779,145780],{},[450,145781,145782],{},"Bootstrap的使用",[19,145784,145785],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,145787,145788],{},"Bootstrap 使用四步曲：",[19,145790,145791,145794],{},[400,145792,145793],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[393,145796],{"style":127163,"src":145797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,145799,145800],{},"打开Bootstrap官网，然后下载",[393,145802],{"style":127163,"src":145803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[393,145805],{"style":127163,"src":145806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,145808,145809],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,145811,145812],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,145814,145815],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[393,145817],{"style":127163,"src":145818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[416,145820,145822],{"className":127307,"code":145821,"language":127309,"meta":395,"style":395},".center {\n  color: red;\n}\n",[422,145823,145824,145830,145840],{"__ignoreMap":395},[425,145825,145826,145828],{"class":427,"line":428},[425,145827,127598],{"class":431},[425,145829,16569],{"class":701},[425,145831,145832,145834,145836,145838],{"class":427,"line":698},[425,145833,71660],{"class":691},[425,145835,52192],{"class":701},[425,145837,58176],{"class":691},[425,145839,2307],{"class":701},[425,145841,145842],{"class":427,"line":710},[425,145843,2578],{"class":701},[19,145845,145846,145849],{},[422,145847,145848],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[393,145851],{"style":127163,"src":145852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[393,145854],{"style":127163,"src":145855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[393,145857],{"style":127163,"src":145858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,145860,145861],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[393,145863],{"style":127163,"src":145864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,145866,145867],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[972,145869,145870],{"start":698},[450,145871,145872],{},"布局容器",[393,145874],{"style":127163,"src":145875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,145877,145878],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,145880,145881],{},"container-fluid用于移动式布局比较方便",[972,145883,145884],{"start":710},[450,145885,145886,145887],{},"bootstrap ",[400,145888,145889],{},"栅格系统原理",[393,145891],{"style":127163,"src":145892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[972,145894,145895],{"start":721},[450,145896,145897],{},[400,145898,145899],{},"栅格选项参数",[393,145901],{"style":127163,"src":145902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,145904,145905],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,145907,15630],{},[416,145909,145910],{"className":127307,"code":145821,"language":127309,"meta":395,"style":395},[422,145911,145912,145918,145928],{"__ignoreMap":395},[425,145913,145914,145916],{"class":427,"line":428},[425,145915,127598],{"class":431},[425,145917,16569],{"class":701},[425,145919,145920,145922,145924,145926],{"class":427,"line":698},[425,145921,71660],{"class":691},[425,145923,52192],{"class":701},[425,145925,58176],{"class":691},[425,145927,2307],{"class":701},[425,145929,145930],{"class":427,"line":710},[425,145931,2578],{"class":701},[19,145933,136350],{},[393,145935],{"style":127163,"src":145936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,145938,145939],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,145941,145942],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,145944,145945],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,145947,145948],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,145950,145951],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,145953,145954],{},"汇总展示说明：",[416,145956,145957],{"className":128054,"code":131411,"language":128056,"meta":395,"style":395},[422,145958,145959,145963,145977,145981],{"__ignoreMap":395},[425,145960,145961],{"class":427,"line":428},[425,145962,131418],{"class":1216},[425,145964,145965,145967,145969,145971,145973,145975],{"class":427,"line":698},[425,145966,2057],{"class":701},[425,145968,52366],{"class":52055},[425,145970,54241],{"class":431},[425,145972,1204],{"class":701},[425,145974,131431],{"class":435},[425,145976,52062],{"class":701},[425,145978,145979],{"class":427,"line":710},[425,145980,131438],{"class":701},[425,145982,145983,145985,145987],{"class":427,"line":721},[425,145984,52540],{"class":701},[425,145986,52366],{"class":52055},[425,145988,52062],{"class":701},[393,145990],{"style":127163,"src":145991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,145993,145994],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[416,145996,145997],{"className":128054,"code":131411,"language":128056,"meta":395,"style":395},[422,145998,145999,146003,146017,146021],{"__ignoreMap":395},[425,146000,146001],{"class":427,"line":428},[425,146002,131418],{"class":1216},[425,146004,146005,146007,146009,146011,146013,146015],{"class":427,"line":698},[425,146006,2057],{"class":701},[425,146008,52366],{"class":52055},[425,146010,54241],{"class":431},[425,146012,1204],{"class":701},[425,146014,131431],{"class":435},[425,146016,52062],{"class":701},[425,146018,146019],{"class":427,"line":710},[425,146020,131438],{"class":701},[425,146022,146023,146025,146027],{"class":427,"line":721},[425,146024,52540],{"class":701},[425,146026,52366],{"class":52055},[425,146028,52062],{"class":701},[972,146030,146031],{"start":735},[450,146032,146033],{},[400,146034,146035],{},"列嵌套",[393,146037],{"style":127163,"src":146038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,146040,146041],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,146043,146044],{},"没加row内部这样：",[393,146046],{"style":127163,"src":146047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,146049,146050],{},"加上row之后内部为：",[393,146052],{"style":127163,"src":146053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[972,146055,146056],{"start":743},[450,146057,146058],{},[400,146059,146060],{},"列偏移",[393,146062],{"style":127163,"src":146063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,146065,146066],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,146068,146069],{},"要加偏移量，即偏移份数",[19,146071,146072],{},"偏移的份数=12-两个盒子的份数",[972,146074,146075],{"start":751},[450,146076,146077],{},[400,146078,146079],{},"列排序",[393,146081],{"style":127163,"src":146082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,146084,146085],{},"pull拉左；push推右",[972,146087,146088],{"start":759},[450,146089,146090],{},[400,146091,146092],{},"响应式工具",[393,146094],{"style":127163,"src":146095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,146097,146098],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[14,146100,146102],{"id":146101},"_2143-响应式小项目","21.4.3 响应式小项目",[19,146104,146105],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,146107,146108],{},"ul {",[19,146110,146111],{},"list-style: none;",[19,146113,146114],{},"margin:0;",[19,146116,146117],{},"padding:0; }",[393,146119],{"style":127163,"src":146120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[393,146122],{"style":127163,"src":146123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,146125,146126],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,146128,69644],{},[416,146130,146131],{"className":127307,"code":139977,"language":127309,"meta":395,"style":395},[422,146132,146133,146139,146149],{"__ignoreMap":395},[425,146134,146135,146137],{"class":427,"line":428},[425,146136,131155],{"class":431},[425,146138,16569],{"class":701},[425,146140,146141,146143,146145,146147],{"class":427,"line":698},[425,146142,131787],{"class":691},[425,146144,52192],{"class":701},[425,146146,46],{"class":691},[425,146148,2307],{"class":701},[425,146150,146151],{"class":427,"line":710},[425,146152,2578],{"class":701},[19,146154,71208],{},[416,146156,146157],{"className":127307,"code":139977,"language":127309,"meta":395,"style":395},[422,146158,146159,146165,146175],{"__ignoreMap":395},[425,146160,146161,146163],{"class":427,"line":428},[425,146162,131155],{"class":431},[425,146164,16569],{"class":701},[425,146166,146167,146169,146171,146173],{"class":427,"line":698},[425,146168,131787],{"class":691},[425,146170,52192],{"class":701},[425,146172,46],{"class":691},[425,146174,2307],{"class":701},[425,146176,146177],{"class":427,"line":710},[425,146178,2578],{"class":701},[1099,146180,146182],{"id":146181},"_215-swiper-插件使用","21.5 swiper 插件使用",[447,146184,146185,146188,146191],{},[450,146186,146187],{},"下载需要的css和js文件html页面中 引入相关文件",[450,146189,146190],{},"官网找到类似案例，复制html结构，css样式 js 语法",[450,146192,146193],{},"根据需求定制修改模块",[393,146195],{"style":127163,"src":146196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,146198,146199],{},"解压后将这两部分放到项目中",[393,146201],{"style":127163,"src":146202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,146204,146205],{},"这个插件可以帮助我们实现轮播图效果",[19,146207,146208],{},"用法：",[393,146210],{"style":127163,"src":146211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,146213,146214],{},"找到自己喜欢的",[393,146216],{"style":127163,"src":146217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,146219,146220],{},"右键，查看网页源代码",[393,146222],{"style":127163,"src":146223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,146225,146226],{},"复制人家的结构内容",[19,146228,146229],{},"然后去看API文档：",[393,146231],{"style":127163,"src":146232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,146234,146235],{},"可以看看如何修改样式",[19,146237,146238],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[1074,146240,146241],{},"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":395,"searchDepth":698,"depth":698,"links":146243},[146244,146249,146253,146258,146263],{"id":145044,"depth":698,"text":145045,"children":146245},[146246,146247,146248],{"id":145048,"depth":710,"text":145049},{"id":145058,"depth":710,"text":145059},{"id":145153,"depth":710,"text":145154},{"id":145168,"depth":698,"text":145169,"children":146250},[146251,146252],{"id":145190,"depth":710,"text":145191},{"id":145206,"depth":710,"text":145207},{"id":145281,"depth":698,"text":145282,"children":146254},[146255,146256,146257],{"id":145294,"depth":710,"text":145295},{"id":145518,"depth":710,"text":145519},{"id":145525,"depth":710,"text":145526},{"id":145666,"depth":698,"text":145667,"children":146259},[146260,146261,146262],{"id":145693,"depth":710,"text":145694},{"id":145756,"depth":710,"text":145757},{"id":146101,"depth":710,"text":146102},{"id":146181,"depth":698,"text":146182},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":145036,"description":24374},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146270,"title":146271,"body":146272,"description":24374,"extension":1082,"meta":146492,"navigation":1084,"path":146493,"seo":146494,"stem":146495,"__hash__":146496},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146273,"toc":146488},[146274,146277,146281,146284,146299,146304,146307,146312,146347,146352,146364,146369,146382,146387,146404,146409,146429,146434,146452,146455,146458,146461,146464,146468,146471,146474,146477,146480,146483,146486],[10,146275,146271],{"id":146276},"_22-代码提交与新型相对单位",[1099,146278,146280],{"id":146279},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,146282,146283],{},"法1：",[972,146285,146286,146293,146296],{},[450,146287,146288,146289],{},"登录网站注册：",[22,146290,146291],{"href":146291,"rel":146292},"https:\u002F\u002Fgitee.com\u002F",[26],[450,146294,146295],{},"码云创建新的仓库",[450,146297,146298],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[447,146300,146301],{},[450,146302,146303],{},"在网站根目录右键-- Git Bash Here",[393,146305],{"style":127163,"src":146306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[447,146308,146309],{},[450,146310,146311],{},"如果是第一次利用git提交，请配置好全局选项",[416,146313,146315],{"className":118051,"code":146314,"language":118053,"meta":395,"style":395},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[422,146316,146317,146333],{"__ignoreMap":395},[425,146318,146319,146322,146324,146327,146330],{"class":427,"line":428},[425,146320,146321],{"class":431},"git",[425,146323,120474],{"class":435},[425,146325,146326],{"class":691}," --global",[425,146328,146329],{"class":435}," user.name",[425,146331,146332],{"class":435}," \"你的名字\"\n",[425,146334,146335,146337,146339,146341,146344],{"class":427,"line":698},[425,146336,146321],{"class":431},[425,146338,120474],{"class":435},[425,146340,146326],{"class":691},[425,146342,146343],{"class":435}," user.email",[425,146345,146346],{"class":435}," \"你的邮箱\"\n",[447,146348,146349],{},[450,146350,146351],{},"初始化仓库",[416,146353,146355],{"className":118051,"code":146354,"language":118053,"meta":395,"style":395},"git init\n",[422,146356,146357],{"__ignoreMap":395},[425,146358,146359,146361],{"class":427,"line":428},[425,146360,146321],{"class":431},[425,146362,146363],{"class":435}," init\n",[447,146365,146366],{},[450,146367,146368],{},"把本地文件放到暂存区",[416,146370,146372],{"className":118051,"code":146371,"language":118053,"meta":395,"style":395},"git add .\n",[422,146373,146374],{"__ignoreMap":395},[425,146375,146376,146378,146380],{"class":427,"line":428},[425,146377,146321],{"class":431},[425,146379,6209],{"class":435},[425,146381,29496],{"class":435},[447,146383,146384],{},[450,146385,146386],{},"把本地文件放到本地仓库里面",[416,146388,146390],{"className":118051,"code":146389,"language":118053,"meta":395,"style":395},"git commit -m \"first commit\"\n",[422,146391,146392],{"__ignoreMap":395},[425,146393,146394,146396,146399,146401],{"class":427,"line":428},[425,146395,146321],{"class":431},[425,146397,146398],{"class":435}," commit",[425,146400,101637],{"class":691},[425,146402,146403],{"class":435}," \"first commit\"\n",[447,146405,146406],{},[450,146407,146408],{},"链接远程仓库",[416,146410,146412],{"className":118051,"code":146411,"language":118053,"meta":395,"style":395},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[422,146413,146414],{"__ignoreMap":395},[425,146415,146416,146418,146421,146423,146426],{"class":427,"line":428},[425,146417,146321],{"class":431},[425,146419,146420],{"class":435}," remote",[425,146422,6209],{"class":435},[425,146424,146425],{"class":435}," origin",[425,146427,146428],{"class":435}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[447,146430,146431],{},[450,146432,146433],{},"把本地仓库的文件推送到远程仓库 push",[416,146435,146437],{"className":118051,"code":146436,"language":118053,"meta":395,"style":395},"git push -u origin master\n",[422,146438,146439],{"__ignoreMap":395},[425,146440,146441,146443,146445,146447,146449],{"class":427,"line":428},[425,146442,146321],{"class":431},[425,146444,29771],{"class":435},[425,146446,892],{"class":691},[425,146448,146425],{"class":435},[425,146450,146451],{"class":435}," master\n",[393,146453],{"style":127163,"src":146454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,146456,146457],{},"上方方法暂未实现，后边学完git后在整",[19,146459,146460],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[393,146462],{"style":127163,"src":146463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[1099,146465,146467],{"id":146466},"_222-新型相对单位","22.2 新型相对单位",[393,146469],{"style":127163,"src":146470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[393,146472],{"style":127163,"src":146473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,146475,146476],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,146478,146479],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[393,146481],{"style":127163,"src":146482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,146484,146485],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[1074,146487,24951],{},{"title":395,"searchDepth":698,"depth":698,"links":146489},[146490,146491],{"id":146279,"depth":698,"text":146280},{"id":146466,"depth":698,"text":146467},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146271,"description":24374},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146498,"title":146499,"body":146500,"description":146504,"extension":1082,"meta":146505,"navigation":1084,"path":146506,"seo":146507,"stem":146508,"__hash__":146509},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146501,"toc":146502},[],{"title":395,"searchDepth":698,"depth":698,"links":146503},[],"自己正经开始学编程的第一门语言！",{"category":93594},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146499,"description":146504},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146511,"title":146512,"body":146513,"description":24374,"extension":1082,"meta":147660,"navigation":1084,"path":147661,"seo":147662,"stem":147663,"__hash__":147664},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146514,"toc":147636},[146515,146518,146522,146525,146528,146553,146556,146562,146566,146569,146596,146599,146639,146642,146654,146657,146663,146667,146671,146698,146715,146722,146726,146729,146755,146758,146762,146765,146805,146808,146825,146831,146835,146840,146884,146887,146905,146908,146976,146980,146987,146990,147005,147008,147017,147020,147031,147034,147043,147046,147063,147066,147081,147085,147089,147092,147094,147114,147118,147121,147124,147135,147138,147144,147148,147154,147181,147184,147196,147199,147210,147213,147219,147223,147229,147279,147282,147324,147327,147360,147363,147397,147401,147404,147424,147427,147463,147466,147479,147483,147487,147493,147496,147509,147513,147516,147522,147525,147529,147532,147535,147584,147588,147604,147610,147617,147623,147633],[10,146516,146512],{"id":146517},"_1-python环境与第一个程序",[1099,146519,146521],{"id":146520},"_11-什么是python","1.1 什么是Python",[19,146523,146524],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,146526,146527],{},"理解 Python 时抓住三个关键词：",[972,146529,146530,146533,146536],{},[450,146531,146532],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[450,146534,146535],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[450,146537,146538,146539,1362,146542,1362,146545,1362,146548,1362,146550,998],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[422,146540,146541],{},"os",[422,146543,146544],{},"sys",[422,146546,146547],{},"json",[422,146549,58615],{},[422,146551,146552],{},"datetime",[19,146554,146555],{},"Python 程序的运行链路：",[416,146557,146560],{"className":146558,"code":146559,"language":6187,"meta":395},[6185],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[422,146561,146559],{"__ignoreMap":395},[1099,146563,146565],{"id":146564},"_12-python解释器","1.2 Python解释器",[19,146567,146568],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[416,146570,146572],{"className":418,"code":146571,"language":420,"meta":395,"style":395},"python --version\npython3 --version\npython\npython3\n",[422,146573,146574,146580,146586,146591],{"__ignoreMap":395},[425,146575,146576,146578],{"class":427,"line":428},[425,146577,31135],{"class":431},[425,146579,27283],{"class":691},[425,146581,146582,146584],{"class":427,"line":698},[425,146583,101634],{"class":431},[425,146585,27283],{"class":691},[425,146587,146588],{"class":427,"line":710},[425,146589,146590],{"class":431},"python\n",[425,146592,146593],{"class":427,"line":721},[425,146594,146595],{"class":431},"python3\n",[19,146597,146598],{},"进入交互模式后，可以直接输入表达式：",[416,146600,146602],{"className":31133,"code":146601,"language":31135,"meta":395,"style":395},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[422,146603,146604,146615,146620,146634],{"__ignoreMap":395},[425,146605,146606,146609,146611,146613],{"class":427,"line":428},[425,146607,146608],{"class":1155},">>>",[425,146610,26109],{"class":691},[425,146612,46321],{"class":1155},[425,146614,48478],{"class":691},[425,146616,146617],{"class":427,"line":698},[425,146618,146619],{"class":691},"3\n",[425,146621,146622,146624,146627,146629,146632],{"class":427,"line":710},[425,146623,146608],{"class":1155},[425,146625,146626],{"class":691}," print",[425,146628,1159],{"class":701},[425,146630,146631],{"class":435},"\"hello python\"",[425,146633,1165],{"class":701},[425,146635,146636],{"class":427,"line":721},[425,146637,146638],{"class":701},"hello python\n",[19,146640,146641],{},"退出交互模式：",[416,146643,146645],{"className":31133,"code":146644,"language":31135,"meta":395,"style":395},"exit()\n",[422,146646,146647],{"__ignoreMap":395},[425,146648,146649,146652],{"class":427,"line":428},[425,146650,146651],{"class":691},"exit",[425,146653,2976],{"class":701},[19,146655,146656],{},"或使用快捷键：",[416,146658,146661],{"className":146659,"code":146660,"language":6187,"meta":395},[6185],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[422,146662,146660],{"__ignoreMap":395},[1099,146664,146666],{"id":146665},"_13-安装python","1.3 安装Python",[14,146668,146670],{"id":146669},"_131-windows安装","1.3.1 Windows安装",[972,146672,146673,146680,146683,146689,146695],{},[450,146674,146675,146676],{},"打开 Python 官网：",[22,146677,146678],{"href":146678,"rel":146679},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[26],[450,146681,146682],{},"下载 Windows Installer。",[450,146684,146685,146686,998],{},"安装时勾选 ",[422,146687,146688],{},"Add Python to PATH",[450,146690,146691,146692,998],{},"点击 ",[422,146693,146694],{},"Install Now",[450,146696,146697],{},"安装完成后打开命令提示符验证：",[416,146699,146701],{"className":418,"code":146700,"language":420,"meta":395,"style":395},"python --version\npip --version\n",[422,146702,146703,146709],{"__ignoreMap":395},[425,146704,146705,146707],{"class":427,"line":428},[425,146706,31135],{"class":431},[425,146708,27283],{"class":691},[425,146710,146711,146713],{"class":427,"line":698},[425,146712,24825],{"class":431},[425,146714,27283],{"class":691},[19,146716,146717,146718,146721],{},"如果提示 ",[422,146719,146720],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[14,146723,146725],{"id":146724},"_132-macos安装","1.3.2 macOS安装",[19,146727,146728],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[416,146730,146732],{"className":418,"code":146731,"language":420,"meta":395,"style":395},"brew install python\npython3 --version\npip3 --version\n",[422,146733,146734,146743,146749],{"__ignoreMap":395},[425,146735,146736,146739,146741],{"class":427,"line":428},[425,146737,146738],{"class":431},"brew",[425,146740,24828],{"class":435},[425,146742,125073],{"class":435},[425,146744,146745,146747],{"class":427,"line":698},[425,146746,101634],{"class":431},[425,146748,27283],{"class":691},[425,146750,146751,146753],{"class":427,"line":710},[425,146752,120455],{"class":431},[425,146754,27283],{"class":691},[19,146756,146757],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[14,146759,146761],{"id":146760},"_133-linux安装","1.3.3 Linux安装",[19,146763,146764],{},"Ubuntu\u002FDebian：",[416,146766,146768],{"className":418,"code":146767,"language":420,"meta":395,"style":395},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[422,146769,146770,146778,146793,146799],{"__ignoreMap":395},[425,146771,146772,146774,146776],{"class":427,"line":428},[425,146773,652],{"class":431},[425,146775,118072],{"class":435},[425,146777,27232],{"class":435},[425,146779,146780,146782,146784,146786,146788,146790],{"class":427,"line":698},[425,146781,652],{"class":431},[425,146783,118072],{"class":435},[425,146785,24828],{"class":435},[425,146787,105158],{"class":435},[425,146789,101553],{"class":435},[425,146791,146792],{"class":435}," python3-venv\n",[425,146794,146795,146797],{"class":427,"line":710},[425,146796,101634],{"class":431},[425,146798,27283],{"class":691},[425,146800,146801,146803],{"class":427,"line":721},[425,146802,120455],{"class":431},[425,146804,27283],{"class":691},[19,146806,146807],{},"Fedora：",[416,146809,146811],{"className":418,"code":146810,"language":420,"meta":395,"style":395},"sudo dnf install python3 python3-pip\n",[422,146812,146813],{"__ignoreMap":395},[425,146814,146815,146817,146819,146821,146823],{"class":427,"line":428},[425,146816,652],{"class":431},[425,146818,27305],{"class":435},[425,146820,24828],{"class":435},[425,146822,105158],{"class":435},[425,146824,120520],{"class":435},[19,146826,146827,146828,146830],{},"Linux 上通常使用 ",[422,146829,101634],{}," 命令，避免和系统旧版本 Python 冲突。",[1099,146832,146834],{"id":146833},"_14-pip包管理器","1.4 pip包管理器",[19,146836,146837,146839],{},[422,146838,24825],{}," 用来安装第三方库。",[416,146841,146843],{"className":418,"code":146842,"language":420,"meta":395,"style":395},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[422,146844,146845,146854,146863,146871,146877],{"__ignoreMap":395},[425,146846,146847,146849,146851],{"class":427,"line":428},[425,146848,24825],{"class":431},[425,146850,24828],{"class":435},[425,146852,146853],{"class":435}," requests\n",[425,146855,146856,146858,146861],{"class":427,"line":698},[425,146857,24825],{"class":431},[425,146859,146860],{"class":435}," uninstall",[425,146862,146853],{"class":435},[425,146864,146865,146867,146869],{"class":427,"line":710},[425,146866,24825],{"class":431},[425,146868,118329],{"class":435},[425,146870,146853],{"class":435},[425,146872,146873,146875],{"class":427,"line":721},[425,146874,24825],{"class":431},[425,146876,119710],{"class":435},[425,146878,146879,146881],{"class":427,"line":735},[425,146880,24825],{"class":431},[425,146882,146883],{"class":435}," freeze\n",[19,146885,146886],{},"国内网络较慢时可以临时使用镜像：",[416,146888,146890],{"className":418,"code":146889,"language":420,"meta":395,"style":395},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[422,146891,146892],{"__ignoreMap":395},[425,146893,146894,146896,146898,146901,146903],{"class":427,"line":428},[425,146895,24825],{"class":431},[425,146897,24828],{"class":435},[425,146899,146900],{"class":435}," requests",[425,146902,27419],{"class":691},[425,146904,120483],{"class":435},[19,146906,146907],{},"常见第三方库：",[35,146909,146910,146919],{},[38,146911,146912],{},[41,146913,146914,146917],{},[44,146915,146916],{},"库",[44,146918,103451],{},[55,146920,146921,146929,146936,146944,146952,146960,146968],{},[41,146922,146923,146926],{},[60,146924,146925],{},"requests",[60,146927,146928],{},"网络请求",[41,146930,146931,146933],{},[60,146932,101381],{},[60,146934,146935],{},"数值计算",[41,146937,146938,146941],{},[60,146939,146940],{},"pandas",[60,146942,146943],{},"表格数据处理",[41,146945,146946,146949],{},[60,146947,146948],{},"matplotlib",[60,146950,146951],{},"绘图",[41,146953,146954,146957],{},[60,146955,146956],{},"pyecharts",[60,146958,146959],{},"ECharts 图表",[41,146961,146962,146965],{},[60,146963,146964],{},"flask",[60,146966,146967],{},"Web 后端",[41,146969,146970,146973],{},[60,146971,146972],{},"pytest",[60,146974,146975],{},"自动化测试",[1099,146977,146979],{"id":146978},"_15-虚拟环境","1.5 虚拟环境",[19,146981,146982,146983,146986],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[422,146984,146985],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,146988,146989],{},"创建虚拟环境：",[416,146991,146993],{"className":418,"code":146992,"language":420,"meta":395,"style":395},"python -m venv .venv\n",[422,146994,146995],{"__ignoreMap":395},[425,146996,146997,146999,147001,147003],{"class":427,"line":428},[425,146998,31135],{"class":431},[425,147000,101637],{"class":691},[425,147002,101640],{"class":435},[425,147004,101643],{"class":435},[19,147006,147007],{},"Windows 激活：",[416,147009,147011],{"className":418,"code":147010,"language":420,"meta":395,"style":395},".venv\\Scripts\\activate\n",[422,147012,147013],{"__ignoreMap":395},[425,147014,147015],{"class":427,"line":428},[425,147016,147010],{"class":431},[19,147018,147019],{},"macOS\u002FLinux 激活：",[416,147021,147023],{"className":418,"code":147022,"language":420,"meta":395,"style":395},"source .venv\u002Fbin\u002Factivate\n",[422,147024,147025],{"__ignoreMap":395},[425,147026,147027,147029],{"class":427,"line":428},[425,147028,101648],{"class":691},[425,147030,101651],{"class":435},[19,147032,147033],{},"退出虚拟环境：",[416,147035,147037],{"className":418,"code":147036,"language":420,"meta":395,"style":395},"deactivate\n",[422,147038,147039],{"__ignoreMap":395},[425,147040,147041],{"class":427,"line":428},[425,147042,147036],{"class":431},[19,147044,147045],{},"保存依赖：",[416,147047,147049],{"className":418,"code":147048,"language":420,"meta":395,"style":395},"pip freeze > requirements.txt\n",[422,147050,147051],{"__ignoreMap":395},[425,147052,147053,147055,147058,147060],{"class":427,"line":428},[425,147054,24825],{"class":431},[425,147056,147057],{"class":435}," freeze",[425,147059,27212],{"class":1155},[425,147061,147062],{"class":435}," requirements.txt\n",[19,147064,147065],{},"安装依赖：",[416,147067,147069],{"className":418,"code":147068,"language":420,"meta":395,"style":395},"pip install -r requirements.txt\n",[422,147070,147071],{"__ignoreMap":395},[425,147072,147073,147075,147077,147079],{"class":427,"line":428},[425,147074,24825],{"class":431},[425,147076,24828],{"class":435},[425,147078,120394],{"class":691},[425,147080,147062],{"class":435},[1099,147082,147084],{"id":147083},"_16-开发工具","1.6 开发工具",[14,147086,147088],{"id":147087},"_161-pycharm","1.6.1 PyCharm",[19,147090,147091],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,147093,122817],{},[972,147095,147096,147099,147102,147108,147111],{},[450,147097,147098],{},"New Project：创建项目。",[450,147100,147101],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[450,147103,147104,147105,126738],{},"New Python File：创建 ",[422,147106,147107],{},".py",[450,147109,147110],{},"Run：运行当前文件。",[450,147112,147113],{},"Debug：断点调试。",[14,147115,147117],{"id":147116},"_162-vs-code","1.6.2 VS Code",[19,147119,147120],{},"VS Code 轻量，适合后续多语言开发。",[19,147122,147123],{},"建议安装插件：",[972,147125,147126,147129,147132],{},[450,147127,147128],{},"Python。",[450,147130,147131],{},"Pylance。",[450,147133,147134],{},"Jupyter。",[19,147136,147137],{},"选择解释器：",[416,147139,147142],{"className":147140,"code":147141,"language":6187,"meta":395},[6185],"Ctrl + Shift + P -> Python: Select Interpreter\n",[422,147143,147141],{"__ignoreMap":395},[1099,147145,147147],{"id":147146},"_17-第一个python程序","1.7 第一个Python程序",[19,147149,147150,147151,25611],{},"创建文件 ",[422,147152,147153],{},"hello.py",[416,147155,147157],{"className":31133,"code":147156,"language":31135,"meta":395,"style":395},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[422,147158,147159,147170],{"__ignoreMap":395},[425,147160,147161,147163,147165,147168],{"class":427,"line":428},[425,147162,31170],{"class":691},[425,147164,1159],{"class":701},[425,147166,147167],{"class":435},"\"Hello World\"",[425,147169,1165],{"class":701},[425,147171,147172,147174,147176,147179],{"class":427,"line":698},[425,147173,31170],{"class":691},[425,147175,1159],{"class":701},[425,147177,147178],{"class":435},"\"你好，Python\"",[425,147180,1165],{"class":701},[19,147182,147183],{},"在终端运行：",[416,147185,147187],{"className":418,"code":147186,"language":420,"meta":395,"style":395},"python hello.py\n",[422,147188,147189],{"__ignoreMap":395},[425,147190,147191,147193],{"class":427,"line":428},[425,147192,31135],{"class":431},[425,147194,147195],{"class":435}," hello.py\n",[19,147197,147198],{},"或：",[416,147200,147202],{"className":418,"code":147201,"language":420,"meta":395,"style":395},"python3 hello.py\n",[422,147203,147204],{"__ignoreMap":395},[425,147205,147206,147208],{"class":427,"line":428},[425,147207,101634],{"class":431},[425,147209,147195],{"class":435},[19,147211,147212],{},"输出：",[416,147214,147217],{"className":147215,"code":147216,"language":6187,"meta":395},[6185],"Hello World\n你好，Python\n",[422,147218,147216],{"__ignoreMap":395},[1099,147220,147222],{"id":147221},"_18-print函数","1.8 print函数",[19,147224,147225,147228],{},[422,147226,147227],{},"print()"," 用来输出内容。",[416,147230,147232],{"className":31133,"code":147231,"language":31135,"meta":395,"style":395},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[422,147233,147234,147244,147254,147264],{"__ignoreMap":395},[425,147235,147236,147238,147240,147242],{"class":427,"line":428},[425,147237,31170],{"class":691},[425,147239,1159],{"class":701},[425,147241,6844],{"class":435},[425,147243,1165],{"class":701},[425,147245,147246,147248,147250,147252],{"class":427,"line":698},[425,147247,31170],{"class":691},[425,147249,1159],{"class":701},[425,147251,1460],{"class":691},[425,147253,1165],{"class":701},[425,147255,147256,147258,147260,147262],{"class":427,"line":710},[425,147257,31170],{"class":691},[425,147259,1159],{"class":701},[425,147261,1207],{"class":691},[425,147263,1165],{"class":701},[425,147265,147266,147268,147270,147273,147275,147277],{"class":427,"line":721},[425,147267,31170],{"class":691},[425,147269,1159],{"class":701},[425,147271,147272],{"class":435},"\"年龄:\"",[425,147274,13434],{"class":701},[425,147276,1798],{"class":691},[425,147278,1165],{"class":701},[19,147280,147281],{},"多个内容用逗号隔开，默认中间加空格：",[416,147283,147285],{"className":31133,"code":147284,"language":31135,"meta":395,"style":395},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[422,147286,147287,147297,147307],{"__ignoreMap":395},[425,147288,147289,147292,147294],{"class":427,"line":428},[425,147290,147291],{"class":701},"name ",[425,147293,1204],{"class":1155},[425,147295,147296],{"class":435}," \"张三\"\n",[425,147298,147299,147302,147304],{"class":427,"line":698},[425,147300,147301],{"class":701},"age ",[425,147303,1204],{"class":1155},[425,147305,147306],{"class":691}," 18\n",[425,147308,147309,147311,147313,147316,147319,147321],{"class":427,"line":710},[425,147310,31170],{"class":691},[425,147312,1159],{"class":701},[425,147314,147315],{"class":435},"\"姓名:\"",[425,147317,147318],{"class":701},", name, ",[425,147320,147272],{"class":435},[425,147322,147323],{"class":701},", age)\n",[19,147325,147326],{},"修改分隔符：",[416,147328,147330],{"className":31133,"code":147329,"language":31135,"meta":395,"style":395},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[422,147331,147332],{"__ignoreMap":395},[425,147333,147334,147336,147338,147341,147343,147345,147347,147349,147351,147354,147356,147358],{"class":427,"line":428},[425,147335,31170],{"class":691},[425,147337,1159],{"class":701},[425,147339,147340],{"class":435},"\"2024\"",[425,147342,13434],{"class":701},[425,147344,55071],{"class":435},[425,147346,13434],{"class":701},[425,147348,55071],{"class":435},[425,147350,13434],{"class":701},[425,147352,147353],{"class":6216},"sep",[425,147355,1204],{"class":1155},[425,147357,33238],{"class":435},[425,147359,1165],{"class":701},[19,147361,147362],{},"修改结尾符：",[416,147364,147366],{"className":31133,"code":147365,"language":31135,"meta":395,"style":395},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[422,147367,147368,147386],{"__ignoreMap":395},[425,147369,147370,147372,147374,147376,147378,147380,147382,147384],{"class":427,"line":428},[425,147371,31170],{"class":691},[425,147373,1159],{"class":701},[425,147375,6844],{"class":435},[425,147377,13434],{"class":701},[425,147379,46556],{"class":6216},[425,147381,1204],{"class":1155},[425,147383,5359],{"class":435},[425,147385,1165],{"class":701},[425,147387,147388,147390,147392,147395],{"class":427,"line":698},[425,147389,31170],{"class":691},[425,147391,1159],{"class":701},[425,147393,147394],{"class":435},"\"python\"",[425,147396,1165],{"class":701},[1099,147398,147400],{"id":147399},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,147402,147403],{},"交互运行适合临时验证：",[416,147405,147407],{"className":31133,"code":147406,"language":31135,"meta":395,"style":395},">>> 10 * 3\n30\n",[422,147408,147409,147419],{"__ignoreMap":395},[425,147410,147411,147413,147415,147417],{"class":427,"line":428},[425,147412,146608],{"class":1155},[425,147414,3038],{"class":691},[425,147416,7518],{"class":1155},[425,147418,120791],{"class":691},[425,147420,147421],{"class":427,"line":698},[425,147422,147423],{"class":691},"30\n",[19,147425,147426],{},"脚本运行适合保存程序：",[416,147428,147430],{"className":31133,"code":147429,"language":31135,"meta":395,"style":395},"price = 8\ncount = 5\nprint(price * count)\n",[422,147431,147432,147442,147451],{"__ignoreMap":395},[425,147433,147434,147437,147439],{"class":427,"line":428},[425,147435,147436],{"class":701},"price ",[425,147438,1204],{"class":1155},[425,147440,147441],{"class":691}," 8\n",[425,147443,147444,147447,147449],{"class":427,"line":698},[425,147445,147446],{"class":701},"count ",[425,147448,1204],{"class":1155},[425,147450,55182],{"class":691},[425,147452,147453,147455,147458,147460],{"class":427,"line":710},[425,147454,31170],{"class":691},[425,147456,147457],{"class":701},"(price ",[425,147459,1603],{"class":1155},[425,147461,147462],{"class":701}," count)\n",[19,147464,147465],{},"实际学习中推荐：",[972,147467,147468,147471,147476],{},[450,147469,147470],{},"临时试一个语法，用交互模式。",[450,147472,147473,147474,126738],{},"写完整练习，用 ",[422,147475,147107],{},[450,147477,147478],{},"写项目，用独立目录和虚拟环境。",[1099,147480,147482],{"id":147481},"_110-常见错误","1.10 常见错误",[14,147484,147486],{"id":147485},"_1101-命令找不到","1.10.1 命令找不到",[416,147488,147491],{"className":147489,"code":147490,"language":6187,"meta":395},[6185],"python: command not found\n",[422,147492,147490],{"__ignoreMap":395},[19,147494,147495],{},"原因：",[972,147497,147498,147501,147504],{},[450,147499,147500],{},"没安装 Python。",[450,147502,147503],{},"PATH 没配置。",[450,147505,147506,147507,998],{},"Linux\u002FmacOS 应该使用 ",[422,147508,101634],{},[14,147510,147512],{"id":147511},"_1102-文件名冲突","1.10.2 文件名冲突",[19,147514,147515],{},"不要把文件命名为：",[416,147517,147520],{"className":147518,"code":147519,"language":6187,"meta":395},[6185],"random.py\njson.py\ntime.py\nrequests.py\n",[422,147521,147519],{"__ignoreMap":395},[19,147523,147524],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[14,147526,147528],{"id":147527},"_1103-中文乱码","1.10.3 中文乱码",[19,147530,147531],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,147533,147534],{},"如果读写文件出现乱码，要明确指定编码：",[416,147536,147538],{"className":31133,"code":147537,"language":31135,"meta":395,"style":395},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[422,147539,147540,147574],{"__ignoreMap":395},[425,147541,147542,147544,147547,147549,147552,147554,147557,147559,147562,147564,147567,147569,147571],{"class":427,"line":428},[425,147543,108588],{"class":1155},[425,147545,147546],{"class":691}," open",[425,147548,1159],{"class":701},[425,147550,147551],{"class":435},"\"data.txt\"",[425,147553,13434],{"class":701},[425,147555,147556],{"class":435},"\"r\"",[425,147558,13434],{"class":701},[425,147560,147561],{"class":6216},"encoding",[425,147563,1204],{"class":1155},[425,147565,147566],{"class":435},"\"utf-8\"",[425,147568,938],{"class":701},[425,147570,32138],{"class":1155},[425,147572,147573],{"class":701}," f:\n",[425,147575,147576,147579,147581],{"class":427,"line":698},[425,147577,147578],{"class":701},"    content ",[425,147580,1204],{"class":1155},[425,147582,147583],{"class":701}," f.read()\n",[1099,147585,147587],{"id":147586},"_111-本章练习","1.11 本章练习",[972,147589,147590,147593,147599],{},[450,147591,147592],{},"安装 Python，并在终端输出版本号。",[450,147594,147595,147596,147598],{},"新建 ",[422,147597,147153],{},"，输出自己的姓名、年龄、学习目标。",[450,147600,105121,147601,147603],{},[422,147602,147227],{}," 输出下面格式：",[416,147605,147608],{"className":147606,"code":147607,"language":6187,"meta":395},[6185],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[422,147609,147607],{"__ignoreMap":395},[972,147611,147612],{"start":721},[450,147613,105121,147614,147616],{},[422,147615,147353],{}," 输出日期：",[416,147618,147621],{"className":147619,"code":147620,"language":6187,"meta":395},[6185],"2024-10-10\n",[422,147622,147620],{"__ignoreMap":395},[972,147624,147625],{"start":735},[450,147626,105121,147627,147629,147630,147632],{},[422,147628,46556],{}," 让两次 ",[422,147631,147227],{}," 输出在同一行。",[1074,147634,147635],{},"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":395,"searchDepth":698,"depth":698,"links":147637},[147638,147639,147640,147645,147646,147647,147651,147652,147653,147654,147659],{"id":146520,"depth":698,"text":146521},{"id":146564,"depth":698,"text":146565},{"id":146665,"depth":698,"text":146666,"children":147641},[147642,147643,147644],{"id":146669,"depth":710,"text":146670},{"id":146724,"depth":710,"text":146725},{"id":146760,"depth":710,"text":146761},{"id":146833,"depth":698,"text":146834},{"id":146978,"depth":698,"text":146979},{"id":147083,"depth":698,"text":147084,"children":147648},[147649,147650],{"id":147087,"depth":710,"text":147088},{"id":147116,"depth":710,"text":147117},{"id":147146,"depth":698,"text":147147},{"id":147221,"depth":698,"text":147222},{"id":147399,"depth":698,"text":147400},{"id":147481,"depth":698,"text":147482,"children":147655},[147656,147657,147658],{"id":147485,"depth":710,"text":147486},{"id":147511,"depth":710,"text":147512},{"id":147527,"depth":710,"text":147528},{"id":147586,"depth":698,"text":147587},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146512,"description":24374},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147666,"title":147667,"body":147668,"description":24374,"extension":1082,"meta":150072,"navigation":1084,"path":150073,"seo":150074,"stem":150075,"__hash__":150076},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147669,"toc":150057},[147670,147673,147677,147680,147683,147700,147703,147745,147748,147752,147755,147758,147795,147798,147832,147835,147927,147931,147945,147948,147975,147978,147982,148085,148092,148095,148112,148116,148123,148312,148315,148388,148392,148395,148479,148482,148514,148518,148722,148725,148729,148735,148837,148840,149096,149100,149103,149106,149120,149122,149308,149312,149674,149680,149684,149687,149811,149814,149993,149996,150000,150033,150037,150054],[10,147671,147667],{"id":147672},"_10-json与pyecharts折线图",[1099,147674,147676],{"id":147675},"_101-数据可视化","10.1 数据可视化",[19,147678,147679],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,147681,147682],{},"常见图表：",[972,147684,147685,147688,147691,147694,147697],{},[450,147686,147687],{},"折线图：看趋势。",[450,147689,147690],{},"柱状图：看分类对比。",[450,147692,147693],{},"饼图：看占比。",[450,147695,147696],{},"地图：看地域分布。",[450,147698,147699],{},"散点图：看两个变量之间的关系。",[19,147701,147702],{},"Python 可视化常用库：",[35,147704,147705,147713],{},[38,147706,147707],{},[41,147708,147709,147711],{},[44,147710,146916],{},[44,147712,24736],{},[55,147714,147715,147722,147730,147737],{},[41,147716,147717,147719],{},[60,147718,146948],{},[60,147720,147721],{},"基础、经典、可定制",[41,147723,147724,147727],{},[60,147725,147726],{},"seaborn",[60,147728,147729],{},"统计图表更美观",[41,147731,147732,147734],{},[60,147733,146956],{},[60,147735,147736],{},"生成交互式网页图表",[41,147738,147739,147742],{},[60,147740,147741],{},"plotly",[60,147743,147744],{},"交互图表能力强",[19,147746,147747],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[1099,147749,147751],{"id":147750},"_102-json回顾","10.2 JSON回顾",[19,147753,147754],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,147756,147757],{},"Python 字典：",[416,147759,147761],{"className":31133,"code":147760,"language":31135,"meta":395,"style":395},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[422,147762,147763,147771,147782,147791],{"__ignoreMap":395},[425,147764,147765,147767,147769],{"class":427,"line":428},[425,147766,102413],{"class":701},[425,147768,1204],{"class":1155},[425,147770,16569],{"class":701},[425,147772,147773,147776,147778,147780],{"class":427,"line":698},[425,147774,147775],{"class":435},"    \"name\"",[425,147777,52192],{"class":701},[425,147779,70024],{"class":435},[425,147781,32221],{"class":701},[425,147783,147784,147787,147789],{"class":427,"line":710},[425,147785,147786],{"class":435},"    \"value\"",[425,147788,52192],{"class":701},[425,147790,98213],{"class":691},[425,147792,147793],{"class":427,"line":721},[425,147794,2578],{"class":701},[19,147796,147797],{},"JSON 字符串：",[416,147799,147802],{"className":147800,"code":147801,"language":146547,"meta":395,"style":395},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[422,147803,147804,147808,147819,147828],{"__ignoreMap":395},[425,147805,147806],{"class":427,"line":428},[425,147807,2559],{"class":701},[425,147809,147810,147813,147815,147817],{"class":427,"line":698},[425,147811,147812],{"class":691},"  \"name\"",[425,147814,52192],{"class":701},[425,147816,70024],{"class":435},[425,147818,32221],{"class":701},[425,147820,147821,147824,147826],{"class":427,"line":710},[425,147822,147823],{"class":691},"  \"value\"",[425,147825,52192],{"class":701},[425,147827,98213],{"class":691},[425,147829,147830],{"class":427,"line":721},[425,147831,2578],{"class":701},[19,147833,147834],{},"Python 与 JSON 的转换：",[416,147836,147838],{"className":31133,"code":147837,"language":31135,"meta":395,"style":395},"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",[422,147839,147840,147847,147851,147876,147880,147899,147906,147910,147920],{"__ignoreMap":395},[425,147841,147842,147844],{"class":427,"line":428},[425,147843,31147],{"class":1155},[425,147845,147846],{"class":701}," json\n",[425,147848,147849],{"class":427,"line":698},[425,147850,3400],{"emptyLinePlaceholder":1084},[425,147852,147853,147855,147857,147859,147861,147863,147865,147867,147870,147872,147874],{"class":427,"line":710},[425,147854,102413],{"class":701},[425,147856,1204],{"class":1155},[425,147858,5448],{"class":701},[425,147860,63434],{"class":435},[425,147862,52192],{"class":701},[425,147864,70024],{"class":435},[425,147866,13434],{"class":701},[425,147868,147869],{"class":435},"\"value\"",[425,147871,52192],{"class":701},[425,147873,1460],{"class":691},[425,147875,2578],{"class":701},[425,147877,147878],{"class":427,"line":721},[425,147879,3400],{"emptyLinePlaceholder":1084},[425,147881,147882,147885,147887,147890,147893,147895,147897],{"class":427,"line":735},[425,147883,147884],{"class":701},"json_text ",[425,147886,1204],{"class":1155},[425,147888,147889],{"class":701}," json.dumps(data, ",[425,147891,147892],{"class":6216},"ensure_ascii",[425,147894,1204],{"class":1155},[425,147896,34742],{"class":691},[425,147898,1165],{"class":701},[425,147900,147901,147903],{"class":427,"line":743},[425,147902,31170],{"class":691},[425,147904,147905],{"class":701},"(json_text)\n",[425,147907,147908],{"class":427,"line":751},[425,147909,3400],{"emptyLinePlaceholder":1084},[425,147911,147912,147915,147917],{"class":427,"line":759},[425,147913,147914],{"class":701},"new_data ",[425,147916,1204],{"class":1155},[425,147918,147919],{"class":701}," json.loads(json_text)\n",[425,147921,147922,147924],{"class":427,"line":770},[425,147923,31170],{"class":691},[425,147925,147926],{"class":701},"(new_data)\n",[1099,147928,147930],{"id":147929},"_103-安装pyecharts","10.3 安装pyecharts",[416,147932,147934],{"className":418,"code":147933,"language":420,"meta":395,"style":395},"pip install pyecharts\n",[422,147935,147936],{"__ignoreMap":395},[425,147937,147938,147940,147942],{"class":427,"line":428},[425,147939,24825],{"class":431},[425,147941,24828],{"class":435},[425,147943,147944],{"class":435}," pyecharts\n",[19,147946,147947],{},"验证：",[416,147949,147951],{"className":31133,"code":147950,"language":31135,"meta":395,"style":395},"import pyecharts\n\nprint(pyecharts.__version__)\n",[422,147952,147953,147959,147963],{"__ignoreMap":395},[425,147954,147955,147957],{"class":427,"line":428},[425,147956,31147],{"class":1155},[425,147958,147944],{"class":701},[425,147960,147961],{"class":427,"line":698},[425,147962,3400],{"emptyLinePlaceholder":1084},[425,147964,147965,147967,147970,147973],{"class":427,"line":710},[425,147966,31170],{"class":691},[425,147968,147969],{"class":701},"(pyecharts.",[425,147971,147972],{"class":691},"__version__",[425,147974,1165],{"class":701},[19,147976,147977],{},"如果使用虚拟环境，要先激活环境再安装。",[1099,147979,147981],{"id":147980},"_104-第一个折线图","10.4 第一个折线图",[416,147983,147985],{"className":31133,"code":147984,"language":31135,"meta":395,"style":395},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[422,147986,147987,147999,148003,148013,148043,148075],{"__ignoreMap":395},[425,147988,147989,147991,147994,147996],{"class":427,"line":428},[425,147990,31492],{"class":1155},[425,147992,147993],{"class":701}," pyecharts.charts ",[425,147995,31147],{"class":1155},[425,147997,147998],{"class":701}," Line\n",[425,148000,148001],{"class":427,"line":698},[425,148002,3400],{"emptyLinePlaceholder":1084},[425,148004,148005,148008,148010],{"class":427,"line":710},[425,148006,148007],{"class":701},"line ",[425,148009,1204],{"class":1155},[425,148011,148012],{"class":701}," Line()\n",[425,148014,148015,148018,148021,148023,148026,148028,148031,148033,148036,148038,148041],{"class":427,"line":721},[425,148016,148017],{"class":701},"line.add_xaxis([",[425,148019,148020],{"class":435},"\"周一\"",[425,148022,13434],{"class":701},[425,148024,148025],{"class":435},"\"周二\"",[425,148027,13434],{"class":701},[425,148029,148030],{"class":435},"\"周三\"",[425,148032,13434],{"class":701},[425,148034,148035],{"class":435},"\"周四\"",[425,148037,13434],{"class":701},[425,148039,148040],{"class":435},"\"周五\"",[425,148042,5657],{"class":701},[425,148044,148045,148048,148051,148053,148055,148057,148059,148061,148063,148065,148068,148070,148073],{"class":427,"line":735},[425,148046,148047],{"class":701},"line.add_yaxis(",[425,148049,148050],{"class":435},"\"销售额\"",[425,148052,78273],{"class":701},[425,148054,1460],{"class":691},[425,148056,13434],{"class":701},[425,148058,1965],{"class":691},[425,148060,13434],{"class":701},[425,148062,2009],{"class":691},[425,148064,13434],{"class":701},[425,148066,148067],{"class":691},"150",[425,148069,13434],{"class":701},[425,148071,148072],{"class":691},"180",[425,148074,5657],{"class":701},[425,148076,148077,148080,148083],{"class":427,"line":743},[425,148078,148079],{"class":701},"line.render(",[425,148081,148082],{"class":435},"\"line.html\"",[425,148084,1165],{"class":701},[19,148086,148087,148088,148091],{},"运行后会生成 ",[422,148089,148090],{},"line.html","，用浏览器打开即可看到图表。",[19,148093,148094],{},"核心步骤：",[972,148096,148097,148100,148103,148106,148109],{},[450,148098,148099],{},"导入图表类。",[450,148101,148102],{},"创建图表对象。",[450,148104,148105],{},"添加 x 轴数据。",[450,148107,148108],{},"添加 y 轴数据。",[450,148110,148111],{},"渲染为 HTML。",[1099,148113,148115],{"id":148114},"_105-全局配置","10.5 全局配置",[19,148117,148118,148119,148122],{},"常用配置在 ",[422,148120,148121],{},"pyecharts.options"," 中。",[416,148124,148126],{"className":31133,"code":148125,"language":31135,"meta":395,"style":395},"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",[422,148127,148128,148145,148155,148159,148167,148191,148219,148224,148243,148262,148280,148300,148304],{"__ignoreMap":395},[425,148129,148130,148132,148135,148137,148140,148142],{"class":427,"line":428},[425,148131,31492],{"class":1155},[425,148133,148134],{"class":701}," pyecharts ",[425,148136,31147],{"class":1155},[425,148138,148139],{"class":701}," options ",[425,148141,32138],{"class":1155},[425,148143,148144],{"class":701}," opts\n",[425,148146,148147,148149,148151,148153],{"class":427,"line":698},[425,148148,31492],{"class":1155},[425,148150,147993],{"class":701},[425,148152,31147],{"class":1155},[425,148154,147998],{"class":701},[425,148156,148157],{"class":427,"line":710},[425,148158,3400],{"emptyLinePlaceholder":1084},[425,148160,148161,148163,148165],{"class":427,"line":721},[425,148162,148007],{"class":701},[425,148164,1204],{"class":1155},[425,148166,148012],{"class":701},[425,148168,148169,148171,148173,148175,148177,148179,148181,148183,148185,148187,148189],{"class":427,"line":735},[425,148170,148017],{"class":701},[425,148172,148020],{"class":435},[425,148174,13434],{"class":701},[425,148176,148025],{"class":435},[425,148178,13434],{"class":701},[425,148180,148030],{"class":435},[425,148182,13434],{"class":701},[425,148184,148035],{"class":435},[425,148186,13434],{"class":701},[425,148188,148040],{"class":435},[425,148190,5657],{"class":701},[425,148192,148193,148195,148197,148199,148201,148203,148205,148207,148209,148211,148213,148215,148217],{"class":427,"line":743},[425,148194,148047],{"class":701},[425,148196,148050],{"class":435},[425,148198,78273],{"class":701},[425,148200,1460],{"class":691},[425,148202,13434],{"class":701},[425,148204,1965],{"class":691},[425,148206,13434],{"class":701},[425,148208,2009],{"class":691},[425,148210,13434],{"class":701},[425,148212,148067],{"class":691},[425,148214,13434],{"class":701},[425,148216,148072],{"class":691},[425,148218,5657],{"class":701},[425,148220,148221],{"class":427,"line":751},[425,148222,148223],{"class":701},"line.set_global_opts(\n",[425,148225,148226,148229,148231,148234,148236,148238,148241],{"class":427,"line":759},[425,148227,148228],{"class":6216},"    title_opts",[425,148230,1204],{"class":1155},[425,148232,148233],{"class":701},"opts.TitleOpts(",[425,148235,52162],{"class":6216},[425,148237,1204],{"class":1155},[425,148239,148240],{"class":435},"\"一周销售额\"",[425,148242,38802],{"class":701},[425,148244,148245,148248,148250,148253,148255,148257,148260],{"class":427,"line":770},[425,148246,148247],{"class":6216},"    xaxis_opts",[425,148249,1204],{"class":1155},[425,148251,148252],{"class":701},"opts.AxisOpts(",[425,148254,80565],{"class":6216},[425,148256,1204],{"class":1155},[425,148258,148259],{"class":435},"\"日期\"",[425,148261,38802],{"class":701},[425,148263,148264,148267,148269,148271,148273,148275,148278],{"class":427,"line":780},[425,148265,148266],{"class":6216},"    yaxis_opts",[425,148268,1204],{"class":1155},[425,148270,148252],{"class":701},[425,148272,80565],{"class":6216},[425,148274,1204],{"class":1155},[425,148276,148277],{"class":435},"\"金额\"",[425,148279,38802],{"class":701},[425,148281,148282,148285,148287,148290,148293,148295,148298],{"class":427,"line":790},[425,148283,148284],{"class":6216},"    tooltip_opts",[425,148286,1204],{"class":1155},[425,148288,148289],{"class":701},"opts.TooltipOpts(",[425,148291,148292],{"class":6216},"trigger",[425,148294,1204],{"class":1155},[425,148296,148297],{"class":435},"\"axis\"",[425,148299,38802],{"class":701},[425,148301,148302],{"class":427,"line":805},[425,148303,1165],{"class":701},[425,148305,148306,148308,148310],{"class":427,"line":818},[425,148307,148079],{"class":701},[425,148309,148082],{"class":435},[425,148311,1165],{"class":701},[19,148313,148314],{},"常见全局配置：",[35,148316,148317,148326],{},[38,148318,148319],{},[41,148320,148321,148324],{},[44,148322,148323],{},"配置",[44,148325,103451],{},[55,148327,148328,148338,148348,148358,148368,148378],{},[41,148329,148330,148335],{},[60,148331,148332],{},[422,148333,148334],{},"TitleOpts",[60,148336,148337],{},"标题",[41,148339,148340,148345],{},[60,148341,148342],{},[422,148343,148344],{},"LegendOpts",[60,148346,148347],{},"图例",[41,148349,148350,148355],{},[60,148351,148352],{},[422,148353,148354],{},"TooltipOpts",[60,148356,148357],{},"提示框",[41,148359,148360,148365],{},[60,148361,148362],{},[422,148363,148364],{},"AxisOpts",[60,148366,148367],{},"坐标轴",[41,148369,148370,148375],{},[60,148371,148372],{},[422,148373,148374],{},"VisualMapOpts",[60,148376,148377],{},"视觉映射",[41,148379,148380,148385],{},[60,148381,148382],{},[422,148383,148384],{},"DataZoomOpts",[60,148386,148387],{},"区域缩放",[1099,148389,148391],{"id":148390},"_106-系列配置","10.6 系列配置",[19,148393,148394],{},"系列配置作用于某一组数据。",[416,148396,148398],{"className":31133,"code":148397,"language":31135,"meta":395,"style":395},"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",[422,148399,148400,148405,148416,148445,148456,148475],{"__ignoreMap":395},[425,148401,148402],{"class":427,"line":428},[425,148403,148404],{"class":701},"line.add_yaxis(\n",[425,148406,148407,148410,148412,148414],{"class":427,"line":698},[425,148408,148409],{"class":6216},"    series_name",[425,148411,1204],{"class":1155},[425,148413,148050],{"class":435},[425,148415,32221],{"class":701},[425,148417,148418,148421,148423,148425,148427,148429,148431,148433,148435,148437,148439,148441,148443],{"class":427,"line":710},[425,148419,148420],{"class":6216},"    y_axis",[425,148422,1204],{"class":1155},[425,148424,2037],{"class":701},[425,148426,1460],{"class":691},[425,148428,13434],{"class":701},[425,148430,1965],{"class":691},[425,148432,13434],{"class":701},[425,148434,2009],{"class":691},[425,148436,13434],{"class":701},[425,148438,148067],{"class":691},[425,148440,13434],{"class":701},[425,148442,148072],{"class":691},[425,148444,88591],{"class":701},[425,148446,148447,148450,148452,148454],{"class":427,"line":721},[425,148448,148449],{"class":6216},"    is_smooth",[425,148451,1204],{"class":1155},[425,148453,32231],{"class":691},[425,148455,32221],{"class":701},[425,148457,148458,148461,148463,148466,148469,148471,148473],{"class":427,"line":735},[425,148459,148460],{"class":6216},"    label_opts",[425,148462,1204],{"class":1155},[425,148464,148465],{"class":701},"opts.LabelOpts(",[425,148467,148468],{"class":6216},"is_show",[425,148470,1204],{"class":1155},[425,148472,32231],{"class":691},[425,148474,38802],{"class":701},[425,148476,148477],{"class":427,"line":743},[425,148478,1165],{"class":701},[19,148480,148481],{},"常用参数：",[972,148483,148484,148490,148496,148502,148508],{},[450,148485,148486,148489],{},[422,148487,148488],{},"series_name","：系列名称。",[450,148491,148492,148495],{},[422,148493,148494],{},"y_axis","：y 轴数据。",[450,148497,148498,148501],{},[422,148499,148500],{},"is_smooth","：是否平滑曲线。",[450,148503,148504,148507],{},[422,148505,148506],{},"label_opts","：标签配置。",[450,148509,148510,148513],{},[422,148511,148512],{},"symbol_size","：标记点大小。",[1099,148515,148517],{"id":148516},"_107-多条折线","10.7 多条折线",[416,148519,148521],{"className":31133,"code":148520,"language":31135,"meta":395,"style":395},"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",[422,148522,148523,148537,148547,148551,148580,148584,148592,148597,148635,148672,148676,148693,148709,148713],{"__ignoreMap":395},[425,148524,148525,148527,148529,148531,148533,148535],{"class":427,"line":428},[425,148526,31492],{"class":1155},[425,148528,148134],{"class":701},[425,148530,31147],{"class":1155},[425,148532,148139],{"class":701},[425,148534,32138],{"class":1155},[425,148536,148144],{"class":701},[425,148538,148539,148541,148543,148545],{"class":427,"line":698},[425,148540,31492],{"class":1155},[425,148542,147993],{"class":701},[425,148544,31147],{"class":1155},[425,148546,147998],{"class":701},[425,148548,148549],{"class":427,"line":710},[425,148550,3400],{"emptyLinePlaceholder":1084},[425,148552,148553,148556,148558,148560,148562,148564,148566,148568,148570,148572,148574,148576,148578],{"class":427,"line":721},[425,148554,148555],{"class":701},"dates ",[425,148557,1204],{"class":1155},[425,148559,52981],{"class":701},[425,148561,148020],{"class":435},[425,148563,13434],{"class":701},[425,148565,148025],{"class":435},[425,148567,13434],{"class":701},[425,148569,148030],{"class":435},[425,148571,13434],{"class":701},[425,148573,148035],{"class":435},[425,148575,13434],{"class":701},[425,148577,148040],{"class":435},[425,148579,34001],{"class":701},[425,148581,148582],{"class":427,"line":735},[425,148583,3400],{"emptyLinePlaceholder":1084},[425,148585,148586,148588,148590],{"class":427,"line":743},[425,148587,148007],{"class":701},[425,148589,1204],{"class":1155},[425,148591,148012],{"class":701},[425,148593,148594],{"class":427,"line":751},[425,148595,148596],{"class":701},"line.add_xaxis(dates)\n",[425,148598,148599,148601,148604,148606,148608,148610,148613,148615,148617,148619,148621,148623,148625,148627,148629,148631,148633],{"class":427,"line":759},[425,148600,148047],{"class":701},[425,148602,148603],{"class":435},"\"线上销售\"",[425,148605,78273],{"class":701},[425,148607,1460],{"class":691},[425,148609,13434],{"class":701},[425,148611,148612],{"class":691},"130",[425,148614,13434],{"class":701},[425,148616,1965],{"class":691},[425,148618,13434],{"class":701},[425,148620,22045],{"class":691},[425,148622,13434],{"class":701},[425,148624,2724],{"class":691},[425,148626,112957],{"class":701},[425,148628,148500],{"class":6216},[425,148630,1204],{"class":1155},[425,148632,32231],{"class":691},[425,148634,1165],{"class":701},[425,148636,148637,148639,148642,148644,148646,148648,148650,148652,148654,148656,148658,148660,148662,148664,148666,148668,148670],{"class":427,"line":770},[425,148638,148047],{"class":701},[425,148640,148641],{"class":435},"\"线下销售\"",[425,148643,78273],{"class":701},[425,148645,1760],{"class":691},[425,148647,13434],{"class":701},[425,148649,2009],{"class":691},[425,148651,13434],{"class":701},[425,148653,1460],{"class":691},[425,148655,13434],{"class":701},[425,148657,1965],{"class":691},[425,148659,13434],{"class":701},[425,148661,148067],{"class":691},[425,148663,112957],{"class":701},[425,148665,148500],{"class":6216},[425,148667,1204],{"class":1155},[425,148669,32231],{"class":691},[425,148671,1165],{"class":701},[425,148673,148674],{"class":427,"line":780},[425,148675,148223],{"class":701},[425,148677,148678,148680,148682,148684,148686,148688,148691],{"class":427,"line":790},[425,148679,148228],{"class":6216},[425,148681,1204],{"class":1155},[425,148683,148233],{"class":701},[425,148685,52162],{"class":6216},[425,148687,1204],{"class":1155},[425,148689,148690],{"class":435},"\"线上线下销售趋势\"",[425,148692,38802],{"class":701},[425,148694,148695,148697,148699,148701,148703,148705,148707],{"class":427,"line":805},[425,148696,148284],{"class":6216},[425,148698,1204],{"class":1155},[425,148700,148289],{"class":701},[425,148702,148292],{"class":6216},[425,148704,1204],{"class":1155},[425,148706,148297],{"class":435},[425,148708,38802],{"class":701},[425,148710,148711],{"class":427,"line":818},[425,148712,1165],{"class":701},[425,148714,148715,148717,148720],{"class":427,"line":831},[425,148716,148079],{"class":701},[425,148718,148719],{"class":435},"\"sales.html\"",[425,148721,1165],{"class":701},[19,148723,148724],{},"多条折线适合比较不同指标或不同地区。",[1099,148726,148728],{"id":148727},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,148730,148731,148732,25611],{},"假设 ",[422,148733,148734],{},"sales.json",[416,148736,148738],{"className":147800,"code":148737,"language":146547,"meta":395,"style":395},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[422,148739,148740,148745,148777,148805,148833],{"__ignoreMap":395},[425,148741,148742],{"class":427,"line":428},[425,148743,148744],{"class":701},"[\n",[425,148746,148747,148750,148753,148755,148757,148759,148762,148764,148766,148768,148771,148773,148775],{"class":427,"line":698},[425,148748,148749],{"class":701},"  {",[425,148751,148752],{"class":691},"\"date\"",[425,148754,52192],{"class":701},[425,148756,148020],{"class":435},[425,148758,13434],{"class":701},[425,148760,148761],{"class":691},"\"online\"",[425,148763,52192],{"class":701},[425,148765,1460],{"class":691},[425,148767,13434],{"class":701},[425,148769,148770],{"class":691},"\"offline\"",[425,148772,52192],{"class":701},[425,148774,1760],{"class":691},[425,148776,5930],{"class":701},[425,148778,148779,148781,148783,148785,148787,148789,148791,148793,148795,148797,148799,148801,148803],{"class":427,"line":710},[425,148780,148749],{"class":701},[425,148782,148752],{"class":691},[425,148784,52192],{"class":701},[425,148786,148025],{"class":435},[425,148788,13434],{"class":701},[425,148790,148761],{"class":691},[425,148792,52192],{"class":701},[425,148794,148612],{"class":691},[425,148796,13434],{"class":701},[425,148798,148770],{"class":691},[425,148800,52192],{"class":701},[425,148802,2009],{"class":691},[425,148804,5930],{"class":701},[425,148806,148807,148809,148811,148813,148815,148817,148819,148821,148823,148825,148827,148829,148831],{"class":427,"line":721},[425,148808,148749],{"class":701},[425,148810,148752],{"class":691},[425,148812,52192],{"class":701},[425,148814,148030],{"class":435},[425,148816,13434],{"class":701},[425,148818,148761],{"class":691},[425,148820,52192],{"class":701},[425,148822,1965],{"class":691},[425,148824,13434],{"class":701},[425,148826,148770],{"class":691},[425,148828,52192],{"class":701},[425,148830,1460],{"class":691},[425,148832,2578],{"class":701},[425,148834,148835],{"class":427,"line":735},[425,148836,34001],{"class":701},[19,148838,148839],{},"读取并绘图：",[416,148841,148843],{"className":31133,"code":148842,"language":31135,"meta":395,"style":395},"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",[422,148844,148845,148851,148865,148875,148879,148911,148924,148928,148936,148945,148954,148958,148970,148979,148988,148997,149001,149009,149013,149030,149047,149051,149068,149084,149088],{"__ignoreMap":395},[425,148846,148847,148849],{"class":427,"line":428},[425,148848,31147],{"class":1155},[425,148850,147846],{"class":701},[425,148852,148853,148855,148857,148859,148861,148863],{"class":427,"line":698},[425,148854,31492],{"class":1155},[425,148856,148134],{"class":701},[425,148858,31147],{"class":1155},[425,148860,148139],{"class":701},[425,148862,32138],{"class":1155},[425,148864,148144],{"class":701},[425,148866,148867,148869,148871,148873],{"class":427,"line":710},[425,148868,31492],{"class":1155},[425,148870,147993],{"class":701},[425,148872,31147],{"class":1155},[425,148874,147998],{"class":701},[425,148876,148877],{"class":427,"line":721},[425,148878,3400],{"emptyLinePlaceholder":1084},[425,148880,148881,148883,148885,148887,148890,148892,148894,148896,148898,148900,148902,148904,148906,148909],{"class":427,"line":735},[425,148882,108588],{"class":1155},[425,148884,147546],{"class":691},[425,148886,1159],{"class":701},[425,148888,148889],{"class":435},"\"sales.json\"",[425,148891,13434],{"class":701},[425,148893,147556],{"class":435},[425,148895,13434],{"class":701},[425,148897,147561],{"class":6216},[425,148899,1204],{"class":1155},[425,148901,147566],{"class":435},[425,148903,938],{"class":701},[425,148905,32138],{"class":1155},[425,148907,148908],{"class":6216}," file",[425,148910,4739],{"class":701},[425,148912,148913,148915,148917,148920,148922],{"class":427,"line":743},[425,148914,102176],{"class":701},[425,148916,1204],{"class":1155},[425,148918,148919],{"class":701}," json.load(",[425,148921,46109],{"class":6216},[425,148923,1165],{"class":701},[425,148925,148926],{"class":427,"line":751},[425,148927,3400],{"emptyLinePlaceholder":1084},[425,148929,148930,148932,148934],{"class":427,"line":759},[425,148931,148555],{"class":701},[425,148933,1204],{"class":1155},[425,148935,52593],{"class":701},[425,148937,148938,148941,148943],{"class":427,"line":770},[425,148939,148940],{"class":701},"online_sales ",[425,148942,1204],{"class":1155},[425,148944,52593],{"class":701},[425,148946,148947,148950,148952],{"class":427,"line":780},[425,148948,148949],{"class":701},"offline_sales ",[425,148951,1204],{"class":1155},[425,148953,52593],{"class":701},[425,148955,148956],{"class":427,"line":790},[425,148957,3400],{"emptyLinePlaceholder":1084},[425,148959,148960,148962,148965,148967],{"class":427,"line":805},[425,148961,4025],{"class":1155},[425,148963,148964],{"class":701}," item ",[425,148966,27034],{"class":1155},[425,148968,148969],{"class":701}," data:\n",[425,148971,148972,148975,148977],{"class":427,"line":818},[425,148973,148974],{"class":701},"    dates.append(item[",[425,148976,148752],{"class":435},[425,148978,5657],{"class":701},[425,148980,148981,148984,148986],{"class":427,"line":831},[425,148982,148983],{"class":701},"    online_sales.append(item[",[425,148985,148761],{"class":435},[425,148987,5657],{"class":701},[425,148989,148990,148993,148995],{"class":427,"line":841},[425,148991,148992],{"class":701},"    offline_sales.append(item[",[425,148994,148770],{"class":435},[425,148996,5657],{"class":701},[425,148998,148999],{"class":427,"line":852},[425,149000,3400],{"emptyLinePlaceholder":1084},[425,149002,149003,149005,149007],{"class":427,"line":862},[425,149004,148007],{"class":701},[425,149006,1204],{"class":1155},[425,149008,148012],{"class":701},[425,149010,149011],{"class":427,"line":878},[425,149012,148596],{"class":701},[425,149014,149015,149017,149019,149022,149024,149026,149028],{"class":427,"line":914},[425,149016,148047],{"class":701},[425,149018,148603],{"class":435},[425,149020,149021],{"class":701},", online_sales, ",[425,149023,148500],{"class":6216},[425,149025,1204],{"class":1155},[425,149027,32231],{"class":691},[425,149029,1165],{"class":701},[425,149031,149032,149034,149036,149039,149041,149043,149045],{"class":427,"line":943},[425,149033,148047],{"class":701},[425,149035,148641],{"class":435},[425,149037,149038],{"class":701},", offline_sales, ",[425,149040,148500],{"class":6216},[425,149042,1204],{"class":1155},[425,149044,32231],{"class":691},[425,149046,1165],{"class":701},[425,149048,149049],{"class":427,"line":956},[425,149050,148223],{"class":701},[425,149052,149053,149055,149057,149059,149061,149063,149066],{"class":427,"line":964},[425,149054,148228],{"class":6216},[425,149056,1204],{"class":1155},[425,149058,148233],{"class":701},[425,149060,52162],{"class":6216},[425,149062,1204],{"class":1155},[425,149064,149065],{"class":435},"\"销售趋势\"",[425,149067,38802],{"class":701},[425,149069,149070,149072,149074,149076,149078,149080,149082],{"class":427,"line":2733},[425,149071,148284],{"class":6216},[425,149073,1204],{"class":1155},[425,149075,148289],{"class":701},[425,149077,148292],{"class":6216},[425,149079,1204],{"class":1155},[425,149081,148297],{"class":435},[425,149083,38802],{"class":701},[425,149085,149086],{"class":427,"line":2750},[425,149087,1165],{"class":701},[425,149089,149090,149092,149094],{"class":427,"line":2755},[425,149091,148079],{"class":701},[425,149093,148719],{"class":435},[425,149095,1165],{"class":701},[1099,149097,149099],{"id":149098},"_109-数据清洗","10.9 数据清洗",[19,149101,149102],{},"真实数据经常不整齐，需要清洗。",[19,149104,149105],{},"常见问题：",[972,149107,149108,149111,149114,149117],{},[450,149109,149110],{},"数字是字符串。",[450,149112,149113],{},"字段缺失。",[450,149115,149116],{},"空值。",[450,149118,149119],{},"日期格式不统一。",[19,149121,16132],{},[416,149123,149125],{"className":31133,"code":149124,"language":31135,"meta":395,"style":395},"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",[422,149126,149127,149136,149159,149179,149200,149204,149208,149216,149225,149229,149240,149254,149263,149268,149272,149280,149290,149294,149301],{"__ignoreMap":395},[425,149128,149129,149132,149134],{"class":427,"line":428},[425,149130,149131],{"class":701},"raw_data ",[425,149133,1204],{"class":1155},[425,149135,56202],{"class":701},[425,149137,149138,149141,149143,149145,149147,149149,149152,149154,149157],{"class":427,"line":698},[425,149139,149140],{"class":701},"    {",[425,149142,148752],{"class":435},[425,149144,52192],{"class":701},[425,149146,148020],{"class":435},[425,149148,13434],{"class":701},[425,149150,149151],{"class":435},"\"sales\"",[425,149153,52192],{"class":701},[425,149155,149156],{"class":435},"\"100\"",[425,149158,5930],{"class":701},[425,149160,149161,149163,149165,149167,149169,149171,149173,149175,149177],{"class":427,"line":710},[425,149162,149140],{"class":701},[425,149164,148752],{"class":435},[425,149166,52192],{"class":701},[425,149168,148025],{"class":435},[425,149170,13434],{"class":701},[425,149172,149151],{"class":435},[425,149174,52192],{"class":701},[425,149176,8652],{"class":435},[425,149178,5930],{"class":701},[425,149180,149181,149183,149185,149187,149189,149191,149193,149195,149198],{"class":427,"line":721},[425,149182,149140],{"class":701},[425,149184,148752],{"class":435},[425,149186,52192],{"class":701},[425,149188,148030],{"class":435},[425,149190,13434],{"class":701},[425,149192,149151],{"class":435},[425,149194,52192],{"class":701},[425,149196,149197],{"class":435},"\"120\"",[425,149199,5930],{"class":701},[425,149201,149202],{"class":427,"line":735},[425,149203,34001],{"class":701},[425,149205,149206],{"class":427,"line":743},[425,149207,3400],{"emptyLinePlaceholder":1084},[425,149209,149210,149212,149214],{"class":427,"line":751},[425,149211,148555],{"class":701},[425,149213,1204],{"class":1155},[425,149215,52593],{"class":701},[425,149217,149218,149221,149223],{"class":427,"line":759},[425,149219,149220],{"class":701},"sales ",[425,149222,1204],{"class":1155},[425,149224,52593],{"class":701},[425,149226,149227],{"class":427,"line":770},[425,149228,3400],{"emptyLinePlaceholder":1084},[425,149230,149231,149233,149235,149237],{"class":427,"line":780},[425,149232,4025],{"class":1155},[425,149234,148964],{"class":701},[425,149236,27034],{"class":1155},[425,149238,149239],{"class":701}," raw_data:\n",[425,149241,149242,149245,149247,149250,149252],{"class":427,"line":790},[425,149243,149244],{"class":701},"    value ",[425,149246,1204],{"class":1155},[425,149248,149249],{"class":701}," item.get(",[425,149251,149151],{"class":435},[425,149253,1165],{"class":701},[425,149255,149256,149258,149260],{"class":427,"line":805},[425,149257,4101],{"class":1155},[425,149259,39685],{"class":1155},[425,149261,149262],{"class":701}," value:\n",[425,149264,149265],{"class":427,"line":818},[425,149266,149267],{"class":1155},"        continue\n",[425,149269,149270],{"class":427,"line":831},[425,149271,3400],{"emptyLinePlaceholder":1084},[425,149273,149274,149276,149278],{"class":427,"line":841},[425,149275,148974],{"class":701},[425,149277,148752],{"class":435},[425,149279,5657],{"class":701},[425,149281,149282,149285,149287],{"class":427,"line":852},[425,149283,149284],{"class":701},"    sales.append(",[425,149286,1162],{"class":691},[425,149288,149289],{"class":701},"(value))\n",[425,149291,149292],{"class":427,"line":862},[425,149293,3400],{"emptyLinePlaceholder":1084},[425,149295,149296,149298],{"class":427,"line":878},[425,149297,31170],{"class":691},[425,149299,149300],{"class":701},"(dates)\n",[425,149302,149303,149305],{"class":427,"line":914},[425,149304,31170],{"class":691},[425,149306,149307],{"class":701},"(sales)\n",[1099,149309,149311],{"id":149310},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[416,149313,149315],{"className":31133,"code":149314,"language":31135,"meta":395,"style":395},"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",[422,149316,149317,149331,149341,149345,149353,149374,149396,149418,149440,149462,149466,149470,149492,149513,149517,149525,149529,149533,149543,149552,149562,149578,149582,149586,149603,149619,149635,149651,149661,149665],{"__ignoreMap":395},[425,149318,149319,149321,149323,149325,149327,149329],{"class":427,"line":428},[425,149320,31492],{"class":1155},[425,149322,148134],{"class":701},[425,149324,31147],{"class":1155},[425,149326,148139],{"class":701},[425,149328,32138],{"class":1155},[425,149330,148144],{"class":701},[425,149332,149333,149335,149337,149339],{"class":427,"line":698},[425,149334,31492],{"class":1155},[425,149336,147993],{"class":701},[425,149338,31147],{"class":1155},[425,149340,147998],{"class":701},[425,149342,149343],{"class":427,"line":710},[425,149344,3400],{"emptyLinePlaceholder":1084},[425,149346,149347,149349,149351],{"class":427,"line":721},[425,149348,149220],{"class":701},[425,149350,1204],{"class":1155},[425,149352,56202],{"class":701},[425,149354,149355,149357,149359,149361,149364,149366,149368,149370,149372],{"class":427,"line":735},[425,149356,149140],{"class":701},[425,149358,148752],{"class":435},[425,149360,52192],{"class":701},[425,149362,149363],{"class":435},"\"2024-10-01\"",[425,149365,13434],{"class":701},[425,149367,84839],{"class":435},[425,149369,52192],{"class":701},[425,149371,92778],{"class":691},[425,149373,5930],{"class":701},[425,149375,149376,149378,149380,149382,149385,149387,149389,149391,149394],{"class":427,"line":743},[425,149377,149140],{"class":701},[425,149379,148752],{"class":435},[425,149381,52192],{"class":701},[425,149383,149384],{"class":435},"\"2024-10-02\"",[425,149386,13434],{"class":701},[425,149388,84839],{"class":435},[425,149390,52192],{"class":701},[425,149392,149393],{"class":691},"1800",[425,149395,5930],{"class":701},[425,149397,149398,149400,149402,149404,149407,149409,149411,149413,149416],{"class":427,"line":751},[425,149399,149140],{"class":701},[425,149401,148752],{"class":435},[425,149403,52192],{"class":701},[425,149405,149406],{"class":435},"\"2024-10-03\"",[425,149408,13434],{"class":701},[425,149410,84839],{"class":435},[425,149412,52192],{"class":701},[425,149414,149415],{"class":691},"1500",[425,149417,5930],{"class":701},[425,149419,149420,149422,149424,149426,149429,149431,149433,149435,149438],{"class":427,"line":759},[425,149421,149140],{"class":701},[425,149423,148752],{"class":435},[425,149425,52192],{"class":701},[425,149427,149428],{"class":435},"\"2024-10-04\"",[425,149430,13434],{"class":701},[425,149432,84839],{"class":435},[425,149434,52192],{"class":701},[425,149436,149437],{"class":691},"2100",[425,149439,5930],{"class":701},[425,149441,149442,149444,149446,149448,149451,149453,149455,149457,149460],{"class":427,"line":770},[425,149443,149140],{"class":701},[425,149445,148752],{"class":435},[425,149447,52192],{"class":701},[425,149449,149450],{"class":435},"\"2024-10-05\"",[425,149452,13434],{"class":701},[425,149454,84839],{"class":435},[425,149456,52192],{"class":701},[425,149458,149459],{"class":691},"2600",[425,149461,5930],{"class":701},[425,149463,149464],{"class":427,"line":780},[425,149465,34001],{"class":701},[425,149467,149468],{"class":427,"line":790},[425,149469,3400],{"emptyLinePlaceholder":1084},[425,149471,149472,149474,149476,149479,149481,149483,149485,149487,149489],{"class":427,"line":805},[425,149473,148555],{"class":701},[425,149475,1204],{"class":1155},[425,149477,149478],{"class":701}," [item[",[425,149480,148752],{"class":435},[425,149482,5443],{"class":701},[425,149484,4025],{"class":1155},[425,149486,148964],{"class":701},[425,149488,27034],{"class":1155},[425,149490,149491],{"class":701}," sales]\n",[425,149493,149494,149497,149499,149501,149503,149505,149507,149509,149511],{"class":427,"line":818},[425,149495,149496],{"class":701},"amounts ",[425,149498,1204],{"class":1155},[425,149500,149478],{"class":701},[425,149502,84839],{"class":435},[425,149504,5443],{"class":701},[425,149506,4025],{"class":1155},[425,149508,148964],{"class":701},[425,149510,27034],{"class":1155},[425,149512,149491],{"class":701},[425,149514,149515],{"class":427,"line":831},[425,149516,3400],{"emptyLinePlaceholder":1084},[425,149518,149519,149521,149523],{"class":427,"line":841},[425,149520,148007],{"class":701},[425,149522,1204],{"class":1155},[425,149524,148012],{"class":701},[425,149526,149527],{"class":427,"line":852},[425,149528,148596],{"class":701},[425,149530,149531],{"class":427,"line":862},[425,149532,148404],{"class":701},[425,149534,149535,149537,149539,149541],{"class":427,"line":878},[425,149536,148409],{"class":6216},[425,149538,1204],{"class":1155},[425,149540,148050],{"class":435},[425,149542,32221],{"class":701},[425,149544,149545,149547,149549],{"class":427,"line":914},[425,149546,148420],{"class":6216},[425,149548,1204],{"class":1155},[425,149550,149551],{"class":701},"amounts,\n",[425,149553,149554,149556,149558,149560],{"class":427,"line":943},[425,149555,148449],{"class":6216},[425,149557,1204],{"class":1155},[425,149559,32231],{"class":691},[425,149561,32221],{"class":701},[425,149563,149564,149566,149568,149570,149572,149574,149576],{"class":427,"line":956},[425,149565,148460],{"class":6216},[425,149567,1204],{"class":1155},[425,149569,148465],{"class":701},[425,149571,148468],{"class":6216},[425,149573,1204],{"class":1155},[425,149575,32231],{"class":691},[425,149577,38802],{"class":701},[425,149579,149580],{"class":427,"line":964},[425,149581,1165],{"class":701},[425,149583,149584],{"class":427,"line":2733},[425,149585,148223],{"class":701},[425,149587,149588,149590,149592,149594,149596,149598,149601],{"class":427,"line":2750},[425,149589,148228],{"class":6216},[425,149591,1204],{"class":1155},[425,149593,148233],{"class":701},[425,149595,52162],{"class":6216},[425,149597,1204],{"class":1155},[425,149599,149600],{"class":435},"\"每日销售额\"",[425,149602,38802],{"class":701},[425,149604,149605,149607,149609,149611,149613,149615,149617],{"class":427,"line":2755},[425,149606,148247],{"class":6216},[425,149608,1204],{"class":1155},[425,149610,148252],{"class":701},[425,149612,80565],{"class":6216},[425,149614,1204],{"class":1155},[425,149616,148259],{"class":435},[425,149618,38802],{"class":701},[425,149620,149621,149623,149625,149627,149629,149631,149633],{"class":427,"line":2760},[425,149622,148266],{"class":6216},[425,149624,1204],{"class":1155},[425,149626,148252],{"class":701},[425,149628,80565],{"class":6216},[425,149630,1204],{"class":1155},[425,149632,148277],{"class":435},[425,149634,38802],{"class":701},[425,149636,149637,149639,149641,149643,149645,149647,149649],{"class":427,"line":2765},[425,149638,148284],{"class":6216},[425,149640,1204],{"class":1155},[425,149642,148289],{"class":701},[425,149644,148292],{"class":6216},[425,149646,1204],{"class":1155},[425,149648,148297],{"class":435},[425,149650,38802],{"class":701},[425,149652,149653,149656,149658],{"class":427,"line":2779},[425,149654,149655],{"class":6216},"    datazoom_opts",[425,149657,1204],{"class":1155},[425,149659,149660],{"class":701},"[opts.DataZoomOpts()],\n",[425,149662,149663],{"class":427,"line":2784},[425,149664,1165],{"class":701},[425,149666,149667,149669,149672],{"class":427,"line":3577},[425,149668,148079],{"class":701},[425,149670,149671],{"class":435},"\"daily_sales.html\"",[425,149673,1165],{"class":701},[19,149675,149676,149679],{},[422,149677,149678],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[1099,149681,149683],{"id":149682},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,149685,149686],{},"如果数据结构如下：",[416,149688,149690],{"className":31133,"code":149689,"language":31135,"meta":395,"style":395},"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",[422,149691,149692,149700,149708,149730,149751,149756,149763,149783,149803,149807],{"__ignoreMap":395},[425,149693,149694,149696,149698],{"class":427,"line":428},[425,149695,102413],{"class":701},[425,149697,1204],{"class":1155},[425,149699,16569],{"class":701},[425,149701,149702,149705],{"class":427,"line":698},[425,149703,149704],{"class":435},"    \"北京\"",[425,149706,149707],{"class":701},": [\n",[425,149709,149710,149712,149714,149716,149719,149721,149724,149726,149728],{"class":427,"line":710},[425,149711,5917],{"class":701},[425,149713,148752],{"class":435},[425,149715,52192],{"class":701},[425,149717,149718],{"class":435},"\"2024-01-01\"",[425,149720,13434],{"class":701},[425,149722,149723],{"class":435},"\"confirm\"",[425,149725,52192],{"class":701},[425,149727,1594],{"class":691},[425,149729,5930],{"class":701},[425,149731,149732,149734,149736,149738,149741,149743,149745,149747,149749],{"class":427,"line":721},[425,149733,5917],{"class":701},[425,149735,148752],{"class":435},[425,149737,52192],{"class":701},[425,149739,149740],{"class":435},"\"2024-01-02\"",[425,149742,13434],{"class":701},[425,149744,149723],{"class":435},[425,149746,52192],{"class":701},[425,149748,1646],{"class":691},[425,149750,5930],{"class":701},[425,149752,149753],{"class":427,"line":735},[425,149754,149755],{"class":701},"    ],\n",[425,149757,149758,149761],{"class":427,"line":743},[425,149759,149760],{"class":435},"    \"上海\"",[425,149762,149707],{"class":701},[425,149764,149765,149767,149769,149771,149773,149775,149777,149779,149781],{"class":427,"line":751},[425,149766,5917],{"class":701},[425,149768,148752],{"class":435},[425,149770,52192],{"class":701},[425,149772,149718],{"class":435},[425,149774,13434],{"class":701},[425,149776,149723],{"class":435},[425,149778,52192],{"class":701},[425,149780,1544],{"class":691},[425,149782,5930],{"class":701},[425,149784,149785,149787,149789,149791,149793,149795,149797,149799,149801],{"class":427,"line":759},[425,149786,5917],{"class":701},[425,149788,148752],{"class":435},[425,149790,52192],{"class":701},[425,149792,149740],{"class":435},[425,149794,13434],{"class":701},[425,149796,149723],{"class":435},[425,149798,52192],{"class":701},[425,149800,1671],{"class":691},[425,149802,5930],{"class":701},[425,149804,149805],{"class":427,"line":770},[425,149806,149755],{"class":701},[425,149808,149809],{"class":427,"line":780},[425,149810,2578],{"class":701},[19,149812,149813],{},"绘制多地区趋势：",[416,149815,149817],{"className":31133,"code":149816,"language":31135,"meta":395,"style":395},"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",[422,149818,149819,149833,149843,149847,149872,149876,149884,149888,149892,149904,149926,149939,149943,149947,149964,149980,149984],{"__ignoreMap":395},[425,149820,149821,149823,149825,149827,149829,149831],{"class":427,"line":428},[425,149822,31492],{"class":1155},[425,149824,148134],{"class":701},[425,149826,31147],{"class":1155},[425,149828,148139],{"class":701},[425,149830,32138],{"class":1155},[425,149832,148144],{"class":701},[425,149834,149835,149837,149839,149841],{"class":427,"line":698},[425,149836,31492],{"class":1155},[425,149838,147993],{"class":701},[425,149840,31147],{"class":1155},[425,149842,147998],{"class":701},[425,149844,149845],{"class":427,"line":710},[425,149846,3400],{"emptyLinePlaceholder":1084},[425,149848,149849,149851,149853,149855,149857,149859,149861,149863,149865,149868,149870],{"class":427,"line":721},[425,149850,148555],{"class":701},[425,149852,1204],{"class":1155},[425,149854,149478],{"class":701},[425,149856,148752],{"class":435},[425,149858,5443],{"class":701},[425,149860,4025],{"class":1155},[425,149862,148964],{"class":701},[425,149864,27034],{"class":1155},[425,149866,149867],{"class":701}," data[",[425,149869,70024],{"class":435},[425,149871,78282],{"class":701},[425,149873,149874],{"class":427,"line":735},[425,149875,3400],{"emptyLinePlaceholder":1084},[425,149877,149878,149880,149882],{"class":427,"line":743},[425,149879,148007],{"class":701},[425,149881,1204],{"class":1155},[425,149883,148012],{"class":701},[425,149885,149886],{"class":427,"line":751},[425,149887,148596],{"class":701},[425,149889,149890],{"class":427,"line":759},[425,149891,3400],{"emptyLinePlaceholder":1084},[425,149893,149894,149896,149899,149901],{"class":427,"line":770},[425,149895,4025],{"class":1155},[425,149897,149898],{"class":701}," city, records ",[425,149900,27034],{"class":1155},[425,149902,149903],{"class":701}," data.items():\n",[425,149905,149906,149909,149911,149913,149915,149917,149919,149921,149923],{"class":427,"line":780},[425,149907,149908],{"class":701},"    values ",[425,149910,1204],{"class":1155},[425,149912,149478],{"class":701},[425,149914,149723],{"class":435},[425,149916,5443],{"class":701},[425,149918,4025],{"class":1155},[425,149920,148964],{"class":701},[425,149922,27034],{"class":1155},[425,149924,149925],{"class":701}," records]\n",[425,149927,149928,149931,149933,149935,149937],{"class":427,"line":790},[425,149929,149930],{"class":701},"    line.add_yaxis(city, values, ",[425,149932,148500],{"class":6216},[425,149934,1204],{"class":1155},[425,149936,32231],{"class":691},[425,149938,1165],{"class":701},[425,149940,149941],{"class":427,"line":805},[425,149942,3400],{"emptyLinePlaceholder":1084},[425,149944,149945],{"class":427,"line":818},[425,149946,148223],{"class":701},[425,149948,149949,149951,149953,149955,149957,149959,149962],{"class":427,"line":831},[425,149950,148228],{"class":6216},[425,149952,1204],{"class":1155},[425,149954,148233],{"class":701},[425,149956,52162],{"class":6216},[425,149958,1204],{"class":1155},[425,149960,149961],{"class":435},"\"多地区趋势图\"",[425,149963,38802],{"class":701},[425,149965,149966,149968,149970,149972,149974,149976,149978],{"class":427,"line":841},[425,149967,148284],{"class":6216},[425,149969,1204],{"class":1155},[425,149971,148289],{"class":701},[425,149973,148292],{"class":6216},[425,149975,1204],{"class":1155},[425,149977,148297],{"class":435},[425,149979,38802],{"class":701},[425,149981,149982],{"class":427,"line":852},[425,149983,1165],{"class":701},[425,149985,149986,149988,149991],{"class":427,"line":862},[425,149987,148079],{"class":701},[425,149989,149990],{"class":435},"\"trend.html\"",[425,149992,1165],{"class":701},[19,149994,149995],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[1099,149997,149999],{"id":149998},"_1012-易错点","10.12 易错点",[972,150001,150002,150008,150014,150024,150030],{},[450,150003,150004,150007],{},[422,150005,150006],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[450,150009,150010,150013],{},[422,150011,150012],{},"render()"," 生成的是 HTML，不是图片。",[450,150015,150016,150017,150020,150021,998],{},"JSON 字符串用 ",[422,150018,150019],{},"json.loads()","，JSON 文件用 ",[422,150022,150023],{},"json.load()",[450,150025,150026,150027,998],{},"中文 JSON 保存时加 ",[422,150028,150029],{},"ensure_ascii=False",[450,150031,150032],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[1099,150034,150036],{"id":150035},"_1013-本章练习","10.13 本章练习",[972,150038,150039,150042,150045,150048,150051],{},[450,150040,150041],{},"安装 pyecharts 并生成第一个折线图。",[450,150043,150044],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[450,150046,150047],{},"绘制两条折线，对比线上和线下销售额。",[450,150049,150050],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[450,150052,150053],{},"对含有空值的销售数据进行清洗后再绘图。",[1074,150055,150056],{},"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":395,"searchDepth":698,"depth":698,"links":150058},[150059,150060,150061,150062,150063,150064,150065,150066,150067,150068,150069,150070,150071],{"id":147675,"depth":698,"text":147676},{"id":147750,"depth":698,"text":147751},{"id":147929,"depth":698,"text":147930},{"id":147980,"depth":698,"text":147981},{"id":148114,"depth":698,"text":148115},{"id":148390,"depth":698,"text":148391},{"id":148516,"depth":698,"text":148517},{"id":148727,"depth":698,"text":148728},{"id":149098,"depth":698,"text":149099},{"id":149310,"depth":698,"text":149311},{"id":149682,"depth":698,"text":149683},{"id":149998,"depth":698,"text":149999},{"id":150035,"depth":698,"text":150036},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147667,"description":24374},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":150078,"title":150079,"body":150080,"description":24374,"extension":1082,"meta":152440,"navigation":1084,"path":152441,"seo":152442,"stem":152443,"__hash__":152444},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":150081,"toc":152417},[150082,150085,150089,150092,150095,150171,150174,150265,150268,150272,150275,150319,150332,150336,150339,150406,150409,150413,150416,150500,150508,150512,150517,150658,150661,150672,150678,150684,150798,150802,150805,150808,151061,151064,151068,151071,151175,151178,151182,151333,151337,151344,151457,151461,151464,151570,151573,151577,151580,151611,151614,151719,151722,151726,151730,151740,151808,151812,151819,151883,151886,151890,151896,151992,152001,152005,152329,152338,152342,152370,152374,152414],[10,150083,150079],{"id":150084},"_11-面向对象基础",[1099,150086,150088],{"id":150087},"_111-什么是面向对象","11.1 什么是面向对象",[19,150090,150091],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,150093,150094],{},"面向过程：",[416,150096,150098],{"className":31133,"code":150097,"language":31135,"meta":395,"style":395},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[422,150099,150100,150109,150117,150121,150131,150162,150166],{"__ignoreMap":395},[425,150101,150102,150104,150106],{"class":427,"line":428},[425,150103,147291],{"class":701},[425,150105,1204],{"class":1155},[425,150107,150108],{"class":435}," \"小明\"\n",[425,150110,150111,150113,150115],{"class":427,"line":698},[425,150112,147301],{"class":701},[425,150114,1204],{"class":1155},[425,150116,147306],{"class":691},[425,150118,150119],{"class":427,"line":710},[425,150120,3400],{"emptyLinePlaceholder":1084},[425,150122,150123,150125,150128],{"class":427,"line":721},[425,150124,32702],{"class":1155},[425,150126,150127],{"class":431}," introduce",[425,150129,150130],{"class":701},"(name, age):\n",[425,150132,150133,150135,150137,150139,150142,150144,150146,150148,150151,150153,150155,150157,150160],{"class":427,"line":735},[425,150134,32054],{"class":691},[425,150136,1159],{"class":701},[425,150138,1210],{"class":1155},[425,150140,150141],{"class":435},"\"我叫",[425,150143,2043],{"class":691},[425,150145,80565],{"class":701},[425,150147,2093],{"class":691},[425,150149,150150],{"class":435},"，今年",[425,150152,2043],{"class":691},[425,150154,70976],{"class":701},[425,150156,2093],{"class":691},[425,150158,150159],{"class":435},"岁\"",[425,150161,1165],{"class":701},[425,150163,150164],{"class":427,"line":743},[425,150165,3400],{"emptyLinePlaceholder":1084},[425,150167,150168],{"class":427,"line":751},[425,150169,150170],{"class":701},"introduce(name, age)\n",[19,150172,150173],{},"面向对象：",[416,150175,150177],{"className":31133,"code":150176,"language":31135,"meta":395,"style":395},"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",[422,150178,150179,150187,150195,150224,150228,150232,150242,150251,150260],{"__ignoreMap":395},[425,150180,150181,150183,150185],{"class":427,"line":428},[425,150182,15691],{"class":1155},[425,150184,8898],{"class":431},[425,150186,4739],{"class":701},[425,150188,150189,150191,150193],{"class":427,"line":698},[425,150190,31556],{"class":1155},[425,150192,150127],{"class":431},[425,150194,31562],{"class":701},[425,150196,150197,150199,150201,150203,150205,150208,150210,150212,150214,150216,150218,150220,150222],{"class":427,"line":710},[425,150198,33206],{"class":691},[425,150200,1159],{"class":701},[425,150202,1210],{"class":1155},[425,150204,150141],{"class":435},[425,150206,150207],{"class":691},"{self",[425,150209,81056],{"class":701},[425,150211,2093],{"class":691},[425,150213,150150],{"class":435},[425,150215,150207],{"class":691},[425,150217,81068],{"class":701},[425,150219,2093],{"class":691},[425,150221,150159],{"class":435},[425,150223,1165],{"class":701},[425,150225,150226],{"class":427,"line":721},[425,150227,3400],{"emptyLinePlaceholder":1084},[425,150229,150230],{"class":427,"line":735},[425,150231,3400],{"emptyLinePlaceholder":1084},[425,150233,150234,150237,150239],{"class":427,"line":743},[425,150235,150236],{"class":701},"student ",[425,150238,1204],{"class":1155},[425,150240,150241],{"class":701}," Student()\n",[425,150243,150244,150247,150249],{"class":427,"line":751},[425,150245,150246],{"class":701},"student.name ",[425,150248,1204],{"class":1155},[425,150250,150108],{"class":435},[425,150252,150253,150256,150258],{"class":427,"line":759},[425,150254,150255],{"class":701},"student.age ",[425,150257,1204],{"class":1155},[425,150259,147306],{"class":691},[425,150261,150262],{"class":427,"line":770},[425,150263,150264],{"class":701},"student.introduce()\n",[19,150266,150267],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[1099,150269,150271],{"id":150270},"_112-类和对象","11.2 类和对象",[19,150273,150274],{},"类是模板，对象是根据模板创建出来的具体实例。",[416,150276,150278],{"className":31133,"code":150277,"language":31135,"meta":395,"style":395},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[422,150279,150280,150288,150293,150297,150301,150310],{"__ignoreMap":395},[425,150281,150282,150284,150286],{"class":427,"line":428},[425,150283,15691],{"class":1155},[425,150285,8898],{"class":431},[425,150287,4739],{"class":701},[425,150289,150290],{"class":427,"line":698},[425,150291,150292],{"class":1155},"    pass\n",[425,150294,150295],{"class":427,"line":710},[425,150296,3400],{"emptyLinePlaceholder":1084},[425,150298,150299],{"class":427,"line":721},[425,150300,3400],{"emptyLinePlaceholder":1084},[425,150302,150303,150306,150308],{"class":427,"line":735},[425,150304,150305],{"class":701},"student1 ",[425,150307,1204],{"class":1155},[425,150309,150241],{"class":701},[425,150311,150312,150315,150317],{"class":427,"line":743},[425,150313,150314],{"class":701},"student2 ",[425,150316,1204],{"class":1155},[425,150318,150241],{"class":701},[19,150320,150321,150324,150325,101773,150328,150331],{},[422,150322,150323],{},"Student"," 是类，",[422,150326,150327],{},"student1",[422,150329,150330],{},"student2"," 是对象。",[1099,150333,150335],{"id":150334},"_113-属性","11.3 属性",[19,150337,150338],{},"属性是对象保存的数据。",[416,150340,150342],{"className":31133,"code":150341,"language":31135,"meta":395,"style":395},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[422,150343,150344,150352,150356,150360,150364,150372,150380,150388,150392,150399],{"__ignoreMap":395},[425,150345,150346,150348,150350],{"class":427,"line":428},[425,150347,15691],{"class":1155},[425,150349,8898],{"class":431},[425,150351,4739],{"class":701},[425,150353,150354],{"class":427,"line":698},[425,150355,150292],{"class":1155},[425,150357,150358],{"class":427,"line":710},[425,150359,3400],{"emptyLinePlaceholder":1084},[425,150361,150362],{"class":427,"line":721},[425,150363,3400],{"emptyLinePlaceholder":1084},[425,150365,150366,150368,150370],{"class":427,"line":735},[425,150367,150236],{"class":701},[425,150369,1204],{"class":1155},[425,150371,150241],{"class":701},[425,150373,150374,150376,150378],{"class":427,"line":743},[425,150375,150246],{"class":701},[425,150377,1204],{"class":1155},[425,150379,150108],{"class":435},[425,150381,150382,150384,150386],{"class":427,"line":751},[425,150383,150255],{"class":701},[425,150385,1204],{"class":1155},[425,150387,147306],{"class":691},[425,150389,150390],{"class":427,"line":759},[425,150391,3400],{"emptyLinePlaceholder":1084},[425,150393,150394,150396],{"class":427,"line":770},[425,150395,31170],{"class":691},[425,150397,150398],{"class":701},"(student.name)\n",[425,150400,150401,150403],{"class":427,"line":780},[425,150402,31170],{"class":691},[425,150404,150405],{"class":701},"(student.age)\n",[19,150407,150408],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[1099,150410,150412],{"id":150411},"_114-方法","11.4 方法",[19,150414,150415],{},"类中的函数叫方法。",[416,150417,150418],{"className":31133,"code":150176,"language":31135,"meta":395,"style":395},[422,150419,150420,150428,150436,150464,150468,150472,150480,150488,150496],{"__ignoreMap":395},[425,150421,150422,150424,150426],{"class":427,"line":428},[425,150423,15691],{"class":1155},[425,150425,8898],{"class":431},[425,150427,4739],{"class":701},[425,150429,150430,150432,150434],{"class":427,"line":698},[425,150431,31556],{"class":1155},[425,150433,150127],{"class":431},[425,150435,31562],{"class":701},[425,150437,150438,150440,150442,150444,150446,150448,150450,150452,150454,150456,150458,150460,150462],{"class":427,"line":710},[425,150439,33206],{"class":691},[425,150441,1159],{"class":701},[425,150443,1210],{"class":1155},[425,150445,150141],{"class":435},[425,150447,150207],{"class":691},[425,150449,81056],{"class":701},[425,150451,2093],{"class":691},[425,150453,150150],{"class":435},[425,150455,150207],{"class":691},[425,150457,81068],{"class":701},[425,150459,2093],{"class":691},[425,150461,150159],{"class":435},[425,150463,1165],{"class":701},[425,150465,150466],{"class":427,"line":721},[425,150467,3400],{"emptyLinePlaceholder":1084},[425,150469,150470],{"class":427,"line":735},[425,150471,3400],{"emptyLinePlaceholder":1084},[425,150473,150474,150476,150478],{"class":427,"line":743},[425,150475,150236],{"class":701},[425,150477,1204],{"class":1155},[425,150479,150241],{"class":701},[425,150481,150482,150484,150486],{"class":427,"line":751},[425,150483,150246],{"class":701},[425,150485,1204],{"class":1155},[425,150487,150108],{"class":435},[425,150489,150490,150492,150494],{"class":427,"line":759},[425,150491,150255],{"class":701},[425,150493,1204],{"class":1155},[425,150495,147306],{"class":691},[425,150497,150498],{"class":427,"line":770},[425,150499,150264],{"class":701},[19,150501,150502,150504,150505,150507],{},[422,150503,31578],{}," 表示当前对象。调用方法时不需要手动传入 ",[422,150506,31578],{},"，Python 会自动传。",[1099,150509,150511],{"id":150510},"_115-构造方法__init__","11.5 构造方法__init__",[19,150513,150514,150516],{},[422,150515,31584],{}," 在对象创建时自动执行，用于初始化属性。",[416,150518,150520],{"className":31133,"code":150519,"language":31135,"meta":395,"style":395},"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",[422,150521,150522,150530,150539,150551,150563,150574,150578,150586,150624,150628,150632,150654],{"__ignoreMap":395},[425,150523,150524,150526,150528],{"class":427,"line":428},[425,150525,15691],{"class":1155},[425,150527,8898],{"class":431},[425,150529,4739],{"class":701},[425,150531,150532,150534,150536],{"class":427,"line":698},[425,150533,31556],{"class":1155},[425,150535,31559],{"class":691},[425,150537,150538],{"class":701},"(self, name, age, score):\n",[425,150540,150541,150543,150546,150548],{"class":427,"line":710},[425,150542,31600],{"class":691},[425,150544,150545],{"class":701},".name ",[425,150547,1204],{"class":1155},[425,150549,150550],{"class":701}," name\n",[425,150552,150553,150555,150558,150560],{"class":427,"line":721},[425,150554,31600],{"class":691},[425,150556,150557],{"class":701},".age ",[425,150559,1204],{"class":1155},[425,150561,150562],{"class":701}," age\n",[425,150564,150565,150567,150570,150572],{"class":427,"line":735},[425,150566,31600],{"class":691},[425,150568,150569],{"class":701},".score ",[425,150571,1204],{"class":1155},[425,150573,2592],{"class":701},[425,150575,150576],{"class":427,"line":743},[425,150577,3400],{"emptyLinePlaceholder":1084},[425,150579,150580,150582,150584],{"class":427,"line":751},[425,150581,31556],{"class":1155},[425,150583,150127],{"class":431},[425,150585,31562],{"class":701},[425,150587,150588,150590,150592,150594,150596,150598,150600,150602,150604,150606,150608,150610,150613,150615,150618,150620,150622],{"class":427,"line":759},[425,150589,33206],{"class":691},[425,150591,1159],{"class":701},[425,150593,1210],{"class":1155},[425,150595,150141],{"class":435},[425,150597,150207],{"class":691},[425,150599,81056],{"class":701},[425,150601,2093],{"class":691},[425,150603,150150],{"class":435},[425,150605,150207],{"class":691},[425,150607,81068],{"class":701},[425,150609,2093],{"class":691},[425,150611,150612],{"class":435},"岁，成绩",[425,150614,150207],{"class":691},[425,150616,150617],{"class":701},".score",[425,150619,2093],{"class":691},[425,150621,1400],{"class":435},[425,150623,1165],{"class":701},[425,150625,150626],{"class":427,"line":770},[425,150627,3400],{"emptyLinePlaceholder":1084},[425,150629,150630],{"class":427,"line":780},[425,150631,3400],{"emptyLinePlaceholder":1084},[425,150633,150634,150636,150638,150641,150644,150646,150648,150650,150652],{"class":427,"line":790},[425,150635,150236],{"class":701},[425,150637,1204],{"class":1155},[425,150639,150640],{"class":701}," Student(",[425,150642,150643],{"class":435},"\"小明\"",[425,150645,13434],{"class":701},[425,150647,1798],{"class":691},[425,150649,13434],{"class":701},[425,150651,2136],{"class":691},[425,150653,1165],{"class":701},[425,150655,150656],{"class":427,"line":805},[425,150657,150264],{"class":701},[19,150659,150660],{},"构造方法的好处：",[972,150662,150663,150666,150669],{},[450,150664,150665],{},"创建对象时必须提供必要数据。",[450,150667,150668],{},"属性初始化集中，不容易漏。",[450,150670,150671],{},"对象状态更完整。",[1099,150673,150675,150676],{"id":150674},"_116-str","11.6 ",[400,150677,2316],{},[19,150679,150680,150681,998],{},"直接打印对象时，默认输出不直观。可以定义 ",[422,150682,150683],{},"__str__",[416,150685,150687],{"className":31133,"code":150686,"language":31135,"meta":395,"style":395},"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",[422,150688,150689,150697,150706,150716,150726,150730,150739,150767,150771,150775,150791],{"__ignoreMap":395},[425,150690,150691,150693,150695],{"class":427,"line":428},[425,150692,15691],{"class":1155},[425,150694,8898],{"class":431},[425,150696,4739],{"class":701},[425,150698,150699,150701,150703],{"class":427,"line":698},[425,150700,31556],{"class":1155},[425,150702,31559],{"class":691},[425,150704,150705],{"class":701},"(self, name, age):\n",[425,150707,150708,150710,150712,150714],{"class":427,"line":710},[425,150709,31600],{"class":691},[425,150711,150545],{"class":701},[425,150713,1204],{"class":1155},[425,150715,150550],{"class":701},[425,150717,150718,150720,150722,150724],{"class":427,"line":721},[425,150719,31600],{"class":691},[425,150721,150557],{"class":701},[425,150723,1204],{"class":1155},[425,150725,150562],{"class":701},[425,150727,150728],{"class":427,"line":735},[425,150729,3400],{"emptyLinePlaceholder":1084},[425,150731,150732,150734,150737],{"class":427,"line":743},[425,150733,31556],{"class":1155},[425,150735,150736],{"class":691}," __str__",[425,150738,31562],{"class":701},[425,150740,150741,150743,150746,150749,150751,150753,150755,150758,150760,150762,150764],{"class":427,"line":751},[425,150742,15749],{"class":1155},[425,150744,150745],{"class":1155}," f",[425,150747,150748],{"class":435},"\"Student(name=",[425,150750,150207],{"class":691},[425,150752,81056],{"class":701},[425,150754,2093],{"class":691},[425,150756,150757],{"class":435},", age=",[425,150759,150207],{"class":691},[425,150761,81068],{"class":701},[425,150763,2093],{"class":691},[425,150765,150766],{"class":435},")\"\n",[425,150768,150769],{"class":427,"line":759},[425,150770,3400],{"emptyLinePlaceholder":1084},[425,150772,150773],{"class":427,"line":770},[425,150774,3400],{"emptyLinePlaceholder":1084},[425,150776,150777,150779,150781,150783,150785,150787,150789],{"class":427,"line":780},[425,150778,150236],{"class":701},[425,150780,1204],{"class":1155},[425,150782,150640],{"class":701},[425,150784,150643],{"class":435},[425,150786,13434],{"class":701},[425,150788,1798],{"class":691},[425,150790,1165],{"class":701},[425,150792,150793,150795],{"class":427,"line":790},[425,150794,31170],{"class":691},[425,150796,150797],{"class":701},"(student)\n",[1099,150799,150801],{"id":150800},"_117-封装","11.7 封装",[19,150803,150804],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,150806,150807],{},"Python 中以双下划线开头的属性通常视为私有属性。",[416,150809,150811],{"className":31133,"code":150810,"language":31135,"meta":395,"style":395},"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",[422,150812,150813,150822,150831,150843,150855,150859,150868,150877,150881,150891,150904,150915,150920,150931,150935,150944,150956,150967,150971,150984,150995,150999,151010,151014,151018,151036,151045,151054],{"__ignoreMap":395},[425,150814,150815,150817,150820],{"class":427,"line":428},[425,150816,15691],{"class":1155},[425,150818,150819],{"class":431}," Account",[425,150821,4739],{"class":701},[425,150823,150824,150826,150828],{"class":427,"line":698},[425,150825,31556],{"class":1155},[425,150827,31559],{"class":691},[425,150829,150830],{"class":701},"(self, owner, balance):\n",[425,150832,150833,150835,150838,150840],{"class":427,"line":710},[425,150834,31600],{"class":691},[425,150836,150837],{"class":701},".owner ",[425,150839,1204],{"class":1155},[425,150841,150842],{"class":701}," owner\n",[425,150844,150845,150847,150850,150852],{"class":427,"line":721},[425,150846,31600],{"class":691},[425,150848,150849],{"class":701},".__balance ",[425,150851,1204],{"class":1155},[425,150853,150854],{"class":701}," balance\n",[425,150856,150857],{"class":427,"line":735},[425,150858,3400],{"emptyLinePlaceholder":1084},[425,150860,150861,150863,150866],{"class":427,"line":743},[425,150862,31556],{"class":1155},[425,150864,150865],{"class":431}," get_balance",[425,150867,31562],{"class":701},[425,150869,150870,150872,150874],{"class":427,"line":751},[425,150871,15749],{"class":1155},[425,150873,39628],{"class":691},[425,150875,150876],{"class":701},".__balance\n",[425,150878,150879],{"class":427,"line":759},[425,150880,3400],{"emptyLinePlaceholder":1084},[425,150882,150883,150885,150888],{"class":427,"line":770},[425,150884,31556],{"class":1155},[425,150886,150887],{"class":431}," deposit",[425,150889,150890],{"class":701},"(self, money):\n",[425,150892,150893,150895,150898,150900,150902],{"class":427,"line":780},[425,150894,3497],{"class":1155},[425,150896,150897],{"class":701}," money ",[425,150899,2601],{"class":1155},[425,150901,5093],{"class":691},[425,150903,4739],{"class":701},[425,150905,150906,150908,150910,150913],{"class":427,"line":790},[425,150907,35405],{"class":691},[425,150909,1159],{"class":701},[425,150911,150912],{"class":435},"\"存款金额必须大于0\"",[425,150914,1165],{"class":701},[425,150916,150917],{"class":427,"line":805},[425,150918,150919],{"class":1155},"            return\n",[425,150921,150922,150924,150926,150928],{"class":427,"line":818},[425,150923,31600],{"class":691},[425,150925,150849],{"class":701},[425,150927,10476],{"class":1155},[425,150929,150930],{"class":701}," money\n",[425,150932,150933],{"class":427,"line":831},[425,150934,3400],{"emptyLinePlaceholder":1084},[425,150936,150937,150939,150942],{"class":427,"line":841},[425,150938,31556],{"class":1155},[425,150940,150941],{"class":431}," withdraw",[425,150943,150890],{"class":701},[425,150945,150946,150948,150950,150952,150954],{"class":427,"line":852},[425,150947,3497],{"class":1155},[425,150949,150897],{"class":701},[425,150951,2601],{"class":1155},[425,150953,5093],{"class":691},[425,150955,4739],{"class":701},[425,150957,150958,150960,150962,150965],{"class":427,"line":862},[425,150959,35405],{"class":691},[425,150961,1159],{"class":701},[425,150963,150964],{"class":435},"\"取款金额必须大于0\"",[425,150966,1165],{"class":701},[425,150968,150969],{"class":427,"line":878},[425,150970,150919],{"class":1155},[425,150972,150973,150975,150977,150979,150981],{"class":427,"line":914},[425,150974,3497],{"class":1155},[425,150976,150897],{"class":701},[425,150978,2107],{"class":1155},[425,150980,39628],{"class":691},[425,150982,150983],{"class":701},".__balance:\n",[425,150985,150986,150988,150990,150993],{"class":427,"line":943},[425,150987,35405],{"class":691},[425,150989,1159],{"class":701},[425,150991,150992],{"class":435},"\"余额不足\"",[425,150994,1165],{"class":701},[425,150996,150997],{"class":427,"line":956},[425,150998,150919],{"class":1155},[425,151000,151001,151003,151005,151008],{"class":427,"line":964},[425,151002,31600],{"class":691},[425,151004,150849],{"class":701},[425,151006,151007],{"class":1155},"-=",[425,151009,150930],{"class":701},[425,151011,151012],{"class":427,"line":2733},[425,151013,3400],{"emptyLinePlaceholder":1084},[425,151015,151016],{"class":427,"line":2750},[425,151017,3400],{"emptyLinePlaceholder":1084},[425,151019,151020,151023,151025,151028,151030,151032,151034],{"class":427,"line":2755},[425,151021,151022],{"class":701},"account ",[425,151024,1204],{"class":1155},[425,151026,151027],{"class":701}," Account(",[425,151029,150643],{"class":435},[425,151031,13434],{"class":701},[425,151033,7410],{"class":691},[425,151035,1165],{"class":701},[425,151037,151038,151041,151043],{"class":427,"line":2760},[425,151039,151040],{"class":701},"account.deposit(",[425,151042,2724],{"class":691},[425,151044,1165],{"class":701},[425,151046,151047,151050,151052],{"class":427,"line":2765},[425,151048,151049],{"class":701},"account.withdraw(",[425,151051,1460],{"class":691},[425,151053,1165],{"class":701},[425,151055,151056,151058],{"class":427,"line":2779},[425,151057,31170],{"class":691},[425,151059,151060],{"class":701},"(account.get_balance())\n",[19,151062,151063],{},"封装的意义是避免外部随意修改内部状态。",[1099,151065,151067],{"id":151066},"_118-继承","11.8 继承",[19,151069,151070],{},"继承可以让子类复用父类的属性和方法。",[416,151072,151074],{"className":31133,"code":151073,"language":31135,"meta":395,"style":395},"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",[422,151075,151076,151085,151094,151105,151109,151113,151127,151136,151147,151151,151155,151165,151170],{"__ignoreMap":395},[425,151077,151078,151080,151083],{"class":427,"line":428},[425,151079,15691],{"class":1155},[425,151081,151082],{"class":431}," Animal",[425,151084,4739],{"class":701},[425,151086,151087,151089,151092],{"class":427,"line":698},[425,151088,31556],{"class":1155},[425,151090,151091],{"class":431}," eat",[425,151093,31562],{"class":701},[425,151095,151096,151098,151100,151103],{"class":427,"line":710},[425,151097,33206],{"class":691},[425,151099,1159],{"class":701},[425,151101,151102],{"class":435},"\"吃东西\"",[425,151104,1165],{"class":701},[425,151106,151107],{"class":427,"line":721},[425,151108,3400],{"emptyLinePlaceholder":1084},[425,151110,151111],{"class":427,"line":735},[425,151112,3400],{"emptyLinePlaceholder":1084},[425,151114,151115,151117,151120,151122,151125],{"class":427,"line":743},[425,151116,15691],{"class":1155},[425,151118,151119],{"class":431}," Dog",[425,151121,1159],{"class":701},[425,151123,151124],{"class":431},"Animal",[425,151126,31541],{"class":701},[425,151128,151129,151131,151134],{"class":427,"line":751},[425,151130,31556],{"class":1155},[425,151132,151133],{"class":431}," bark",[425,151135,31562],{"class":701},[425,151137,151138,151140,151142,151145],{"class":427,"line":759},[425,151139,33206],{"class":691},[425,151141,1159],{"class":701},[425,151143,151144],{"class":435},"\"汪汪\"",[425,151146,1165],{"class":701},[425,151148,151149],{"class":427,"line":770},[425,151150,3400],{"emptyLinePlaceholder":1084},[425,151152,151153],{"class":427,"line":780},[425,151154,3400],{"emptyLinePlaceholder":1084},[425,151156,151157,151160,151162],{"class":427,"line":790},[425,151158,151159],{"class":701},"dog ",[425,151161,1204],{"class":1155},[425,151163,151164],{"class":701}," Dog()\n",[425,151166,151167],{"class":427,"line":805},[425,151168,151169],{"class":701},"dog.eat()\n",[425,151171,151172],{"class":427,"line":818},[425,151173,151174],{"class":701},"dog.bark()\n",[19,151176,151177],{},"子类可以扩展新方法，也可以重写父类方法。",[1099,151179,151181],{"id":151180},"_119-方法重写","11.9 方法重写",[416,151183,151185],{"className":31133,"code":151184,"language":31135,"meta":395,"style":395},"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",[422,151186,151187,151195,151204,151215,151219,151223,151235,151243,151253,151257,151261,151274,151282,151293,151297,151301,151309,151319,151323,151328],{"__ignoreMap":395},[425,151188,151189,151191,151193],{"class":427,"line":428},[425,151190,15691],{"class":1155},[425,151192,151082],{"class":431},[425,151194,4739],{"class":701},[425,151196,151197,151199,151202],{"class":427,"line":698},[425,151198,31556],{"class":1155},[425,151200,151201],{"class":431}," speak",[425,151203,31562],{"class":701},[425,151205,151206,151208,151210,151213],{"class":427,"line":710},[425,151207,33206],{"class":691},[425,151209,1159],{"class":701},[425,151211,151212],{"class":435},"\"动物叫\"",[425,151214,1165],{"class":701},[425,151216,151217],{"class":427,"line":721},[425,151218,3400],{"emptyLinePlaceholder":1084},[425,151220,151221],{"class":427,"line":735},[425,151222,3400],{"emptyLinePlaceholder":1084},[425,151224,151225,151227,151229,151231,151233],{"class":427,"line":743},[425,151226,15691],{"class":1155},[425,151228,151119],{"class":431},[425,151230,1159],{"class":701},[425,151232,151124],{"class":431},[425,151234,31541],{"class":701},[425,151236,151237,151239,151241],{"class":427,"line":751},[425,151238,31556],{"class":1155},[425,151240,151201],{"class":431},[425,151242,31562],{"class":701},[425,151244,151245,151247,151249,151251],{"class":427,"line":759},[425,151246,33206],{"class":691},[425,151248,1159],{"class":701},[425,151250,151144],{"class":435},[425,151252,1165],{"class":701},[425,151254,151255],{"class":427,"line":770},[425,151256,3400],{"emptyLinePlaceholder":1084},[425,151258,151259],{"class":427,"line":780},[425,151260,3400],{"emptyLinePlaceholder":1084},[425,151262,151263,151265,151268,151270,151272],{"class":427,"line":790},[425,151264,15691],{"class":1155},[425,151266,151267],{"class":431}," Cat",[425,151269,1159],{"class":701},[425,151271,151124],{"class":431},[425,151273,31541],{"class":701},[425,151275,151276,151278,151280],{"class":427,"line":805},[425,151277,31556],{"class":1155},[425,151279,151201],{"class":431},[425,151281,31562],{"class":701},[425,151283,151284,151286,151288,151291],{"class":427,"line":818},[425,151285,33206],{"class":691},[425,151287,1159],{"class":701},[425,151289,151290],{"class":435},"\"喵喵\"",[425,151292,1165],{"class":701},[425,151294,151295],{"class":427,"line":831},[425,151296,3400],{"emptyLinePlaceholder":1084},[425,151298,151299],{"class":427,"line":841},[425,151300,3400],{"emptyLinePlaceholder":1084},[425,151302,151303,151305,151307],{"class":427,"line":852},[425,151304,151159],{"class":701},[425,151306,1204],{"class":1155},[425,151308,151164],{"class":701},[425,151310,151311,151314,151316],{"class":427,"line":862},[425,151312,151313],{"class":701},"cat ",[425,151315,1204],{"class":1155},[425,151317,151318],{"class":701}," Cat()\n",[425,151320,151321],{"class":427,"line":878},[425,151322,3400],{"emptyLinePlaceholder":1084},[425,151324,151325],{"class":427,"line":914},[425,151326,151327],{"class":701},"dog.speak()\n",[425,151329,151330],{"class":427,"line":943},[425,151331,151332],{"class":701},"cat.speak()\n",[1099,151334,151336],{"id":151335},"_1110-super","11.10 super",[19,151338,151339,151340,151343],{},"子类可以通过 ",[422,151341,151342],{},"super()"," 调用父类方法。",[416,151345,151347],{"className":31133,"code":151346,"language":31135,"meta":395,"style":395},"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",[422,151348,151349,151357,151366,151376,151380,151384,151396,151405,151416,151426,151430,151434,151450],{"__ignoreMap":395},[425,151350,151351,151353,151355],{"class":427,"line":428},[425,151352,15691],{"class":1155},[425,151354,16566],{"class":431},[425,151356,4739],{"class":701},[425,151358,151359,151361,151363],{"class":427,"line":698},[425,151360,31556],{"class":1155},[425,151362,31559],{"class":691},[425,151364,151365],{"class":701},"(self, name):\n",[425,151367,151368,151370,151372,151374],{"class":427,"line":710},[425,151369,31600],{"class":691},[425,151371,150545],{"class":701},[425,151373,1204],{"class":1155},[425,151375,150550],{"class":701},[425,151377,151378],{"class":427,"line":721},[425,151379,3400],{"emptyLinePlaceholder":1084},[425,151381,151382],{"class":427,"line":735},[425,151383,3400],{"emptyLinePlaceholder":1084},[425,151385,151386,151388,151390,151392,151394],{"class":427,"line":743},[425,151387,15691],{"class":1155},[425,151389,8898],{"class":431},[425,151391,1159],{"class":701},[425,151393,20043],{"class":431},[425,151395,31541],{"class":701},[425,151397,151398,151400,151402],{"class":427,"line":751},[425,151399,31556],{"class":1155},[425,151401,31559],{"class":691},[425,151403,151404],{"class":701},"(self, name, score):\n",[425,151406,151407,151409,151411,151413],{"class":427,"line":759},[425,151408,31572],{"class":691},[425,151410,18258],{"class":701},[425,151412,31584],{"class":691},[425,151414,151415],{"class":701},"(name)\n",[425,151417,151418,151420,151422,151424],{"class":427,"line":770},[425,151419,31600],{"class":691},[425,151421,150569],{"class":701},[425,151423,1204],{"class":1155},[425,151425,2592],{"class":701},[425,151427,151428],{"class":427,"line":780},[425,151429,3400],{"emptyLinePlaceholder":1084},[425,151431,151432],{"class":427,"line":790},[425,151433,3400],{"emptyLinePlaceholder":1084},[425,151435,151436,151438,151440,151442,151444,151446,151448],{"class":427,"line":805},[425,151437,150236],{"class":701},[425,151439,1204],{"class":1155},[425,151441,150640],{"class":701},[425,151443,150643],{"class":435},[425,151445,13434],{"class":701},[425,151447,2136],{"class":691},[425,151449,1165],{"class":701},[425,151451,151452,151454],{"class":427,"line":818},[425,151453,31170],{"class":691},[425,151455,151456],{"class":701},"(student.name, student.score)\n",[1099,151458,151460],{"id":151459},"_1111-多态","11.11 多态",[19,151462,151463],{},"多态指不同对象响应同一个方法，表现出不同结果。",[416,151465,151467],{"className":31133,"code":151466,"language":31135,"meta":395,"style":395},"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",[422,151468,151469,151477,151485,151495,151499,151503,151511,151519,151529,151533,151537,151547,151552,151556,151560,151565],{"__ignoreMap":395},[425,151470,151471,151473,151475],{"class":427,"line":428},[425,151472,15691],{"class":1155},[425,151474,151119],{"class":431},[425,151476,4739],{"class":701},[425,151478,151479,151481,151483],{"class":427,"line":698},[425,151480,31556],{"class":1155},[425,151482,151201],{"class":431},[425,151484,31562],{"class":701},[425,151486,151487,151489,151491,151493],{"class":427,"line":710},[425,151488,33206],{"class":691},[425,151490,1159],{"class":701},[425,151492,151144],{"class":435},[425,151494,1165],{"class":701},[425,151496,151497],{"class":427,"line":721},[425,151498,3400],{"emptyLinePlaceholder":1084},[425,151500,151501],{"class":427,"line":735},[425,151502,3400],{"emptyLinePlaceholder":1084},[425,151504,151505,151507,151509],{"class":427,"line":743},[425,151506,15691],{"class":1155},[425,151508,151267],{"class":431},[425,151510,4739],{"class":701},[425,151512,151513,151515,151517],{"class":427,"line":751},[425,151514,31556],{"class":1155},[425,151516,151201],{"class":431},[425,151518,31562],{"class":701},[425,151520,151521,151523,151525,151527],{"class":427,"line":759},[425,151522,33206],{"class":691},[425,151524,1159],{"class":701},[425,151526,151290],{"class":435},[425,151528,1165],{"class":701},[425,151530,151531],{"class":427,"line":770},[425,151532,3400],{"emptyLinePlaceholder":1084},[425,151534,151535],{"class":427,"line":780},[425,151536,3400],{"emptyLinePlaceholder":1084},[425,151538,151539,151541,151544],{"class":427,"line":790},[425,151540,32702],{"class":1155},[425,151542,151543],{"class":431}," make_sound",[425,151545,151546],{"class":701},"(animal):\n",[425,151548,151549],{"class":427,"line":805},[425,151550,151551],{"class":701},"    animal.speak()\n",[425,151553,151554],{"class":427,"line":818},[425,151555,3400],{"emptyLinePlaceholder":1084},[425,151557,151558],{"class":427,"line":831},[425,151559,3400],{"emptyLinePlaceholder":1084},[425,151561,151562],{"class":427,"line":841},[425,151563,151564],{"class":701},"make_sound(Dog())\n",[425,151566,151567],{"class":427,"line":852},[425,151568,151569],{"class":701},"make_sound(Cat())\n",[19,151571,151572],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[1099,151574,151576],{"id":151575},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,151578,151579],{},"实例属性属于对象：",[416,151581,151583],{"className":31133,"code":151582,"language":31135,"meta":395,"style":395},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[422,151584,151585,151593,151601],{"__ignoreMap":395},[425,151586,151587,151589,151591],{"class":427,"line":428},[425,151588,15691],{"class":1155},[425,151590,8898],{"class":431},[425,151592,4739],{"class":701},[425,151594,151595,151597,151599],{"class":427,"line":698},[425,151596,31556],{"class":1155},[425,151598,31559],{"class":691},[425,151600,151365],{"class":701},[425,151602,151603,151605,151607,151609],{"class":427,"line":710},[425,151604,31600],{"class":691},[425,151606,150545],{"class":701},[425,151608,1204],{"class":1155},[425,151610,150550],{"class":701},[19,151612,151613],{},"类属性属于类，所有对象共享：",[416,151615,151617],{"className":31133,"code":151616,"language":31135,"meta":395,"style":395},"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",[422,151618,151619,151627,151637,151641,151649,151659,151663,151667,151680,151694,151698,151705,151712],{"__ignoreMap":395},[425,151620,151621,151623,151625],{"class":427,"line":428},[425,151622,15691],{"class":1155},[425,151624,8898],{"class":431},[425,151626,4739],{"class":701},[425,151628,151629,151632,151634],{"class":427,"line":698},[425,151630,151631],{"class":701},"    school ",[425,151633,1204],{"class":1155},[425,151635,151636],{"class":435}," \"黑马学校\"\n",[425,151638,151639],{"class":427,"line":710},[425,151640,3400],{"emptyLinePlaceholder":1084},[425,151642,151643,151645,151647],{"class":427,"line":721},[425,151644,31556],{"class":1155},[425,151646,31559],{"class":691},[425,151648,151365],{"class":701},[425,151650,151651,151653,151655,151657],{"class":427,"line":735},[425,151652,31600],{"class":691},[425,151654,150545],{"class":701},[425,151656,1204],{"class":1155},[425,151658,150550],{"class":701},[425,151660,151661],{"class":427,"line":743},[425,151662,3400],{"emptyLinePlaceholder":1084},[425,151664,151665],{"class":427,"line":751},[425,151666,3400],{"emptyLinePlaceholder":1084},[425,151668,151669,151672,151674,151676,151678],{"class":427,"line":759},[425,151670,151671],{"class":701},"s1 ",[425,151673,1204],{"class":1155},[425,151675,150640],{"class":701},[425,151677,150643],{"class":435},[425,151679,1165],{"class":701},[425,151681,151682,151685,151687,151689,151692],{"class":427,"line":770},[425,151683,151684],{"class":701},"s2 ",[425,151686,1204],{"class":1155},[425,151688,150640],{"class":701},[425,151690,151691],{"class":435},"\"小红\"",[425,151693,1165],{"class":701},[425,151695,151696],{"class":427,"line":780},[425,151697,3400],{"emptyLinePlaceholder":1084},[425,151699,151700,151702],{"class":427,"line":790},[425,151701,31170],{"class":691},[425,151703,151704],{"class":701},"(s1.school)\n",[425,151706,151707,151709],{"class":427,"line":805},[425,151708,31170],{"class":691},[425,151710,151711],{"class":701},"(s2.school)\n",[425,151713,151714,151716],{"class":427,"line":818},[425,151715,31170],{"class":691},[425,151717,151718],{"class":701},"(Student.school)\n",[19,151720,151721],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[1099,151723,151725],{"id":151724},"_1113-类方法和静态方法","11.13 类方法和静态方法",[14,151727,151729],{"id":151728},"_11131-类方法","11.13.1 类方法",[19,151731,151732,151733,151736,151737,998],{},"类方法使用 ",[422,151734,151735],{},"@classmethod","，第一个参数通常是 ",[422,151738,151739],{},"cls",[416,151741,151743],{"className":31133,"code":151742,"language":31135,"meta":395,"style":395},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[422,151744,151745,151753,151761,151765,151773,151783,151793,151797,151801],{"__ignoreMap":395},[425,151746,151747,151749,151751],{"class":427,"line":428},[425,151748,15691],{"class":1155},[425,151750,8898],{"class":431},[425,151752,4739],{"class":701},[425,151754,151755,151757,151759],{"class":427,"line":698},[425,151756,151631],{"class":701},[425,151758,1204],{"class":1155},[425,151760,151636],{"class":435},[425,151762,151763],{"class":427,"line":710},[425,151764,3400],{"emptyLinePlaceholder":1084},[425,151766,151767,151770],{"class":427,"line":721},[425,151768,151769],{"class":431},"    @",[425,151771,151772],{"class":691},"classmethod\n",[425,151774,151775,151777,151780],{"class":427,"line":735},[425,151776,31556],{"class":1155},[425,151778,151779],{"class":431}," get_school",[425,151781,151782],{"class":701},"(cls):\n",[425,151784,151785,151787,151790],{"class":427,"line":743},[425,151786,15749],{"class":1155},[425,151788,151789],{"class":691}," cls",[425,151791,151792],{"class":701},".school\n",[425,151794,151795],{"class":427,"line":751},[425,151796,3400],{"emptyLinePlaceholder":1084},[425,151798,151799],{"class":427,"line":759},[425,151800,3400],{"emptyLinePlaceholder":1084},[425,151802,151803,151805],{"class":427,"line":770},[425,151804,31170],{"class":691},[425,151806,151807],{"class":701},"(Student.get_school())\n",[14,151809,151811],{"id":151810},"_11132-静态方法","11.13.2 静态方法",[19,151813,151814,151815,151818],{},"静态方法使用 ",[422,151816,151817],{},"@staticmethod","，不需要访问实例和类。",[416,151820,151822],{"className":31133,"code":151821,"language":31135,"meta":395,"style":395},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[422,151823,151824,151833,151840,151849,151860,151864,151868],{"__ignoreMap":395},[425,151825,151826,151828,151831],{"class":427,"line":428},[425,151827,15691],{"class":1155},[425,151829,151830],{"class":431}," MathUtils",[425,151832,4739],{"class":701},[425,151834,151835,151837],{"class":427,"line":698},[425,151836,151769],{"class":431},[425,151838,151839],{"class":691},"staticmethod\n",[425,151841,151842,151844,151846],{"class":427,"line":710},[425,151843,31556],{"class":1155},[425,151845,6209],{"class":431},[425,151847,151848],{"class":701},"(a, b):\n",[425,151850,151851,151853,151855,151857],{"class":427,"line":721},[425,151852,15749],{"class":1155},[425,151854,11868],{"class":701},[425,151856,1629],{"class":1155},[425,151858,151859],{"class":701}," b\n",[425,151861,151862],{"class":427,"line":735},[425,151863,3400],{"emptyLinePlaceholder":1084},[425,151865,151866],{"class":427,"line":743},[425,151867,3400],{"emptyLinePlaceholder":1084},[425,151869,151870,151872,151875,151877,151879,151881],{"class":427,"line":751},[425,151871,31170],{"class":691},[425,151873,151874],{"class":701},"(MathUtils.add(",[425,151876,1367],{"class":691},[425,151878,13434],{"class":701},[425,151880,1235],{"class":691},[425,151882,31252],{"class":701},[19,151884,151885],{},"静态方法本质上是放在类命名空间里的普通函数。",[1099,151887,151889],{"id":151888},"_1114-dataclass","11.14 dataclass",[19,151891,151892,151895],{},[422,151893,151894],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[416,151897,151899],{"className":31133,"code":151898,"language":31135,"meta":395,"style":395},"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",[422,151900,151901,151913,151917,151921,151926,151934,151942,151950,151958,151962,151966,151986],{"__ignoreMap":395},[425,151902,151903,151905,151908,151910],{"class":427,"line":428},[425,151904,31492],{"class":1155},[425,151906,151907],{"class":701}," dataclasses ",[425,151909,31147],{"class":1155},[425,151911,151912],{"class":701}," dataclass\n",[425,151914,151915],{"class":427,"line":698},[425,151916,3400],{"emptyLinePlaceholder":1084},[425,151918,151919],{"class":427,"line":710},[425,151920,3400],{"emptyLinePlaceholder":1084},[425,151922,151923],{"class":427,"line":721},[425,151924,151925],{"class":431},"@dataclass\n",[425,151927,151928,151930,151932],{"class":427,"line":735},[425,151929,15691],{"class":1155},[425,151931,8898],{"class":431},[425,151933,4739],{"class":701},[425,151935,151936,151939],{"class":427,"line":743},[425,151937,151938],{"class":701},"    name: ",[425,151940,151941],{"class":691},"str\n",[425,151943,151944,151947],{"class":427,"line":751},[425,151945,151946],{"class":701},"    age: ",[425,151948,151949],{"class":691},"int\n",[425,151951,151952,151955],{"class":427,"line":759},[425,151953,151954],{"class":701},"    score: ",[425,151956,151957],{"class":691},"float\n",[425,151959,151960],{"class":427,"line":770},[425,151961,3400],{"emptyLinePlaceholder":1084},[425,151963,151964],{"class":427,"line":780},[425,151965,3400],{"emptyLinePlaceholder":1084},[425,151967,151968,151970,151972,151974,151976,151978,151980,151982,151984],{"class":427,"line":790},[425,151969,150236],{"class":701},[425,151971,1204],{"class":1155},[425,151973,150640],{"class":701},[425,151975,150643],{"class":435},[425,151977,13434],{"class":701},[425,151979,1798],{"class":691},[425,151981,13434],{"class":701},[425,151983,2136],{"class":691},[425,151985,1165],{"class":701},[425,151987,151988,151990],{"class":427,"line":805},[425,151989,31170],{"class":691},[425,151991,150797],{"class":701},[19,151993,151994,151995,1362,151997,152000],{},"它会自动生成 ",[422,151996,31584],{},[422,151998,151999],{},"__repr__"," 等方法。适合数据模型类。",[1099,152002,152004],{"id":152003},"_1115-小案例学生类","11.15 小案例：学生类",[416,152006,152008],{"className":31133,"code":152007,"language":31135,"meta":395,"style":395},"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",[422,152009,152010,152018,152027,152039,152049,152059,152069,152073,152082,152095,152099,152108,152114,152126,152138,152150,152162,152166,152170,152176,152186,152195,152205,152213,152221,152230,152234,152238,152246,152282,152286,152290,152315,152322],{"__ignoreMap":395},[425,152011,152012,152014,152016],{"class":427,"line":428},[425,152013,15691],{"class":1155},[425,152015,8898],{"class":431},[425,152017,4739],{"class":701},[425,152019,152020,152022,152024],{"class":427,"line":698},[425,152021,31556],{"class":1155},[425,152023,31559],{"class":691},[425,152025,152026],{"class":701},"(self, student_id, name, age, score):\n",[425,152028,152029,152031,152034,152036],{"class":427,"line":710},[425,152030,31600],{"class":691},[425,152032,152033],{"class":701},".student_id ",[425,152035,1204],{"class":1155},[425,152037,152038],{"class":701}," student_id\n",[425,152040,152041,152043,152045,152047],{"class":427,"line":721},[425,152042,31600],{"class":691},[425,152044,150545],{"class":701},[425,152046,1204],{"class":1155},[425,152048,150550],{"class":701},[425,152050,152051,152053,152055,152057],{"class":427,"line":735},[425,152052,31600],{"class":691},[425,152054,150557],{"class":701},[425,152056,1204],{"class":1155},[425,152058,150562],{"class":701},[425,152060,152061,152063,152065,152067],{"class":427,"line":743},[425,152062,31600],{"class":691},[425,152064,150569],{"class":701},[425,152066,1204],{"class":1155},[425,152068,2592],{"class":701},[425,152070,152071],{"class":427,"line":751},[425,152072,3400],{"emptyLinePlaceholder":1084},[425,152074,152075,152077,152080],{"class":427,"line":759},[425,152076,31556],{"class":1155},[425,152078,152079],{"class":431}," is_passed",[425,152081,31562],{"class":701},[425,152083,152084,152086,152088,152090,152092],{"class":427,"line":770},[425,152085,15749],{"class":1155},[425,152087,39628],{"class":691},[425,152089,150569],{"class":701},[425,152091,2712],{"class":1155},[425,152093,152094],{"class":691}," 60\n",[425,152096,152097],{"class":427,"line":780},[425,152098,3400],{"emptyLinePlaceholder":1084},[425,152100,152101,152103,152106],{"class":427,"line":790},[425,152102,31556],{"class":1155},[425,152104,152105],{"class":431}," to_dict",[425,152107,31562],{"class":701},[425,152109,152110,152112],{"class":427,"line":805},[425,152111,15749],{"class":1155},[425,152113,16569],{"class":701},[425,152115,152116,152119,152121,152123],{"class":427,"line":818},[425,152117,152118],{"class":435},"            \"student_id\"",[425,152120,52192],{"class":701},[425,152122,31578],{"class":691},[425,152124,152125],{"class":701},".student_id,\n",[425,152127,152128,152131,152133,152135],{"class":427,"line":831},[425,152129,152130],{"class":435},"            \"name\"",[425,152132,52192],{"class":701},[425,152134,31578],{"class":691},[425,152136,152137],{"class":701},".name,\n",[425,152139,152140,152143,152145,152147],{"class":427,"line":841},[425,152141,152142],{"class":435},"            \"age\"",[425,152144,52192],{"class":701},[425,152146,31578],{"class":691},[425,152148,152149],{"class":701},".age,\n",[425,152151,152152,152155,152157,152159],{"class":427,"line":852},[425,152153,152154],{"class":435},"            \"score\"",[425,152156,52192],{"class":701},[425,152158,31578],{"class":691},[425,152160,152161],{"class":701},".score,\n",[425,152163,152164],{"class":427,"line":862},[425,152165,3529],{"class":701},[425,152167,152168],{"class":427,"line":878},[425,152169,3400],{"emptyLinePlaceholder":1084},[425,152171,152172,152174],{"class":427,"line":914},[425,152173,151769],{"class":431},[425,152175,151772],{"class":691},[425,152177,152178,152180,152183],{"class":427,"line":943},[425,152179,31556],{"class":1155},[425,152181,152182],{"class":431}," from_dict",[425,152184,152185],{"class":701},"(cls, data):\n",[425,152187,152188,152190,152192],{"class":427,"line":956},[425,152189,15749],{"class":1155},[425,152191,151789],{"class":691},[425,152193,152194],{"class":701},"(\n",[425,152196,152197,152200,152203],{"class":427,"line":964},[425,152198,152199],{"class":701},"            data[",[425,152201,152202],{"class":435},"\"student_id\"",[425,152204,88591],{"class":701},[425,152206,152207,152209,152211],{"class":427,"line":2733},[425,152208,152199],{"class":701},[425,152210,63434],{"class":435},[425,152212,88591],{"class":701},[425,152214,152215,152217,152219],{"class":427,"line":2750},[425,152216,152199],{"class":701},[425,152218,69879],{"class":435},[425,152220,88591],{"class":701},[425,152222,152223,152225,152228],{"class":427,"line":2755},[425,152224,152199],{"class":701},[425,152226,152227],{"class":435},"\"score\"",[425,152229,88591],{"class":701},[425,152231,152232],{"class":427,"line":2760},[425,152233,38881],{"class":701},[425,152235,152236],{"class":427,"line":2765},[425,152237,3400],{"emptyLinePlaceholder":1084},[425,152239,152240,152242,152244],{"class":427,"line":2779},[425,152241,31556],{"class":1155},[425,152243,150736],{"class":691},[425,152245,31562],{"class":701},[425,152247,152248,152250,152252,152254,152256,152259,152261,152264,152266,152268,152270,152272,152274,152276,152278,152280],{"class":427,"line":2784},[425,152249,15749],{"class":1155},[425,152251,150745],{"class":1155},[425,152253,1400],{"class":435},[425,152255,150207],{"class":691},[425,152257,152258],{"class":701},".student_id",[425,152260,2093],{"class":691},[425,152262,152263],{"class":691}," {self",[425,152265,81056],{"class":701},[425,152267,2093],{"class":691},[425,152269,152263],{"class":691},[425,152271,81068],{"class":701},[425,152273,2093],{"class":691},[425,152275,152263],{"class":691},[425,152277,150617],{"class":701},[425,152279,2093],{"class":691},[425,152281,26124],{"class":435},[425,152283,152284],{"class":427,"line":3577},[425,152285,3400],{"emptyLinePlaceholder":1084},[425,152287,152288],{"class":427,"line":3591},[425,152289,3400],{"emptyLinePlaceholder":1084},[425,152291,152292,152294,152296,152298,152301,152303,152305,152307,152309,152311,152313],{"class":427,"line":3599},[425,152293,150236],{"class":701},[425,152295,1204],{"class":1155},[425,152297,150640],{"class":701},[425,152299,152300],{"class":435},"\"001\"",[425,152302,13434],{"class":701},[425,152304,150643],{"class":435},[425,152306,13434],{"class":701},[425,152308,1798],{"class":691},[425,152310,13434],{"class":701},[425,152312,2136],{"class":691},[425,152314,1165],{"class":701},[425,152316,152317,152319],{"class":427,"line":3604},[425,152318,31170],{"class":691},[425,152320,152321],{"class":701},"(student.is_passed())\n",[425,152323,152324,152326],{"class":427,"line":3610},[425,152325,31170],{"class":691},[425,152327,152328],{"class":701},"(student.to_dict())\n",[19,152330,152331,101773,152334,152337],{},[422,152332,152333],{},"to_dict()",[422,152335,152336],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[1099,152339,152341],{"id":152340},"_1116-易错点","11.16 易错点",[972,152343,152344,152350,152356,152361,152364,152367],{},[450,152345,152346,152347,998],{},"类名推荐使用大驼峰，如 ",[422,152348,152349],{},"StudentManager",[450,152351,152352,152353,152355],{},"方法第一个参数必须写 ",[422,152354,31578],{},"，调用时不用传。",[450,152357,152358,152360],{},[422,152359,31584],{}," 不是普通方法，它在创建对象时自动执行。",[450,152362,152363],{},"私有属性不是绝对安全，只是约定和名称改写。",[450,152365,152366],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[450,152368,152369],{},"类中方法太多时，说明职责可能过重。",[1099,152371,152373],{"id":152372},"_1117-本章练习","11.17 本章练习",[972,152375,152376,152382,152388,152393,152406],{},[450,152377,152378,152379,152381],{},"定义 ",[422,152380,150323],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[450,152383,152378,152384,152387],{},[422,152385,152386],{},"Account"," 类，实现存款、取款、查询余额。",[450,152389,152378,152390,152392],{},[422,152391,18223],{}," 类，计算圆的周长和面积。",[450,152394,152378,152395,1362,152398,152401,152402,152405],{},[422,152396,152397],{},"Dog",[422,152399,152400],{},"Cat"," 类，并用同一个函数调用它们的 ",[422,152403,152404],{},"speak()"," 方法。",[450,152407,105121,152408,152410,152411,998],{},[422,152409,151894],{}," 定义一个商品类 ",[422,152412,152413],{},"Product",[1074,152415,152416],{},"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":395,"searchDepth":698,"depth":698,"links":152418},[152419,152420,152421,152422,152423,152424,152426,152427,152428,152429,152430,152431,152432,152436,152437,152438,152439],{"id":150087,"depth":698,"text":150088},{"id":150270,"depth":698,"text":150271},{"id":150334,"depth":698,"text":150335},{"id":150411,"depth":698,"text":150412},{"id":150510,"depth":698,"text":150511},{"id":150674,"depth":698,"text":152425},"11.6 str",{"id":150800,"depth":698,"text":150801},{"id":151066,"depth":698,"text":151067},{"id":151180,"depth":698,"text":151181},{"id":151335,"depth":698,"text":151336},{"id":151459,"depth":698,"text":151460},{"id":151575,"depth":698,"text":151576},{"id":151724,"depth":698,"text":151725,"children":152433},[152434,152435],{"id":151728,"depth":710,"text":151729},{"id":151810,"depth":710,"text":151811},{"id":151888,"depth":698,"text":151889},{"id":152003,"depth":698,"text":152004},{"id":152340,"depth":698,"text":152341},{"id":152372,"depth":698,"text":152373},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":150079,"description":24374},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152446,"title":152447,"body":152448,"description":24374,"extension":1082,"meta":155761,"navigation":1084,"path":155762,"seo":155763,"stem":155764,"__hash__":155765},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152449,"toc":155737},[152450,152453,152457,152460,152463,152492,152495,152503,152507,152511,152514,152537,152540,152546,152550,153996,153999,154020,154024,154027,154039,154042,154226,154229,154355,154358,154362,154366,154502,154506,154592,154596,154678,154682,154719,154723,154912,154916,154919,155149,155153,155156,155337,155340,155344,155347,155353,155356,155382,155386,155389,155403,155406,155431,155434,155448,155451,155468,155471,155488,155491,155508,155512,155538,155542,155565,155569,155572,155574,155580,155582,155603,155606,155612,155618,155622,155625,155701,155704,155708,155734],[10,152451,152447],{"id":152452},"_12-综合案例与复习路线",[1099,152454,152456],{"id":152455},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,152458,152459],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,152461,152462],{},"一个合格的入门综合项目最好覆盖：",[972,152464,152465,152468,152471,152474,152477,152480,152483,152486,152489],{},[450,152466,152467],{},"输入输出。",[450,152469,152470],{},"判断和循环。",[450,152472,152473],{},"函数拆分。",[450,152475,152476],{},"列表、字典等容器。",[450,152478,152479],{},"文件持久化。",[450,152481,152482],{},"异常处理。",[450,152484,152485],{},"模块拆分。",[450,152487,152488],{},"可选：面向对象。",[450,152490,152491],{},"可选：数据可视化。",[19,152493,152494],{},"本章整理两个方向：",[972,152496,152497,152500],{},[450,152498,152499],{},"学生管理系统。",[450,152501,152502],{},"销售数据统计和可视化。",[1099,152504,152506],{"id":152505},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[14,152508,152510],{"id":152509},"_1221-需求","12.2.1 需求",[19,152512,152513],{},"实现一个命令行学生管理系统：",[972,152515,152516,152519,152522,152525,152528,152531,152534],{},[450,152517,152518],{},"添加学生。",[450,152520,152521],{},"删除学生。",[450,152523,152524],{},"修改学生。",[450,152526,152527],{},"查询学生。",[450,152529,152530],{},"显示所有学生。",[450,152532,152533],{},"保存到 JSON 文件。",[450,152535,152536],{},"程序启动时自动读取 JSON 文件。",[19,152538,152539],{},"学生字段：",[416,152541,152544],{"className":152542,"code":152543,"language":6187,"meta":395},[6185],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[422,152545,152543],{"__ignoreMap":395},[1099,152547,152549],{"id":152548},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[416,152551,152553],{"className":31133,"code":152552,"language":31135,"meta":395,"style":395},"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",[422,152554,152555,152561,152571,152575,152589,152593,152597,152606,152618,152624,152628,152634,152665,152675,152682,152693,152699,152703,152707,152717,152748,152774,152778,152782,152791,152802,152813,152824,152835,152846,152857,152868,152872,152876,152886,152898,152914,152921,152928,152932,152936,152946,152954,152961,152974,152984,152995,152999,153003,153012,153020,153026,153038,153046,153057,153061,153065,153074,153090,153094,153101,153112,153117,153121,153137,153152,153167,153171,153176,153184,153192,153200,153208,153212,153217,153228,153232,153236,153245,153260,153270,153274,153286,153297,153301,153305,153310,153314,153325,153329,153333,153342,153357,153365,153369,153381,153391,153395,153399,153414,153427,153440,153444,153457,153469,153481,153485,153489,153500,153504,153508,153517,153532,153540,153544,153556,153566,153570,153574,153579,153583,153587,153597,153603,153625,153644,153663,153682,153687,153691,153695,153704,153712,153723,153727,153731,153757,153767,153772,153776,153780,153788,153798,153802,153810,153815,153831,153835,153849,153854,153868,153873,153886,153891,153904,153909,153922,153927,153940,153951,153955,153961,153972,153976,153980,153992],{"__ignoreMap":395},[425,152556,152557,152559],{"class":427,"line":428},[425,152558,31147],{"class":1155},[425,152560,147846],{"class":701},[425,152562,152563,152565,152567,152569],{"class":427,"line":698},[425,152564,31492],{"class":1155},[425,152566,109066],{"class":701},[425,152568,31147],{"class":1155},[425,152570,109071],{"class":701},[425,152572,152573],{"class":427,"line":710},[425,152574,3400],{"emptyLinePlaceholder":1084},[425,152576,152577,152580,152582,152584,152587],{"class":427,"line":721},[425,152578,152579],{"class":691},"DATA_FILE",[425,152581,14563],{"class":1155},[425,152583,109300],{"class":701},[425,152585,152586],{"class":435},"\"students.json\"",[425,152588,1165],{"class":701},[425,152590,152591],{"class":427,"line":735},[425,152592,3400],{"emptyLinePlaceholder":1084},[425,152594,152595],{"class":427,"line":743},[425,152596,3400],{"emptyLinePlaceholder":1084},[425,152598,152599,152601,152604],{"class":427,"line":751},[425,152600,32702],{"class":1155},[425,152602,152603],{"class":431}," load_students",[425,152605,32708],{"class":701},[425,152607,152608,152610,152612,152615],{"class":427,"line":759},[425,152609,4101],{"class":1155},[425,152611,39685],{"class":1155},[425,152613,152614],{"class":691}," DATA_FILE",[425,152616,152617],{"class":701},".exists():\n",[425,152619,152620,152622],{"class":427,"line":770},[425,152621,15749],{"class":1155},[425,152623,52593],{"class":701},[425,152625,152626],{"class":427,"line":780},[425,152627,3400],{"emptyLinePlaceholder":1084},[425,152629,152630,152632],{"class":427,"line":790},[425,152631,126539],{"class":1155},[425,152633,4739],{"class":701},[425,152635,152636,152639,152641,152643,152645,152647,152649,152651,152653,152655,152657,152659,152661,152663],{"class":427,"line":805},[425,152637,152638],{"class":1155},"        with",[425,152640,147546],{"class":691},[425,152642,1159],{"class":701},[425,152644,152579],{"class":691},[425,152646,13434],{"class":701},[425,152648,147556],{"class":435},[425,152650,13434],{"class":701},[425,152652,147561],{"class":6216},[425,152654,1204],{"class":1155},[425,152656,147566],{"class":435},[425,152658,938],{"class":701},[425,152660,32138],{"class":1155},[425,152662,148908],{"class":6216},[425,152664,4739],{"class":701},[425,152666,152667,152669,152671,152673],{"class":427,"line":818},[425,152668,16729],{"class":1155},[425,152670,148919],{"class":701},[425,152672,46109],{"class":6216},[425,152674,1165],{"class":701},[425,152676,152677,152679],{"class":427,"line":831},[425,152678,126567],{"class":1155},[425,152680,152681],{"class":701}," json.JSONDecodeError:\n",[425,152683,152684,152686,152688,152691],{"class":427,"line":841},[425,152685,33206],{"class":691},[425,152687,1159],{"class":701},[425,152689,152690],{"class":435},"\"数据文件格式错误，已使用空数据启动\"",[425,152692,1165],{"class":701},[425,152694,152695,152697],{"class":427,"line":852},[425,152696,15749],{"class":1155},[425,152698,52593],{"class":701},[425,152700,152701],{"class":427,"line":862},[425,152702,3400],{"emptyLinePlaceholder":1084},[425,152704,152705],{"class":427,"line":878},[425,152706,3400],{"emptyLinePlaceholder":1084},[425,152708,152709,152711,152714],{"class":427,"line":914},[425,152710,32702],{"class":1155},[425,152712,152713],{"class":431}," save_students",[425,152715,152716],{"class":701},"(students):\n",[425,152718,152719,152721,152723,152725,152727,152729,152732,152734,152736,152738,152740,152742,152744,152746],{"class":427,"line":943},[425,152720,34933],{"class":1155},[425,152722,147546],{"class":691},[425,152724,1159],{"class":701},[425,152726,152579],{"class":691},[425,152728,13434],{"class":701},[425,152730,152731],{"class":435},"\"w\"",[425,152733,13434],{"class":701},[425,152735,147561],{"class":6216},[425,152737,1204],{"class":1155},[425,152739,147566],{"class":435},[425,152741,938],{"class":701},[425,152743,32138],{"class":1155},[425,152745,148908],{"class":6216},[425,152747,4739],{"class":701},[425,152749,152750,152753,152755,152757,152759,152761,152763,152765,152768,152770,152772],{"class":427,"line":956},[425,152751,152752],{"class":701},"        json.dump(students, ",[425,152754,46109],{"class":6216},[425,152756,13434],{"class":701},[425,152758,147892],{"class":6216},[425,152760,1204],{"class":1155},[425,152762,34742],{"class":691},[425,152764,13434],{"class":701},[425,152766,152767],{"class":6216},"indent",[425,152769,1204],{"class":1155},[425,152771,1235],{"class":691},[425,152773,1165],{"class":701},[425,152775,152776],{"class":427,"line":964},[425,152777,3400],{"emptyLinePlaceholder":1084},[425,152779,152780],{"class":427,"line":2733},[425,152781,3400],{"emptyLinePlaceholder":1084},[425,152783,152784,152786,152789],{"class":427,"line":2750},[425,152785,32702],{"class":1155},[425,152787,152788],{"class":431}," show_menu",[425,152790,32708],{"class":701},[425,152792,152793,152795,152797,152800],{"class":427,"line":2755},[425,152794,32054],{"class":691},[425,152796,1159],{"class":701},[425,152798,152799],{"class":435},"\"====== 学生管理系统 ======\"",[425,152801,1165],{"class":701},[425,152803,152804,152806,152808,152811],{"class":427,"line":2760},[425,152805,32054],{"class":691},[425,152807,1159],{"class":701},[425,152809,152810],{"class":435},"\"1. 添加学生\"",[425,152812,1165],{"class":701},[425,152814,152815,152817,152819,152822],{"class":427,"line":2765},[425,152816,32054],{"class":691},[425,152818,1159],{"class":701},[425,152820,152821],{"class":435},"\"2. 删除学生\"",[425,152823,1165],{"class":701},[425,152825,152826,152828,152830,152833],{"class":427,"line":2779},[425,152827,32054],{"class":691},[425,152829,1159],{"class":701},[425,152831,152832],{"class":435},"\"3. 修改学生\"",[425,152834,1165],{"class":701},[425,152836,152837,152839,152841,152844],{"class":427,"line":2784},[425,152838,32054],{"class":691},[425,152840,1159],{"class":701},[425,152842,152843],{"class":435},"\"4. 查询学生\"",[425,152845,1165],{"class":701},[425,152847,152848,152850,152852,152855],{"class":427,"line":3577},[425,152849,32054],{"class":691},[425,152851,1159],{"class":701},[425,152853,152854],{"class":435},"\"5. 显示所有学生\"",[425,152856,1165],{"class":701},[425,152858,152859,152861,152863,152866],{"class":427,"line":3591},[425,152860,32054],{"class":691},[425,152862,1159],{"class":701},[425,152864,152865],{"class":435},"\"0. 退出系统\"",[425,152867,1165],{"class":701},[425,152869,152870],{"class":427,"line":3599},[425,152871,3400],{"emptyLinePlaceholder":1084},[425,152873,152874],{"class":427,"line":3604},[425,152875,3400],{"emptyLinePlaceholder":1084},[425,152877,152878,152880,152883],{"class":427,"line":3610},[425,152879,32702],{"class":1155},[425,152881,152882],{"class":431}," find_student",[425,152884,152885],{"class":701},"(students, student_id):\n",[425,152887,152888,152890,152893,152895],{"class":427,"line":3616},[425,152889,4201],{"class":1155},[425,152891,152892],{"class":701}," student ",[425,152894,27034],{"class":1155},[425,152896,152897],{"class":701}," students:\n",[425,152899,152900,152902,152905,152907,152909,152911],{"class":427,"line":3621},[425,152901,3497],{"class":1155},[425,152903,152904],{"class":701}," student[",[425,152906,152202],{"class":435},[425,152908,5443],{"class":701},[425,152910,3949],{"class":1155},[425,152912,152913],{"class":701}," student_id:\n",[425,152915,152916,152918],{"class":427,"line":8948},[425,152917,16729],{"class":1155},[425,152919,152920],{"class":701}," student\n",[425,152922,152923,152925],{"class":427,"line":8972},[425,152924,5090],{"class":1155},[425,152926,152927],{"class":691}," None\n",[425,152929,152930],{"class":427,"line":8977},[425,152931,3400],{"emptyLinePlaceholder":1084},[425,152933,152934],{"class":427,"line":8983},[425,152935,3400],{"emptyLinePlaceholder":1084},[425,152937,152938,152940,152943],{"class":427,"line":9010},[425,152939,32702],{"class":1155},[425,152941,152942],{"class":431}," input_int",[425,152944,152945],{"class":701},"(prompt):\n",[425,152947,152948,152950,152952],{"class":427,"line":9015},[425,152949,3251],{"class":1155},[425,152951,96047],{"class":691},[425,152953,4739],{"class":701},[425,152955,152956,152959],{"class":427,"line":9021},[425,152957,152958],{"class":1155},"        try",[425,152960,4739],{"class":701},[425,152962,152963,152965,152967,152969,152971],{"class":427,"line":9033},[425,152964,16729],{"class":1155},[425,152966,3382],{"class":691},[425,152968,1159],{"class":701},[425,152970,54576],{"class":691},[425,152972,152973],{"class":701},"(prompt))\n",[425,152975,152976,152979,152982],{"class":427,"line":9045},[425,152977,152978],{"class":1155},"        except",[425,152980,152981],{"class":691}," ValueError",[425,152983,4739],{"class":701},[425,152985,152986,152988,152990,152993],{"class":427,"line":9057},[425,152987,35405],{"class":691},[425,152989,1159],{"class":701},[425,152991,152992],{"class":435},"\"请输入整数\"",[425,152994,1165],{"class":701},[425,152996,152997],{"class":427,"line":10715},[425,152998,3400],{"emptyLinePlaceholder":1084},[425,153000,153001],{"class":427,"line":10740},[425,153002,3400],{"emptyLinePlaceholder":1084},[425,153004,153005,153007,153010],{"class":427,"line":10763},[425,153006,32702],{"class":1155},[425,153008,153009],{"class":431}," input_float",[425,153011,152945],{"class":701},[425,153013,153014,153016,153018],{"class":427,"line":10787},[425,153015,3251],{"class":1155},[425,153017,96047],{"class":691},[425,153019,4739],{"class":701},[425,153021,153022,153024],{"class":427,"line":10792},[425,153023,152958],{"class":1155},[425,153025,4739],{"class":701},[425,153027,153028,153030,153032,153034,153036],{"class":427,"line":10797},[425,153029,16729],{"class":1155},[425,153031,110552],{"class":691},[425,153033,1159],{"class":701},[425,153035,54576],{"class":691},[425,153037,152973],{"class":701},[425,153039,153040,153042,153044],{"class":427,"line":10802},[425,153041,152978],{"class":1155},[425,153043,152981],{"class":691},[425,153045,4739],{"class":701},[425,153047,153048,153050,153052,153055],{"class":427,"line":10811},[425,153049,35405],{"class":691},[425,153051,1159],{"class":701},[425,153053,153054],{"class":435},"\"请输入数字\"",[425,153056,1165],{"class":701},[425,153058,153059],{"class":427,"line":10816},[425,153060,3400],{"emptyLinePlaceholder":1084},[425,153062,153063],{"class":427,"line":10822},[425,153064,3400],{"emptyLinePlaceholder":1084},[425,153066,153067,153069,153072],{"class":427,"line":10843},[425,153068,32702],{"class":1155},[425,153070,153071],{"class":431}," add_student",[425,153073,152716],{"class":701},[425,153075,153076,153079,153081,153083,153085,153088],{"class":427,"line":10849},[425,153077,153078],{"class":701},"    student_id ",[425,153080,1204],{"class":1155},[425,153082,61360],{"class":691},[425,153084,1159],{"class":701},[425,153086,153087],{"class":435},"\"请输入学号:\"",[425,153089,1165],{"class":701},[425,153091,153092],{"class":427,"line":10863},[425,153093,3400],{"emptyLinePlaceholder":1084},[425,153095,153096,153098],{"class":427,"line":10869},[425,153097,4101],{"class":1155},[425,153099,153100],{"class":701}," find_student(students, student_id):\n",[425,153102,153103,153105,153107,153110],{"class":427,"line":10896},[425,153104,33206],{"class":691},[425,153106,1159],{"class":701},[425,153108,153109],{"class":435},"\"学号已存在\"",[425,153111,1165],{"class":701},[425,153113,153114],{"class":427,"line":10905},[425,153115,153116],{"class":1155},"        return\n",[425,153118,153119],{"class":427,"line":10911},[425,153120,3400],{"emptyLinePlaceholder":1084},[425,153122,153123,153126,153128,153130,153132,153135],{"class":427,"line":10919},[425,153124,153125],{"class":701},"    name ",[425,153127,1204],{"class":1155},[425,153129,61360],{"class":691},[425,153131,1159],{"class":701},[425,153133,153134],{"class":435},"\"请输入姓名:\"",[425,153136,1165],{"class":701},[425,153138,153139,153142,153144,153147,153150],{"class":427,"line":10924},[425,153140,153141],{"class":701},"    age ",[425,153143,1204],{"class":1155},[425,153145,153146],{"class":701}," input_int(",[425,153148,153149],{"class":435},"\"请输入年龄:\"",[425,153151,1165],{"class":701},[425,153153,153154,153157,153159,153162,153165],{"class":427,"line":17601},[425,153155,153156],{"class":701},"    score ",[425,153158,1204],{"class":1155},[425,153160,153161],{"class":701}," input_float(",[425,153163,153164],{"class":435},"\"请输入成绩:\"",[425,153166,1165],{"class":701},[425,153168,153169],{"class":427,"line":17607},[425,153170,3400],{"emptyLinePlaceholder":1084},[425,153172,153173],{"class":427,"line":17630},[425,153174,153175],{"class":701},"    students.append({\n",[425,153177,153178,153181],{"class":427,"line":17636},[425,153179,153180],{"class":435},"        \"student_id\"",[425,153182,153183],{"class":701},": student_id,\n",[425,153185,153186,153189],{"class":427,"line":17659},[425,153187,153188],{"class":435},"        \"name\"",[425,153190,153191],{"class":701},": name,\n",[425,153193,153194,153197],{"class":427,"line":17673},[425,153195,153196],{"class":435},"        \"age\"",[425,153198,153199],{"class":701},": age,\n",[425,153201,153202,153205],{"class":427,"line":17693},[425,153203,153204],{"class":435},"        \"score\"",[425,153206,153207],{"class":701},": score,\n",[425,153209,153210],{"class":427,"line":17699},[425,153211,34216],{"class":701},[425,153213,153214],{"class":427,"line":17710},[425,153215,153216],{"class":701},"    save_students(students)\n",[425,153218,153219,153221,153223,153226],{"class":427,"line":17733},[425,153220,32054],{"class":691},[425,153222,1159],{"class":701},[425,153224,153225],{"class":435},"\"添加成功\"",[425,153227,1165],{"class":701},[425,153229,153230],{"class":427,"line":17755},[425,153231,3400],{"emptyLinePlaceholder":1084},[425,153233,153234],{"class":427,"line":17760},[425,153235,3400],{"emptyLinePlaceholder":1084},[425,153237,153238,153240,153243],{"class":427,"line":17766},[425,153239,32702],{"class":1155},[425,153241,153242],{"class":431}," delete_student",[425,153244,152716],{"class":701},[425,153246,153247,153249,153251,153253,153255,153258],{"class":427,"line":17780},[425,153248,153078],{"class":701},[425,153250,1204],{"class":1155},[425,153252,61360],{"class":691},[425,153254,1159],{"class":701},[425,153256,153257],{"class":435},"\"请输入要删除的学号:\"",[425,153259,1165],{"class":701},[425,153261,153262,153265,153267],{"class":427,"line":17793},[425,153263,153264],{"class":701},"    student ",[425,153266,1204],{"class":1155},[425,153268,153269],{"class":701}," find_student(students, student_id)\n",[425,153271,153272],{"class":427,"line":17798},[425,153273,3400],{"emptyLinePlaceholder":1084},[425,153275,153276,153278,153280,153282,153284],{"class":427,"line":17812},[425,153277,4101],{"class":1155},[425,153279,152892],{"class":701},[425,153281,39682],{"class":1155},[425,153283,39688],{"class":691},[425,153285,4739],{"class":701},[425,153287,153288,153290,153292,153295],{"class":427,"line":17817},[425,153289,33206],{"class":691},[425,153291,1159],{"class":701},[425,153293,153294],{"class":435},"\"学生不存在\"",[425,153296,1165],{"class":701},[425,153298,153299],{"class":427,"line":17823},[425,153300,153116],{"class":1155},[425,153302,153303],{"class":427,"line":17828},[425,153304,3400],{"emptyLinePlaceholder":1084},[425,153306,153307],{"class":427,"line":17842},[425,153308,153309],{"class":701},"    students.remove(student)\n",[425,153311,153312],{"class":427,"line":17847},[425,153313,153216],{"class":701},[425,153315,153316,153318,153320,153323],{"class":427,"line":17852},[425,153317,32054],{"class":691},[425,153319,1159],{"class":701},[425,153321,153322],{"class":435},"\"删除成功\"",[425,153324,1165],{"class":701},[425,153326,153327],{"class":427,"line":17866},[425,153328,3400],{"emptyLinePlaceholder":1084},[425,153330,153331],{"class":427,"line":17878},[425,153332,3400],{"emptyLinePlaceholder":1084},[425,153334,153335,153337,153340],{"class":427,"line":17883},[425,153336,32702],{"class":1155},[425,153338,153339],{"class":431}," update_student",[425,153341,152716],{"class":701},[425,153343,153344,153346,153348,153350,153352,153355],{"class":427,"line":17896},[425,153345,153078],{"class":701},[425,153347,1204],{"class":1155},[425,153349,61360],{"class":691},[425,153351,1159],{"class":701},[425,153353,153354],{"class":435},"\"请输入要修改的学号:\"",[425,153356,1165],{"class":701},[425,153358,153359,153361,153363],{"class":427,"line":17901},[425,153360,153264],{"class":701},[425,153362,1204],{"class":1155},[425,153364,153269],{"class":701},[425,153366,153367],{"class":427,"line":17906},[425,153368,3400],{"emptyLinePlaceholder":1084},[425,153370,153371,153373,153375,153377,153379],{"class":427,"line":17911},[425,153372,4101],{"class":1155},[425,153374,152892],{"class":701},[425,153376,39682],{"class":1155},[425,153378,39688],{"class":691},[425,153380,4739],{"class":701},[425,153382,153383,153385,153387,153389],{"class":427,"line":17924},[425,153384,33206],{"class":691},[425,153386,1159],{"class":701},[425,153388,153294],{"class":435},[425,153390,1165],{"class":701},[425,153392,153393],{"class":427,"line":17929},[425,153394,153116],{"class":1155},[425,153396,153397],{"class":427,"line":33388},[425,153398,3400],{"emptyLinePlaceholder":1084},[425,153400,153401,153403,153405,153407,153409,153412],{"class":427,"line":33394},[425,153402,153125],{"class":701},[425,153404,1204],{"class":1155},[425,153406,61360],{"class":691},[425,153408,1159],{"class":701},[425,153410,153411],{"class":435},"\"请输入新姓名:\"",[425,153413,1165],{"class":701},[425,153415,153416,153418,153420,153422,153425],{"class":427,"line":33400},[425,153417,153141],{"class":701},[425,153419,1204],{"class":1155},[425,153421,153146],{"class":701},[425,153423,153424],{"class":435},"\"请输入新年龄:\"",[425,153426,1165],{"class":701},[425,153428,153429,153431,153433,153435,153438],{"class":427,"line":33406},[425,153430,153156],{"class":701},[425,153432,1204],{"class":1155},[425,153434,153161],{"class":701},[425,153436,153437],{"class":435},"\"请输入新成绩:\"",[425,153439,1165],{"class":701},[425,153441,153442],{"class":427,"line":33412},[425,153443,3400],{"emptyLinePlaceholder":1084},[425,153445,153446,153449,153451,153453,153455],{"class":427,"line":33423},[425,153447,153448],{"class":701},"    student[",[425,153450,63434],{"class":435},[425,153452,5443],{"class":701},[425,153454,1204],{"class":1155},[425,153456,150550],{"class":701},[425,153458,153459,153461,153463,153465,153467],{"class":427,"line":33429},[425,153460,153448],{"class":701},[425,153462,69879],{"class":435},[425,153464,5443],{"class":701},[425,153466,1204],{"class":1155},[425,153468,150562],{"class":701},[425,153470,153471,153473,153475,153477,153479],{"class":427,"line":33449},[425,153472,153448],{"class":701},[425,153474,152227],{"class":435},[425,153476,5443],{"class":701},[425,153478,1204],{"class":1155},[425,153480,2592],{"class":701},[425,153482,153483],{"class":427,"line":33455},[425,153484,3400],{"emptyLinePlaceholder":1084},[425,153486,153487],{"class":427,"line":33466},[425,153488,153216],{"class":701},[425,153490,153491,153493,153495,153498],{"class":427,"line":33472},[425,153492,32054],{"class":691},[425,153494,1159],{"class":701},[425,153496,153497],{"class":435},"\"修改成功\"",[425,153499,1165],{"class":701},[425,153501,153502],{"class":427,"line":33478},[425,153503,3400],{"emptyLinePlaceholder":1084},[425,153505,153506],{"class":427,"line":33484},[425,153507,3400],{"emptyLinePlaceholder":1084},[425,153509,153510,153512,153515],{"class":427,"line":33490},[425,153511,32702],{"class":1155},[425,153513,153514],{"class":431}," query_student",[425,153516,152716],{"class":701},[425,153518,153519,153521,153523,153525,153527,153530],{"class":427,"line":33496},[425,153520,153078],{"class":701},[425,153522,1204],{"class":1155},[425,153524,61360],{"class":691},[425,153526,1159],{"class":701},[425,153528,153529],{"class":435},"\"请输入要查询的学号:\"",[425,153531,1165],{"class":701},[425,153533,153534,153536,153538],{"class":427,"line":33502},[425,153535,153264],{"class":701},[425,153537,1204],{"class":1155},[425,153539,153269],{"class":701},[425,153541,153542],{"class":427,"line":33508},[425,153543,3400],{"emptyLinePlaceholder":1084},[425,153545,153546,153548,153550,153552,153554],{"class":427,"line":33528},[425,153547,4101],{"class":1155},[425,153549,152892],{"class":701},[425,153551,39682],{"class":1155},[425,153553,39688],{"class":691},[425,153555,4739],{"class":701},[425,153557,153558,153560,153562,153564],{"class":427,"line":33534},[425,153559,33206],{"class":691},[425,153561,1159],{"class":701},[425,153563,153294],{"class":435},[425,153565,1165],{"class":701},[425,153567,153568],{"class":427,"line":33550},[425,153569,153116],{"class":1155},[425,153571,153572],{"class":427,"line":33556},[425,153573,3400],{"emptyLinePlaceholder":1084},[425,153575,153576],{"class":427,"line":33570},[425,153577,153578],{"class":701},"    print_student(student)\n",[425,153580,153581],{"class":427,"line":33576},[425,153582,3400],{"emptyLinePlaceholder":1084},[425,153584,153585],{"class":427,"line":33591},[425,153586,3400],{"emptyLinePlaceholder":1084},[425,153588,153589,153591,153594],{"class":427,"line":33597},[425,153590,32702],{"class":1155},[425,153592,153593],{"class":431}," print_student",[425,153595,153596],{"class":701},"(student):\n",[425,153598,153599,153601],{"class":427,"line":33606},[425,153600,32054],{"class":691},[425,153602,152194],{"class":701},[425,153604,153605,153608,153610,153612,153615,153618,153620,153623],{"class":427,"line":33612},[425,153606,153607],{"class":1155},"        f",[425,153609,1400],{"class":435},[425,153611,2043],{"class":691},[425,153613,153614],{"class":701},"student[",[425,153616,153617],{"class":435},"'student_id'",[425,153619,2087],{"class":701},[425,153621,153622],{"class":691},"}\\t",[425,153624,26124],{"class":435},[425,153626,153627,153629,153631,153633,153635,153638,153640,153642],{"class":427,"line":33621},[425,153628,153607],{"class":1155},[425,153630,1400],{"class":435},[425,153632,2043],{"class":691},[425,153634,153614],{"class":701},[425,153636,153637],{"class":435},"'name'",[425,153639,2087],{"class":701},[425,153641,153622],{"class":691},[425,153643,26124],{"class":435},[425,153645,153646,153648,153650,153652,153654,153657,153659,153661],{"class":427,"line":33627},[425,153647,153607],{"class":1155},[425,153649,1400],{"class":435},[425,153651,2043],{"class":691},[425,153653,153614],{"class":701},[425,153655,153656],{"class":435},"'age'",[425,153658,2087],{"class":701},[425,153660,153622],{"class":691},[425,153662,26124],{"class":435},[425,153664,153665,153667,153669,153671,153673,153676,153678,153680],{"class":427,"line":33633},[425,153666,153607],{"class":1155},[425,153668,1400],{"class":435},[425,153670,2043],{"class":691},[425,153672,153614],{"class":701},[425,153674,153675],{"class":435},"'score'",[425,153677,2087],{"class":701},[425,153679,2093],{"class":691},[425,153681,26124],{"class":435},[425,153683,153684],{"class":427,"line":33642},[425,153685,153686],{"class":701},"    )\n",[425,153688,153689],{"class":427,"line":33648},[425,153690,3400],{"emptyLinePlaceholder":1084},[425,153692,153693],{"class":427,"line":33659},[425,153694,3400],{"emptyLinePlaceholder":1084},[425,153696,153697,153699,153702],{"class":427,"line":33665},[425,153698,32702],{"class":1155},[425,153700,153701],{"class":431}," show_all_students",[425,153703,152716],{"class":701},[425,153705,153706,153708,153710],{"class":427,"line":33684},[425,153707,4101],{"class":1155},[425,153709,39685],{"class":1155},[425,153711,152897],{"class":701},[425,153713,153714,153716,153718,153721],{"class":427,"line":33690},[425,153715,33206],{"class":691},[425,153717,1159],{"class":701},[425,153719,153720],{"class":435},"\"暂无学生\"",[425,153722,1165],{"class":701},[425,153724,153725],{"class":427,"line":33701},[425,153726,153116],{"class":1155},[425,153728,153729],{"class":427,"line":33707},[425,153730,3400],{"emptyLinePlaceholder":1084},[425,153732,153733,153735,153737,153740,153742,153745,153747,153750,153752,153755],{"class":427,"line":33727},[425,153734,32054],{"class":691},[425,153736,1159],{"class":701},[425,153738,153739],{"class":435},"\"学号",[425,153741,2247],{"class":691},[425,153743,153744],{"class":435},"姓名",[425,153746,2247],{"class":691},[425,153748,153749],{"class":435},"年龄",[425,153751,2247],{"class":691},[425,153753,153754],{"class":435},"成绩\"",[425,153756,1165],{"class":701},[425,153758,153759,153761,153763,153765],{"class":427,"line":33743},[425,153760,4201],{"class":1155},[425,153762,152892],{"class":701},[425,153764,27034],{"class":1155},[425,153766,152897],{"class":701},[425,153768,153769],{"class":427,"line":33749},[425,153770,153771],{"class":701},"        print_student(student)\n",[425,153773,153774],{"class":427,"line":33763},[425,153775,3400],{"emptyLinePlaceholder":1084},[425,153777,153778],{"class":427,"line":33769},[425,153779,3400],{"emptyLinePlaceholder":1084},[425,153781,153782,153784,153786],{"class":427,"line":33775},[425,153783,32702],{"class":1155},[425,153785,2973],{"class":431},[425,153787,32708],{"class":701},[425,153789,153790,153793,153795],{"class":427,"line":33786},[425,153791,153792],{"class":701},"    students ",[425,153794,1204],{"class":1155},[425,153796,153797],{"class":701}," load_students()\n",[425,153799,153800],{"class":427,"line":33792},[425,153801,3400],{"emptyLinePlaceholder":1084},[425,153803,153804,153806,153808],{"class":427,"line":33798},[425,153805,3251],{"class":1155},[425,153807,96047],{"class":691},[425,153809,4739],{"class":701},[425,153811,153812],{"class":427,"line":33808},[425,153813,153814],{"class":701},"        show_menu()\n",[425,153816,153817,153820,153822,153824,153826,153829],{"class":427,"line":33814},[425,153818,153819],{"class":701},"        choice ",[425,153821,1204],{"class":1155},[425,153823,61360],{"class":691},[425,153825,1159],{"class":701},[425,153827,153828],{"class":435},"\"请输入操作:\"",[425,153830,1165],{"class":701},[425,153832,153833],{"class":427,"line":33825},[425,153834,3400],{"emptyLinePlaceholder":1084},[425,153836,153837,153839,153842,153844,153847],{"class":427,"line":33831},[425,153838,3497],{"class":1155},[425,153840,153841],{"class":701}," choice ",[425,153843,3949],{"class":1155},[425,153845,153846],{"class":435}," \"1\"",[425,153848,4739],{"class":701},[425,153850,153851],{"class":427,"line":33841},[425,153852,153853],{"class":701},"            add_student(students)\n",[425,153855,153856,153859,153861,153863,153866],{"class":427,"line":33846},[425,153857,153858],{"class":1155},"        elif",[425,153860,153841],{"class":701},[425,153862,3949],{"class":1155},[425,153864,153865],{"class":435}," \"2\"",[425,153867,4739],{"class":701},[425,153869,153870],{"class":427,"line":33852},[425,153871,153872],{"class":701},"            delete_student(students)\n",[425,153874,153875,153877,153879,153881,153884],{"class":427,"line":33901},[425,153876,153858],{"class":1155},[425,153878,153841],{"class":701},[425,153880,3949],{"class":1155},[425,153882,153883],{"class":435}," \"3\"",[425,153885,4739],{"class":701},[425,153887,153888],{"class":427,"line":33948},[425,153889,153890],{"class":701},"            update_student(students)\n",[425,153892,153893,153895,153897,153899,153902],{"class":427,"line":33953},[425,153894,153858],{"class":1155},[425,153896,153841],{"class":701},[425,153898,3949],{"class":1155},[425,153900,153901],{"class":435}," \"4\"",[425,153903,4739],{"class":701},[425,153905,153906],{"class":427,"line":33959},[425,153907,153908],{"class":701},"            query_student(students)\n",[425,153910,153911,153913,153915,153917,153920],{"class":427,"line":33978},[425,153912,153858],{"class":1155},[425,153914,153841],{"class":701},[425,153916,3949],{"class":1155},[425,153918,153919],{"class":435}," \"5\"",[425,153921,4739],{"class":701},[425,153923,153924],{"class":427,"line":33984},[425,153925,153926],{"class":701},"            show_all_students(students)\n",[425,153928,153929,153931,153933,153935,153938],{"class":427,"line":34004},[425,153930,153858],{"class":1155},[425,153932,153841],{"class":701},[425,153934,3949],{"class":1155},[425,153936,153937],{"class":435}," \"0\"",[425,153939,4739],{"class":701},[425,153941,153942,153944,153946,153949],{"class":427,"line":34010},[425,153943,35405],{"class":691},[425,153945,1159],{"class":701},[425,153947,153948],{"class":435},"\"退出系统\"",[425,153950,1165],{"class":701},[425,153952,153953],{"class":427,"line":34016},[425,153954,115853],{"class":1155},[425,153956,153957,153959],{"class":427,"line":34026},[425,153958,3534],{"class":1155},[425,153960,4739],{"class":701},[425,153962,153963,153965,153967,153970],{"class":427,"line":34031},[425,153964,35405],{"class":691},[425,153966,1159],{"class":701},[425,153968,153969],{"class":435},"\"输入错误\"",[425,153971,1165],{"class":701},[425,153973,153974],{"class":427,"line":34037},[425,153975,3400],{"emptyLinePlaceholder":1084},[425,153977,153978],{"class":427,"line":34053},[425,153979,3400],{"emptyLinePlaceholder":1084},[425,153981,153982,153984,153986,153988,153990],{"class":427,"line":34098},[425,153983,2544],{"class":1155},[425,153985,31975],{"class":691},[425,153987,102314],{"class":1155},[425,153989,102317],{"class":435},[425,153991,4739],{"class":701},[425,153993,153994],{"class":427,"line":34104},[425,153995,102324],{"class":701},[19,153997,153998],{},"这个项目串联了：",[972,154000,154001,154004,154007,154010,154013,154015],{},[450,154002,154003],{},"菜单循环。",[450,154005,154006],{},"函数封装。",[450,154008,154009],{},"列表字典。",[450,154011,154012],{},"JSON 读写。",[450,154014,152482],{},[450,154016,154017,998],{},[422,154018,154019],{},"if __name__ == \"__main__\"",[1099,154021,154023],{"id":154022},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,154025,154026],{},"可以进一步拆成两个类：",[972,154028,154029,154034],{},[450,154030,154031,154033],{},[422,154032,150323],{},"：表示单个学生。",[450,154035,154036,154038],{},[422,154037,152349],{},"：负责学生增删改查和文件保存。",[19,154040,154041],{},"示意代码：",[416,154043,154045],{"className":31133,"code":154044,"language":31135,"meta":395,"style":395},"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",[422,154046,154047,154057,154061,154065,154069,154077,154084,154090,154096,154102,154106,154114,154120,154130,154140,154150,154160,154164,154168,154174,154182,154190,154198,154206,154214,154222],{"__ignoreMap":395},[425,154048,154049,154051,154053,154055],{"class":427,"line":428},[425,154050,31492],{"class":1155},[425,154052,151907],{"class":701},[425,154054,31147],{"class":1155},[425,154056,151912],{"class":701},[425,154058,154059],{"class":427,"line":698},[425,154060,3400],{"emptyLinePlaceholder":1084},[425,154062,154063],{"class":427,"line":710},[425,154064,3400],{"emptyLinePlaceholder":1084},[425,154066,154067],{"class":427,"line":721},[425,154068,151925],{"class":431},[425,154070,154071,154073,154075],{"class":427,"line":735},[425,154072,15691],{"class":1155},[425,154074,8898],{"class":431},[425,154076,4739],{"class":701},[425,154078,154079,154082],{"class":427,"line":743},[425,154080,154081],{"class":701},"    student_id: ",[425,154083,151941],{"class":691},[425,154085,154086,154088],{"class":427,"line":751},[425,154087,151938],{"class":701},[425,154089,151941],{"class":691},[425,154091,154092,154094],{"class":427,"line":759},[425,154093,151946],{"class":701},[425,154095,151949],{"class":691},[425,154097,154098,154100],{"class":427,"line":770},[425,154099,151954],{"class":701},[425,154101,151957],{"class":691},[425,154103,154104],{"class":427,"line":780},[425,154105,3400],{"emptyLinePlaceholder":1084},[425,154107,154108,154110,154112],{"class":427,"line":790},[425,154109,31556],{"class":1155},[425,154111,152105],{"class":431},[425,154113,31562],{"class":701},[425,154115,154116,154118],{"class":427,"line":805},[425,154117,15749],{"class":1155},[425,154119,16569],{"class":701},[425,154121,154122,154124,154126,154128],{"class":427,"line":818},[425,154123,152118],{"class":435},[425,154125,52192],{"class":701},[425,154127,31578],{"class":691},[425,154129,152125],{"class":701},[425,154131,154132,154134,154136,154138],{"class":427,"line":831},[425,154133,152130],{"class":435},[425,154135,52192],{"class":701},[425,154137,31578],{"class":691},[425,154139,152137],{"class":701},[425,154141,154142,154144,154146,154148],{"class":427,"line":841},[425,154143,152142],{"class":435},[425,154145,52192],{"class":701},[425,154147,31578],{"class":691},[425,154149,152149],{"class":701},[425,154151,154152,154154,154156,154158],{"class":427,"line":852},[425,154153,152154],{"class":435},[425,154155,52192],{"class":701},[425,154157,31578],{"class":691},[425,154159,152161],{"class":701},[425,154161,154162],{"class":427,"line":862},[425,154163,3529],{"class":701},[425,154165,154166],{"class":427,"line":878},[425,154167,3400],{"emptyLinePlaceholder":1084},[425,154169,154170,154172],{"class":427,"line":914},[425,154171,151769],{"class":431},[425,154173,151772],{"class":691},[425,154175,154176,154178,154180],{"class":427,"line":943},[425,154177,31556],{"class":1155},[425,154179,152182],{"class":431},[425,154181,152185],{"class":701},[425,154183,154184,154186,154188],{"class":427,"line":956},[425,154185,15749],{"class":1155},[425,154187,151789],{"class":691},[425,154189,152194],{"class":701},[425,154191,154192,154194,154196],{"class":427,"line":964},[425,154193,152199],{"class":701},[425,154195,152202],{"class":435},[425,154197,88591],{"class":701},[425,154199,154200,154202,154204],{"class":427,"line":2733},[425,154201,152199],{"class":701},[425,154203,63434],{"class":435},[425,154205,88591],{"class":701},[425,154207,154208,154210,154212],{"class":427,"line":2750},[425,154209,152199],{"class":701},[425,154211,69879],{"class":435},[425,154213,88591],{"class":701},[425,154215,154216,154218,154220],{"class":427,"line":2755},[425,154217,152199],{"class":701},[425,154219,152227],{"class":435},[425,154221,88591],{"class":701},[425,154223,154224],{"class":427,"line":2760},[425,154225,38881],{"class":701},[19,154227,154228],{},"管理器示意：",[416,154230,154232],{"className":31133,"code":154231,"language":31135,"meta":395,"style":395},"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",[422,154233,154234,154243,154251,154262,154266,154276,154289,154300,154307,154313,154317,154326,154335,154341,154348],{"__ignoreMap":395},[425,154235,154236,154238,154241],{"class":427,"line":428},[425,154237,15691],{"class":1155},[425,154239,154240],{"class":431}," StudentManager",[425,154242,4739],{"class":701},[425,154244,154245,154247,154249],{"class":427,"line":698},[425,154246,31556],{"class":1155},[425,154248,31559],{"class":691},[425,154250,31562],{"class":701},[425,154252,154253,154255,154258,154260],{"class":427,"line":710},[425,154254,31600],{"class":691},[425,154256,154257],{"class":701},".students ",[425,154259,1204],{"class":1155},[425,154261,52593],{"class":701},[425,154263,154264],{"class":427,"line":721},[425,154265,3400],{"emptyLinePlaceholder":1084},[425,154267,154268,154270,154273],{"class":427,"line":735},[425,154269,31556],{"class":1155},[425,154271,154272],{"class":431}," find_by_id",[425,154274,154275],{"class":701},"(self, student_id):\n",[425,154277,154278,154280,154282,154284,154286],{"class":427,"line":743},[425,154279,4403],{"class":1155},[425,154281,152892],{"class":701},[425,154283,27034],{"class":1155},[425,154285,39628],{"class":691},[425,154287,154288],{"class":701},".students:\n",[425,154290,154291,154293,154296,154298],{"class":427,"line":751},[425,154292,5642],{"class":1155},[425,154294,154295],{"class":701}," student.student_id ",[425,154297,3949],{"class":1155},[425,154299,152913],{"class":701},[425,154301,154302,154305],{"class":427,"line":759},[425,154303,154304],{"class":1155},"                return",[425,154306,152920],{"class":701},[425,154308,154309,154311],{"class":427,"line":770},[425,154310,15749],{"class":1155},[425,154312,152927],{"class":691},[425,154314,154315],{"class":427,"line":780},[425,154316,3400],{"emptyLinePlaceholder":1084},[425,154318,154319,154321,154323],{"class":427,"line":790},[425,154320,31556],{"class":1155},[425,154322,6209],{"class":431},[425,154324,154325],{"class":701},"(self, student):\n",[425,154327,154328,154330,154332],{"class":427,"line":805},[425,154329,3497],{"class":1155},[425,154331,39628],{"class":691},[425,154333,154334],{"class":701},".find_by_id(student.student_id):\n",[425,154336,154337,154339],{"class":427,"line":818},[425,154338,16729],{"class":1155},[425,154340,126562],{"class":691},[425,154342,154343,154345],{"class":427,"line":831},[425,154344,31600],{"class":691},[425,154346,154347],{"class":701},".students.append(student)\n",[425,154349,154350,154352],{"class":427,"line":841},[425,154351,15749],{"class":1155},[425,154353,154354],{"class":691}," True\n",[19,154356,154357],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[1099,154359,154361],{"id":154360},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[14,154363,154365],{"id":154364},"_1251-数据结构","12.5.1 数据结构",[416,154367,154369],{"className":31133,"code":154368,"language":31135,"meta":395,"style":395},"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",[422,154370,154371,154379,154410,154440,154469,154498],{"__ignoreMap":395},[425,154372,154373,154375,154377],{"class":427,"line":428},[425,154374,149220],{"class":701},[425,154376,1204],{"class":1155},[425,154378,56202],{"class":701},[425,154380,154381,154383,154385,154387,154389,154391,154394,154396,154399,154401,154403,154405,154408],{"class":427,"line":698},[425,154382,149140],{"class":701},[425,154384,148752],{"class":435},[425,154386,52192],{"class":701},[425,154388,149363],{"class":435},[425,154390,13434],{"class":701},[425,154392,154393],{"class":435},"\"category\"",[425,154395,52192],{"class":701},[425,154397,154398],{"class":435},"\"手机\"",[425,154400,13434],{"class":701},[425,154402,84839],{"class":435},[425,154404,52192],{"class":701},[425,154406,154407],{"class":691},"12000",[425,154409,5930],{"class":701},[425,154411,154412,154414,154416,154418,154420,154422,154424,154426,154429,154431,154433,154435,154438],{"class":427,"line":710},[425,154413,149140],{"class":701},[425,154415,148752],{"class":435},[425,154417,52192],{"class":701},[425,154419,149363],{"class":435},[425,154421,13434],{"class":701},[425,154423,154393],{"class":435},[425,154425,52192],{"class":701},[425,154427,154428],{"class":435},"\"电脑\"",[425,154430,13434],{"class":701},[425,154432,84839],{"class":435},[425,154434,52192],{"class":701},[425,154436,154437],{"class":691},"18000",[425,154439,5930],{"class":701},[425,154441,154442,154444,154446,154448,154450,154452,154454,154456,154458,154460,154462,154464,154467],{"class":427,"line":721},[425,154443,149140],{"class":701},[425,154445,148752],{"class":435},[425,154447,52192],{"class":701},[425,154449,149384],{"class":435},[425,154451,13434],{"class":701},[425,154453,154393],{"class":435},[425,154455,52192],{"class":701},[425,154457,154398],{"class":435},[425,154459,13434],{"class":701},[425,154461,84839],{"class":435},[425,154463,52192],{"class":701},[425,154465,154466],{"class":691},"15000",[425,154468,5930],{"class":701},[425,154470,154471,154473,154475,154477,154479,154481,154483,154485,154487,154489,154491,154493,154496],{"class":427,"line":735},[425,154472,149140],{"class":701},[425,154474,148752],{"class":435},[425,154476,52192],{"class":701},[425,154478,149384],{"class":435},[425,154480,13434],{"class":701},[425,154482,154393],{"class":435},[425,154484,52192],{"class":701},[425,154486,154428],{"class":435},[425,154488,13434],{"class":701},[425,154490,84839],{"class":435},[425,154492,52192],{"class":701},[425,154494,154495],{"class":691},"16000",[425,154497,5930],{"class":701},[425,154499,154500],{"class":427,"line":743},[425,154501,34001],{"class":701},[14,154503,154505],{"id":154504},"_1252-按日期统计","12.5.2 按日期统计",[416,154507,154509],{"className":31133,"code":154508,"language":31135,"meta":395,"style":395},"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",[422,154510,154511,154520,154524,154535,154549,154562,154581,154585],{"__ignoreMap":395},[425,154512,154513,154516,154518],{"class":427,"line":428},[425,154514,154515],{"class":701},"daily_total ",[425,154517,1204],{"class":1155},[425,154519,88623],{"class":701},[425,154521,154522],{"class":427,"line":698},[425,154523,3400],{"emptyLinePlaceholder":1084},[425,154525,154526,154528,154530,154532],{"class":427,"line":710},[425,154527,4025],{"class":1155},[425,154529,148964],{"class":701},[425,154531,27034],{"class":1155},[425,154533,154534],{"class":701}," sales:\n",[425,154536,154537,154540,154542,154545,154547],{"class":427,"line":721},[425,154538,154539],{"class":701},"    date ",[425,154541,1204],{"class":1155},[425,154543,154544],{"class":701}," item[",[425,154546,148752],{"class":435},[425,154548,34001],{"class":701},[425,154550,154551,154554,154556,154558,154560],{"class":427,"line":735},[425,154552,154553],{"class":701},"    amount ",[425,154555,1204],{"class":1155},[425,154557,154544],{"class":701},[425,154559,84839],{"class":435},[425,154561,34001],{"class":701},[425,154563,154564,154567,154569,154572,154574,154576,154578],{"class":427,"line":743},[425,154565,154566],{"class":701},"    daily_total[date] ",[425,154568,1204],{"class":1155},[425,154570,154571],{"class":701}," daily_total.get(date, ",[425,154573,1341],{"class":691},[425,154575,938],{"class":701},[425,154577,1629],{"class":1155},[425,154579,154580],{"class":701}," amount\n",[425,154582,154583],{"class":427,"line":751},[425,154584,3400],{"emptyLinePlaceholder":1084},[425,154586,154587,154589],{"class":427,"line":759},[425,154588,31170],{"class":691},[425,154590,154591],{"class":701},"(daily_total)\n",[14,154593,154595],{"id":154594},"_1253-按类别统计","12.5.3 按类别统计",[416,154597,154599],{"className":31133,"code":154598,"language":31135,"meta":395,"style":395},"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",[422,154600,154601,154610,154614,154624,154637,154649,154667,154671],{"__ignoreMap":395},[425,154602,154603,154606,154608],{"class":427,"line":428},[425,154604,154605],{"class":701},"category_total ",[425,154607,1204],{"class":1155},[425,154609,88623],{"class":701},[425,154611,154612],{"class":427,"line":698},[425,154613,3400],{"emptyLinePlaceholder":1084},[425,154615,154616,154618,154620,154622],{"class":427,"line":710},[425,154617,4025],{"class":1155},[425,154619,148964],{"class":701},[425,154621,27034],{"class":1155},[425,154623,154534],{"class":701},[425,154625,154626,154629,154631,154633,154635],{"class":427,"line":721},[425,154627,154628],{"class":701},"    category ",[425,154630,1204],{"class":1155},[425,154632,154544],{"class":701},[425,154634,154393],{"class":435},[425,154636,34001],{"class":701},[425,154638,154639,154641,154643,154645,154647],{"class":427,"line":735},[425,154640,154553],{"class":701},[425,154642,1204],{"class":1155},[425,154644,154544],{"class":701},[425,154646,84839],{"class":435},[425,154648,34001],{"class":701},[425,154650,154651,154654,154656,154659,154661,154663,154665],{"class":427,"line":743},[425,154652,154653],{"class":701},"    category_total[category] ",[425,154655,1204],{"class":1155},[425,154657,154658],{"class":701}," category_total.get(category, ",[425,154660,1341],{"class":691},[425,154662,938],{"class":701},[425,154664,1629],{"class":1155},[425,154666,154580],{"class":701},[425,154668,154669],{"class":427,"line":751},[425,154670,3400],{"emptyLinePlaceholder":1084},[425,154672,154673,154675],{"class":427,"line":759},[425,154674,31170],{"class":691},[425,154676,154677],{"class":701},"(category_total)\n",[14,154679,154681],{"id":154680},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[416,154683,154685],{"className":31133,"code":154684,"language":31135,"meta":395,"style":395},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[422,154686,154687,154712],{"__ignoreMap":395},[425,154688,154689,154692,154694,154696,154699,154702,154705,154708,154710],{"class":427,"line":428},[425,154690,154691],{"class":701},"top_date, top_amount ",[425,154693,1204],{"class":1155},[425,154695,6951],{"class":691},[425,154697,154698],{"class":701},"(daily_total.items(), ",[425,154700,154701],{"class":6216},"key",[425,154703,154704],{"class":1155},"=lambda",[425,154706,154707],{"class":701}," item: item[",[425,154709,1367],{"class":691},[425,154711,5657],{"class":701},[425,154713,154714,154716],{"class":427,"line":698},[425,154715,31170],{"class":691},[425,154717,154718],{"class":701},"(top_date, top_amount)\n",[1099,154720,154722],{"id":154721},"_126-绘制柱状图","12.6 绘制柱状图",[416,154724,154726],{"className":31133,"code":154725,"language":31135,"meta":395,"style":395},"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",[422,154727,154728,154742,154753,154757,154765,154777,154789,154800,154804,154808,154818,154829,154843,154848,154865,154882,154898,154902],{"__ignoreMap":395},[425,154729,154730,154732,154734,154736,154738,154740],{"class":427,"line":428},[425,154731,31492],{"class":1155},[425,154733,148134],{"class":701},[425,154735,31147],{"class":1155},[425,154737,148139],{"class":701},[425,154739,32138],{"class":1155},[425,154741,148144],{"class":701},[425,154743,154744,154746,154748,154750],{"class":427,"line":698},[425,154745,31492],{"class":1155},[425,154747,147993],{"class":701},[425,154749,31147],{"class":1155},[425,154751,154752],{"class":701}," Bar\n",[425,154754,154755],{"class":427,"line":710},[425,154756,3400],{"emptyLinePlaceholder":1084},[425,154758,154759,154761,154763],{"class":427,"line":721},[425,154760,154605],{"class":701},[425,154762,1204],{"class":1155},[425,154764,16569],{"class":701},[425,154766,154767,154770,154772,154775],{"class":427,"line":735},[425,154768,154769],{"class":435},"    \"手机\"",[425,154771,52192],{"class":701},[425,154773,154774],{"class":691},"27000",[425,154776,32221],{"class":701},[425,154778,154779,154782,154784,154787],{"class":427,"line":743},[425,154780,154781],{"class":435},"    \"电脑\"",[425,154783,52192],{"class":701},[425,154785,154786],{"class":691},"34000",[425,154788,32221],{"class":701},[425,154790,154791,154794,154796,154798],{"class":427,"line":751},[425,154792,154793],{"class":435},"    \"耳机\"",[425,154795,52192],{"class":701},[425,154797,125154],{"class":691},[425,154799,32221],{"class":701},[425,154801,154802],{"class":427,"line":759},[425,154803,2578],{"class":701},[425,154805,154806],{"class":427,"line":770},[425,154807,3400],{"emptyLinePlaceholder":1084},[425,154809,154810,154813,154815],{"class":427,"line":780},[425,154811,154812],{"class":701},"bar ",[425,154814,1204],{"class":1155},[425,154816,154817],{"class":701}," Bar()\n",[425,154819,154820,154823,154826],{"class":427,"line":790},[425,154821,154822],{"class":701},"bar.add_xaxis(",[425,154824,154825],{"class":691},"list",[425,154827,154828],{"class":701},"(category_total.keys()))\n",[425,154830,154831,154834,154836,154838,154840],{"class":427,"line":805},[425,154832,154833],{"class":701},"bar.add_yaxis(",[425,154835,148050],{"class":435},[425,154837,13434],{"class":701},[425,154839,154825],{"class":691},[425,154841,154842],{"class":701},"(category_total.values()))\n",[425,154844,154845],{"class":427,"line":818},[425,154846,154847],{"class":701},"bar.set_global_opts(\n",[425,154849,154850,154852,154854,154856,154858,154860,154863],{"class":427,"line":831},[425,154851,148228],{"class":6216},[425,154853,1204],{"class":1155},[425,154855,148233],{"class":701},[425,154857,52162],{"class":6216},[425,154859,1204],{"class":1155},[425,154861,154862],{"class":435},"\"品类销售额\"",[425,154864,38802],{"class":701},[425,154866,154867,154869,154871,154873,154875,154877,154880],{"class":427,"line":841},[425,154868,148247],{"class":6216},[425,154870,1204],{"class":1155},[425,154872,148252],{"class":701},[425,154874,80565],{"class":6216},[425,154876,1204],{"class":1155},[425,154878,154879],{"class":435},"\"品类\"",[425,154881,38802],{"class":701},[425,154883,154884,154886,154888,154890,154892,154894,154896],{"class":427,"line":852},[425,154885,148266],{"class":6216},[425,154887,1204],{"class":1155},[425,154889,148252],{"class":701},[425,154891,80565],{"class":6216},[425,154893,1204],{"class":1155},[425,154895,148050],{"class":435},[425,154897,38802],{"class":701},[425,154899,154900],{"class":427,"line":862},[425,154901,1165],{"class":701},[425,154903,154904,154907,154910],{"class":427,"line":878},[425,154905,154906],{"class":701},"bar.render(",[425,154908,154909],{"class":435},"\"category_sales.html\"",[425,154911,1165],{"class":701},[1099,154913,154915],{"id":154914},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,154917,154918],{},"时间线适合展示不同日期、月份、年份的数据变化。",[416,154920,154922],{"className":31133,"code":154921,"language":31135,"meta":395,"style":395},"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",[422,154923,154924,154938,154949,154953,154961,154985,155008,155033,155037,155041,155051,155055,155066,155075,155085,155099,155130,155135,155139],{"__ignoreMap":395},[425,154925,154926,154928,154930,154932,154934,154936],{"class":427,"line":428},[425,154927,31492],{"class":1155},[425,154929,148134],{"class":701},[425,154931,31147],{"class":1155},[425,154933,148139],{"class":701},[425,154935,32138],{"class":1155},[425,154937,148144],{"class":701},[425,154939,154940,154942,154944,154946],{"class":427,"line":698},[425,154941,31492],{"class":1155},[425,154943,147993],{"class":701},[425,154945,31147],{"class":1155},[425,154947,154948],{"class":701}," Bar, Timeline\n",[425,154950,154951],{"class":427,"line":710},[425,154952,3400],{"emptyLinePlaceholder":1084},[425,154954,154955,154957,154959],{"class":427,"line":721},[425,154956,102413],{"class":701},[425,154958,1204],{"class":1155},[425,154960,16569],{"class":701},[425,154962,154963,154966,154969,154971,154973,154975,154977,154979,154981,154983],{"class":427,"line":735},[425,154964,154965],{"class":435},"    \"2024-10-01\"",[425,154967,154968],{"class":701},": {",[425,154970,154398],{"class":435},[425,154972,52192],{"class":701},[425,154974,154407],{"class":691},[425,154976,13434],{"class":701},[425,154978,154428],{"class":435},[425,154980,52192],{"class":701},[425,154982,154437],{"class":691},[425,154984,5930],{"class":701},[425,154986,154987,154990,154992,154994,154996,154998,155000,155002,155004,155006],{"class":427,"line":743},[425,154988,154989],{"class":435},"    \"2024-10-02\"",[425,154991,154968],{"class":701},[425,154993,154398],{"class":435},[425,154995,52192],{"class":701},[425,154997,154466],{"class":691},[425,154999,13434],{"class":701},[425,155001,154428],{"class":435},[425,155003,52192],{"class":701},[425,155005,154495],{"class":691},[425,155007,5930],{"class":701},[425,155009,155010,155013,155015,155017,155019,155022,155024,155026,155028,155031],{"class":427,"line":751},[425,155011,155012],{"class":435},"    \"2024-10-03\"",[425,155014,154968],{"class":701},[425,155016,154398],{"class":435},[425,155018,52192],{"class":701},[425,155020,155021],{"class":691},"17000",[425,155023,13434],{"class":701},[425,155025,154428],{"class":435},[425,155027,52192],{"class":701},[425,155029,155030],{"class":691},"19000",[425,155032,5930],{"class":701},[425,155034,155035],{"class":427,"line":759},[425,155036,2578],{"class":701},[425,155038,155039],{"class":427,"line":770},[425,155040,3400],{"emptyLinePlaceholder":1084},[425,155042,155043,155046,155048],{"class":427,"line":780},[425,155044,155045],{"class":701},"timeline ",[425,155047,1204],{"class":1155},[425,155049,155050],{"class":701}," Timeline()\n",[425,155052,155053],{"class":427,"line":790},[425,155054,3400],{"emptyLinePlaceholder":1084},[425,155056,155057,155059,155062,155064],{"class":427,"line":805},[425,155058,4025],{"class":1155},[425,155060,155061],{"class":701}," date, category_data ",[425,155063,27034],{"class":1155},[425,155065,149903],{"class":701},[425,155067,155068,155071,155073],{"class":427,"line":818},[425,155069,155070],{"class":701},"    bar ",[425,155072,1204],{"class":1155},[425,155074,154817],{"class":701},[425,155076,155077,155080,155082],{"class":427,"line":831},[425,155078,155079],{"class":701},"    bar.add_xaxis(",[425,155081,154825],{"class":691},[425,155083,155084],{"class":701},"(category_data.keys()))\n",[425,155086,155087,155090,155092,155094,155096],{"class":427,"line":841},[425,155088,155089],{"class":701},"    bar.add_yaxis(",[425,155091,148050],{"class":435},[425,155093,13434],{"class":701},[425,155095,154825],{"class":691},[425,155097,155098],{"class":701},"(category_data.values()))\n",[425,155100,155101,155104,155107,155109,155111,155113,155115,155117,155119,155121,155123,155125,155128],{"class":427,"line":852},[425,155102,155103],{"class":701},"    bar.set_global_opts(",[425,155105,155106],{"class":6216},"title_opts",[425,155108,1204],{"class":1155},[425,155110,148233],{"class":701},[425,155112,52162],{"class":6216},[425,155114,1204],{"class":1155},[425,155116,1210],{"class":1155},[425,155118,1400],{"class":435},[425,155120,2043],{"class":691},[425,155122,74681],{"class":701},[425,155124,2093],{"class":691},[425,155126,155127],{"class":435},"销售额\"",[425,155129,31252],{"class":701},[425,155131,155132],{"class":427,"line":862},[425,155133,155134],{"class":701},"    timeline.add(bar, date)\n",[425,155136,155137],{"class":427,"line":878},[425,155138,3400],{"emptyLinePlaceholder":1084},[425,155140,155141,155144,155147],{"class":427,"line":914},[425,155142,155143],{"class":701},"timeline.render(",[425,155145,155146],{"class":435},"\"timeline_sales.html\"",[425,155148,1165],{"class":701},[1099,155150,155152],{"id":155151},"_128-绘制地图","12.8 绘制地图",[19,155154,155155],{},"地图适合展示地区数据。",[416,155157,155159],{"className":31133,"code":155158,"language":31135,"meta":395,"style":395},"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",[422,155160,155161,155175,155186,155190,155198,155211,155223,155236,155249,155253,155257,155267,155282,155287,155304,155323,155327],{"__ignoreMap":395},[425,155162,155163,155165,155167,155169,155171,155173],{"class":427,"line":428},[425,155164,31492],{"class":1155},[425,155166,148134],{"class":701},[425,155168,31147],{"class":1155},[425,155170,148139],{"class":701},[425,155172,32138],{"class":1155},[425,155174,148144],{"class":701},[425,155176,155177,155179,155181,155183],{"class":427,"line":698},[425,155178,31492],{"class":1155},[425,155180,147993],{"class":701},[425,155182,31147],{"class":1155},[425,155184,155185],{"class":701}," Map\n",[425,155187,155188],{"class":427,"line":710},[425,155189,3400],{"emptyLinePlaceholder":1084},[425,155191,155192,155194,155196],{"class":427,"line":721},[425,155193,102413],{"class":701},[425,155195,1204],{"class":1155},[425,155197,56202],{"class":701},[425,155199,155200,155203,155205,155207,155209],{"class":427,"line":735},[425,155201,155202],{"class":701},"    (",[425,155204,70024],{"class":435},[425,155206,13434],{"class":701},[425,155208,1965],{"class":691},[425,155210,38802],{"class":701},[425,155212,155213,155215,155217,155219,155221],{"class":427,"line":743},[425,155214,155202],{"class":701},[425,155216,70044],{"class":435},[425,155218,13434],{"class":701},[425,155220,148067],{"class":691},[425,155222,38802],{"class":701},[425,155224,155225,155227,155230,155232,155234],{"class":427,"line":751},[425,155226,155202],{"class":701},[425,155228,155229],{"class":435},"\"广东\"",[425,155231,13434],{"class":701},[425,155233,2724],{"class":691},[425,155235,38802],{"class":701},[425,155237,155238,155240,155243,155245,155247],{"class":427,"line":759},[425,155239,155202],{"class":701},[425,155241,155242],{"class":435},"\"浙江\"",[425,155244,13434],{"class":701},[425,155246,148072],{"class":691},[425,155248,38802],{"class":701},[425,155250,155251],{"class":427,"line":770},[425,155252,34001],{"class":701},[425,155254,155255],{"class":427,"line":780},[425,155256,3400],{"emptyLinePlaceholder":1084},[425,155258,155259,155262,155264],{"class":427,"line":790},[425,155260,155261],{"class":701},"map_chart ",[425,155263,1204],{"class":1155},[425,155265,155266],{"class":701}," Map()\n",[425,155268,155269,155272,155274,155277,155280],{"class":427,"line":805},[425,155270,155271],{"class":701},"map_chart.add(",[425,155273,148050],{"class":435},[425,155275,155276],{"class":701},", data, ",[425,155278,155279],{"class":435},"\"china\"",[425,155281,1165],{"class":701},[425,155283,155284],{"class":427,"line":818},[425,155285,155286],{"class":701},"map_chart.set_global_opts(\n",[425,155288,155289,155291,155293,155295,155297,155299,155302],{"class":427,"line":831},[425,155290,148228],{"class":6216},[425,155292,1204],{"class":1155},[425,155294,148233],{"class":701},[425,155296,52162],{"class":6216},[425,155298,1204],{"class":1155},[425,155300,155301],{"class":435},"\"地区销售额\"",[425,155303,38802],{"class":701},[425,155305,155306,155309,155311,155314,155317,155319,155321],{"class":427,"line":841},[425,155307,155308],{"class":6216},"    visualmap_opts",[425,155310,1204],{"class":1155},[425,155312,155313],{"class":701},"opts.VisualMapOpts(",[425,155315,155316],{"class":6216},"max_",[425,155318,1204],{"class":1155},[425,155320,2724],{"class":691},[425,155322,38802],{"class":701},[425,155324,155325],{"class":427,"line":852},[425,155326,1165],{"class":701},[425,155328,155329,155332,155335],{"class":427,"line":862},[425,155330,155331],{"class":701},"map_chart.render(",[425,155333,155334],{"class":435},"\"map_sales.html\"",[425,155336,1165],{"class":701},[19,155338,155339],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[1099,155341,155343],{"id":155342},"_129-项目拆分建议","12.9 项目拆分建议",[19,155345,155346],{},"当代码超过一个文件时，可以这样组织：",[416,155348,155351],{"className":155349,"code":155350,"language":6187,"meta":395},[6185],"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",[422,155352,155350],{"__ignoreMap":395},[19,155354,155355],{},"职责：",[972,155357,155358,155364,155370,155376],{},[450,155359,155360,155363],{},[422,155361,155362],{},"main.py","：程序入口。",[450,155365,155366,155369],{},[422,155367,155368],{},"file_utils.py","：读写 JSON。",[450,155371,155372,155375],{},[422,155373,155374],{},"sales_service.py","：统计销售数据。",[450,155377,155378,155381],{},[422,155379,155380],{},"chart_builder.py","：生成图表。",[1099,155383,155385],{"id":155384},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,155387,155388],{},"语法基础：",[972,155390,155391,155394,155397,155400],{},[450,155392,155393],{},"会写变量、注释、输入输出。",[450,155395,155396],{},"会使用 int、float、str、bool。",[450,155398,155399],{},"会做类型转换。",[450,155401,155402],{},"会使用 f-string 格式化输出。",[19,155404,155405],{},"流程控制：",[972,155407,155408,155414,155420,155428],{},[450,155409,155410,155411,998],{},"会写 ",[422,155412,155413],{},"if elif else",[450,155415,155410,155416,101773,155418,998],{},[422,155417,109418],{},[422,155419,4025],{},[450,155421,155422,155423,101773,155425,998],{},"理解 ",[422,155424,3053],{},[422,155426,155427],{},"continue",[450,155429,155430],{},"能写嵌套循环。",[19,155432,155433],{},"函数：",[972,155435,155436,155439,155442,155445],{},[450,155437,155438],{},"会定义和调用函数。",[450,155440,155441],{},"理解参数和返回值。",[450,155443,155444],{},"知道局部变量和全局变量。",[450,155446,155447],{},"会使用默认参数、关键字参数、不定长参数。",[19,155449,155450],{},"容器：",[972,155452,155453,155456,155459,155462,155465],{},[450,155454,155455],{},"会使用列表增删改查。",[450,155457,155458],{},"会遍历列表、字典。",[450,155460,155461],{},"会使用切片。",[450,155463,155464],{},"会用集合去重。",[450,155466,155467],{},"会处理列表嵌套字典。",[19,155469,155470],{},"文件和模块：",[972,155472,155473,155476,155479,155482,155485],{},[450,155474,155475],{},"会读写文本文件。",[450,155477,155478],{},"会读写 JSON。",[450,155480,155481],{},"会捕获常见异常。",[450,155483,155484],{},"会导入模块和第三方包。",[450,155486,155487],{},"会创建简单包结构。",[19,155489,155490],{},"项目能力：",[972,155492,155493,155496,155499,155502,155505],{},[450,155494,155495],{},"能把代码拆成函数。",[450,155497,155498],{},"能把数据保存到文件。",[450,155500,155501],{},"能处理用户输入错误。",[450,155503,155504],{},"能写一个完整菜单程序。",[450,155506,155507],{},"能用 pyecharts 生成图表。",[1099,155509,155511],{"id":155510},"_1211-推荐练习顺序","12.11 推荐练习顺序",[972,155513,155514,155517,155520,155523,155526,155529,155532,155535],{},[450,155515,155516],{},"猜数字游戏。",[450,155518,155519],{},"ATM 菜单程序。",[450,155521,155522],{},"学生成绩统计。",[450,155524,155525],{},"学生管理系统函数版。",[450,155527,155528],{},"学生管理系统文件持久化版。",[450,155530,155531],{},"学生管理系统面向对象版。",[450,155533,155534],{},"销售数据统计。",[450,155536,155537],{},"销售数据可视化。",[1099,155539,155541],{"id":155540},"_1212-常见学习误区","12.12 常见学习误区",[972,155543,155544,155547,155550,155553,155556,155559,155562],{},[450,155545,155546],{},"只看视频不敲代码。",[450,155548,155549],{},"一报错就复制错误去搜，不先读报错位置。",[450,155551,155552],{},"变量名随便写，后续自己看不懂。",[450,155554,155555],{},"所有代码都写在一个文件一个函数里。",[450,155557,155558],{},"不保存练习代码，复习时没有材料。",[450,155560,155561],{},"还没掌握列表字典就急着学框架。",[450,155563,155564],{},"不会读官方文档，只依赖教程。",[1099,155566,155568],{"id":155567},"_1213-如何读报错","12.13 如何读报错",[19,155570,155571],{},"报错通常从下往上看最后几行。",[19,155573,16132],{},[416,155575,155578],{"className":155576,"code":155577,"language":6187,"meta":395},[6185],"ValueError: invalid literal for int() with base 10: 'abc'\n",[422,155579,155577],{"__ignoreMap":395},[19,155581,25592],{},[972,155583,155584,155590,155600],{},[450,155585,155586,155587,998],{},"异常类型是 ",[422,155588,155589],{},"ValueError",[450,155591,108100,155592,155595,155596,155599],{},[422,155593,155594],{},"int()"," 无法把 ",[422,155597,155598],{},"'abc'"," 转成整数。",[450,155601,155602],{},"应该检查输入内容或增加异常处理。",[19,155604,155605],{},"再看文件名和行号：",[416,155607,155610],{"className":155608,"code":155609,"language":6187,"meta":395},[6185],"File \"main.py\", line 10, in \u003Cmodule>\n",[422,155611,155609],{"__ignoreMap":395},[19,155613,155614,155615,155617],{},"表示错误发生在 ",[422,155616,155362],{}," 第 10 行。",[1099,155619,155621],{"id":155620},"_1214-后续学习方向","12.14 后续学习方向",[19,155623,155624],{},"Python 基础完成后，可以按兴趣选择方向：",[972,155626,155627,155639,155648,155660,155671,155680,155690],{},[450,155628,155629,155630,1362,155633,1362,155636,998],{},"自动化办公：",[422,155631,155632],{},"openpyxl",[422,155634,155635],{},"python-docx",[422,155637,155638],{},"pdfplumber",[450,155640,155641,155642,1362,155644,1362,155646,998],{},"数据分析：",[422,155643,101381],{},[422,155645,146940],{},[422,155647,146948],{},[450,155649,155650,155651,1362,155654,1362,155657,998],{},"Web 后端：",[422,155652,155653],{},"Flask",[422,155655,155656],{},"FastAPI",[422,155658,155659],{},"Django",[450,155661,155662,155663,1362,155665,1362,155668,998],{},"爬虫：",[422,155664,146925],{},[422,155666,155667],{},"BeautifulSoup",[422,155669,155670],{},"Scrapy",[450,155672,155673,155674,1362,155676,155679],{},"测试开发：",[422,155675,146972],{},[422,155677,155678],{},"selenium","、接口测试。",[450,155681,155682,155683,1362,155685,1362,155687,998],{},"人工智能：",[422,155684,101381],{},[422,155686,146940],{},[422,155688,155689],{},"pytorch",[450,155691,155692,155693,1362,155695,1362,155698,998],{},"运维脚本：",[422,155694,146541],{},[422,155696,155697],{},"subprocess",[422,155699,155700],{},"paramiko",[19,155702,155703],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[1099,155705,155707],{"id":155706},"_1215-结课练习","12.15 结课练习",[972,155709,155710,155713,155716,155719,155722,155725,155728,155731],{},[450,155711,155712],{},"完成函数版学生管理系统。",[450,155714,155715],{},"给学生管理系统增加 JSON 持久化。",[450,155717,155718],{},"给学生管理系统增加异常处理。",[450,155720,155721],{},"把学生管理系统改成面向对象版。",[450,155723,155724],{},"使用 pyecharts 绘制学生成绩柱状图。",[450,155726,155727],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[450,155729,155730],{},"按品类统计销售额并绘制柱状图。",[450,155732,155733],{},"写一份自己的 Python 学习路线图。",[1074,155735,155736],{},"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":395,"searchDepth":698,"depth":698,"links":155738},[155739,155740,155743,155744,155745,155751,155752,155753,155754,155755,155756,155757,155758,155759,155760],{"id":152455,"depth":698,"text":152456},{"id":152505,"depth":698,"text":152506,"children":155741},[155742],{"id":152509,"depth":710,"text":152510},{"id":152548,"depth":698,"text":152549},{"id":154022,"depth":698,"text":154023},{"id":154360,"depth":698,"text":154361,"children":155746},[155747,155748,155749,155750],{"id":154364,"depth":710,"text":154365},{"id":154504,"depth":710,"text":154505},{"id":154594,"depth":710,"text":154595},{"id":154680,"depth":710,"text":154681},{"id":154721,"depth":698,"text":154722},{"id":154914,"depth":698,"text":154915},{"id":155151,"depth":698,"text":155152},{"id":155342,"depth":698,"text":155343},{"id":155384,"depth":698,"text":155385},{"id":155510,"depth":698,"text":155511},{"id":155540,"depth":698,"text":155541},{"id":155567,"depth":698,"text":155568},{"id":155620,"depth":698,"text":155621},{"id":155706,"depth":698,"text":155707},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152447,"description":24374},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155767,"title":155768,"body":155769,"description":24374,"extension":1082,"meta":158238,"navigation":1084,"path":158239,"seo":158240,"stem":158241,"__hash__":158242},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155770,"toc":158213},[155771,155774,155778,155781,155784,155804,155807,155830,155833,155836,155858,155861,155883,155887,155890,155930,155933,156054,156058,156061,156101,156104,156128,156131,156135,156138,156152,156185,156188,156223,156226,156249,156252,156285,156288,156290,156296,156371,156374,156380,156397,156437,156441,156444,156490,156492,156530,156533,156568,156571,156606,156609,156641,156644,156663,156667,156671,156784,156786,156861,156865,156911,156914,156940,156949,156953,156956,157019,157027,157055,157059,157099,157164,157168,157171,157210,157213,157258,157261,157322,157326,157353,157356,157384,157387,157391,157395,157460,157463,157501,157504,157536,157540,157639,157643,157646,157719,157722,157770,157774,157780,157820,157823,157870,157873,157922,157926,157928,157942,157944,158125,158129,158156,158176,158183,158187,158204,158210],[10,155772,155768],{"id":155773},"_2-基础语法变量与字符串",[1099,155775,155777],{"id":155776},"_21-注释","2.1 注释",[19,155779,155780],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,155782,155783],{},"单行注释：",[416,155785,155787],{"className":31133,"code":155786,"language":31135,"meta":395,"style":395},"# 这是单行注释\nprint(\"hello\")\n",[422,155788,155789,155794],{"__ignoreMap":395},[425,155790,155791],{"class":427,"line":428},[425,155792,155793],{"class":1216},"# 这是单行注释\n",[425,155795,155796,155798,155800,155802],{"class":427,"line":698},[425,155797,31170],{"class":691},[425,155799,1159],{"class":701},[425,155801,6844],{"class":435},[425,155803,1165],{"class":701},[19,155805,155806],{},"多行说明常用三引号：",[416,155808,155810],{"className":31133,"code":155809,"language":31135,"meta":395,"style":395},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[422,155811,155812,155816,155821,155826],{"__ignoreMap":395},[425,155813,155814],{"class":427,"line":428},[425,155815,96453],{"class":435},[425,155817,155818],{"class":427,"line":698},[425,155819,155820],{"class":435},"这是多行说明。\n",[425,155822,155823],{"class":427,"line":710},[425,155824,155825],{"class":435},"常用于文件顶部说明、函数说明等。\n",[425,155827,155828],{"class":427,"line":721},[425,155829,96453],{"class":435},[19,155831,155832],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,155834,155835],{},"不好：",[416,155837,155839],{"className":31133,"code":155838,"language":31135,"meta":395,"style":395},"# age 加 1\nage = age + 1\n",[422,155840,155841,155846],{"__ignoreMap":395},[425,155842,155843],{"class":427,"line":428},[425,155844,155845],{"class":1216},"# age 加 1\n",[425,155847,155848,155850,155852,155854,155856],{"class":427,"line":698},[425,155849,147301],{"class":701},[425,155851,1204],{"class":1155},[425,155853,16704],{"class":701},[425,155855,1629],{"class":1155},[425,155857,56454],{"class":691},[19,155859,155860],{},"较好：",[416,155862,155864],{"className":31133,"code":155863,"language":31135,"meta":395,"style":395},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[422,155865,155866,155871],{"__ignoreMap":395},[425,155867,155868],{"class":427,"line":428},[425,155869,155870],{"class":1216},"# 用户过完生日后，年龄增加一岁\n",[425,155872,155873,155875,155877,155879,155881],{"class":427,"line":698},[425,155874,147301],{"class":701},[425,155876,1204],{"class":1155},[425,155878,16704],{"class":701},[425,155880,1629],{"class":1155},[425,155882,56454],{"class":691},[1099,155884,155886],{"id":155885},"_22-字面量","2.2 字面量",[19,155888,155889],{},"字面量就是代码中直接写出来的数据。",[416,155891,155893],{"className":31133,"code":155892,"language":31135,"meta":395,"style":395},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[422,155894,155895,155902,155909,155916,155923],{"__ignoreMap":395},[425,155896,155897,155899],{"class":427,"line":428},[425,155898,1460],{"class":691},[425,155900,155901],{"class":1216},"          # 整数\n",[425,155903,155904,155906],{"class":427,"line":698},[425,155905,1207],{"class":691},[425,155907,155908],{"class":1216},"         # 小数\n",[425,155910,155911,155913],{"class":427,"line":710},[425,155912,6844],{"class":435},[425,155914,155915],{"class":1216},"      # 字符串\n",[425,155917,155918,155920],{"class":427,"line":721},[425,155919,32231],{"class":691},[425,155921,155922],{"class":1216},"         # 布尔值\n",[425,155924,155925,155927],{"class":427,"line":735},[425,155926,96441],{"class":691},[425,155928,155929],{"class":1216},"         # 空值\n",[19,155931,155932],{},"常见字面量类型：",[35,155934,155935,155945],{},[38,155936,155937],{},[41,155938,155939,155941,155943],{},[44,155940,24733],{},[44,155942,53],{},[44,155944,26860],{},[55,155946,155947,155958,155969,155980,155992,156004,156016,156029,156041],{},[41,155948,155949,155951,155955],{},[60,155950,1162],{},[60,155952,155953],{},[422,155954,1460],{},[60,155956,155957],{},"整数",[41,155959,155960,155962,155966],{},[60,155961,1198],{},[60,155963,155964],{},[422,155965,1207],{},[60,155967,155968],{},"浮点数",[41,155970,155971,155973,155977],{},[60,155972,2316],{},[60,155974,155975],{},[422,155976,6844],{},[60,155978,155979],{},"字符串",[41,155981,155982,155984,155990],{},[60,155983,2368],{},[60,155985,155986,1362,155988],{},[422,155987,32231],{},[422,155989,34742],{},[60,155991,66770],{},[41,155993,155994,155997,156001],{},[60,155995,155996],{},"NoneType",[60,155998,155999],{},[422,156000,96441],{},[60,156002,156003],{},"空值",[41,156005,156006,156008,156013],{},[60,156007,154825],{},[60,156009,156010],{},[422,156011,156012],{},"[1, 2, 3]",[60,156014,156015],{},"列表",[41,156017,156018,156021,156026],{},[60,156019,156020],{},"tuple",[60,156022,156023],{},[422,156024,156025],{},"(1, 2, 3)",[60,156027,156028],{},"元组",[41,156030,156031,156033,156038],{},[60,156032,115301],{},[60,156034,156035],{},[422,156036,156037],{},"{\"name\": \"张三\"}",[60,156039,156040],{},"字典",[41,156042,156043,156046,156051],{},[60,156044,156045],{},"set",[60,156047,156048],{},[422,156049,156050],{},"{1, 2, 3}",[60,156052,156053],{},"集合",[1099,156055,156057],{"id":156056},"_23-变量","2.3 变量",[19,156059,156060],{},"变量是保存数据的名字。",[416,156062,156064],{"className":31133,"code":156063,"language":31135,"meta":395,"style":395},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[422,156065,156066,156074,156082,156092],{"__ignoreMap":395},[425,156067,156068,156070,156072],{"class":427,"line":428},[425,156069,147291],{"class":701},[425,156071,1204],{"class":1155},[425,156073,150108],{"class":435},[425,156075,156076,156078,156080],{"class":427,"line":698},[425,156077,147301],{"class":701},[425,156079,1204],{"class":1155},[425,156081,147306],{"class":691},[425,156083,156084,156087,156089],{"class":427,"line":710},[425,156085,156086],{"class":701},"height ",[425,156088,1204],{"class":1155},[425,156090,156091],{"class":691}," 1.75\n",[425,156093,156094,156097,156099],{"class":427,"line":721},[425,156095,156096],{"class":701},"is_student ",[425,156098,1204],{"class":1155},[425,156100,154354],{"class":691},[19,156102,156103],{},"Python 的变量不需要提前声明类型：",[416,156105,156107],{"className":31133,"code":156106,"language":31135,"meta":395,"style":395},"score = 100\nscore = \"满分\"\n",[422,156108,156109,156119],{"__ignoreMap":395},[425,156110,156111,156114,156116],{"class":427,"line":428},[425,156112,156113],{"class":701},"score ",[425,156115,1204],{"class":1155},[425,156117,156118],{"class":691}," 100\n",[425,156120,156121,156123,156125],{"class":427,"line":698},[425,156122,156113],{"class":701},[425,156124,1204],{"class":1155},[425,156126,156127],{"class":435}," \"满分\"\n",[19,156129,156130],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[1099,156132,156134],{"id":156133},"_24-变量命名规则","2.4 变量命名规则",[19,156136,156137],{},"硬性规则：",[972,156139,156140,156143,156146,156149],{},[450,156141,156142],{},"只能由字母、数字、下划线组成。",[450,156144,156145],{},"不能以数字开头。",[450,156147,156148],{},"不能使用 Python 关键字。",[450,156150,156151],{},"区分大小写。",[416,156153,156155],{"className":31133,"code":156154,"language":31135,"meta":395,"style":395},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[422,156156,156157,156166,156175],{"__ignoreMap":395},[425,156158,156159,156162,156164],{"class":427,"line":428},[425,156160,156161],{"class":701},"user_name ",[425,156163,1204],{"class":1155},[425,156165,147296],{"class":435},[425,156167,156168,156171,156173],{"class":427,"line":698},[425,156169,156170],{"class":701},"age2 ",[425,156172,1204],{"class":1155},[425,156174,147306],{"class":691},[425,156176,156177,156180,156182],{"class":427,"line":710},[425,156178,156179],{"class":701},"_token ",[425,156181,1204],{"class":1155},[425,156183,156184],{"class":435}," \"abc\"\n",[19,156186,156187],{},"错误写法：",[416,156189,156191],{"className":31133,"code":156190,"language":31135,"meta":395,"style":395},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[422,156192,156193,156202,156214],{"__ignoreMap":395},[425,156194,156195,156198,156200],{"class":427,"line":428},[425,156196,156197],{"class":78158},"2age",[425,156199,14563],{"class":1155},[425,156201,147306],{"class":691},[425,156203,156204,156206,156208,156210,156212],{"class":427,"line":698},[425,156205,132339],{"class":701},[425,156207,1680],{"class":1155},[425,156209,147291],{"class":701},[425,156211,1204],{"class":1155},[425,156213,147296],{"class":435},[425,156215,156216,156218,156220],{"class":427,"line":710},[425,156217,15691],{"class":1155},[425,156219,14563],{"class":1155},[425,156221,156222],{"class":435}," \"一班\"\n",[19,156224,156225],{},"查看关键字：",[416,156227,156229],{"className":31133,"code":156228,"language":31135,"meta":395,"style":395},"import keyword\n\nprint(keyword.kwlist)\n",[422,156230,156231,156238,156242],{"__ignoreMap":395},[425,156232,156233,156235],{"class":427,"line":428},[425,156234,31147],{"class":1155},[425,156236,156237],{"class":701}," keyword\n",[425,156239,156240],{"class":427,"line":698},[425,156241,3400],{"emptyLinePlaceholder":1084},[425,156243,156244,156246],{"class":427,"line":710},[425,156245,31170],{"class":691},[425,156247,156248],{"class":701},"(keyword.kwlist)\n",[19,156250,156251],{},"推荐命名风格：",[416,156253,156255],{"className":31133,"code":156254,"language":31135,"meta":395,"style":395},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[422,156256,156257,156266,156276],{"__ignoreMap":395},[425,156258,156259,156262,156264],{"class":427,"line":428},[425,156260,156261],{"class":701},"student_name ",[425,156263,1204],{"class":1155},[425,156265,150108],{"class":435},[425,156267,156268,156271,156273],{"class":427,"line":698},[425,156269,156270],{"class":701},"total_price ",[425,156272,1204],{"class":1155},[425,156274,156275],{"class":691}," 99.8\n",[425,156277,156278,156281,156283],{"class":427,"line":710},[425,156279,156280],{"class":701},"is_finished ",[425,156282,1204],{"class":1155},[425,156284,126562],{"class":691},[19,156286,156287],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[1099,156289,51487],{"id":51486},[19,156291,105121,156292,156295],{},[422,156293,156294],{},"type()"," 查看数据类型：",[416,156297,156299],{"className":31133,"code":156298,"language":31135,"meta":395,"style":395},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[422,156300,156301,156315,156329,156343,156357],{"__ignoreMap":395},[425,156302,156303,156305,156307,156309,156311,156313],{"class":427,"line":428},[425,156304,31170],{"class":691},[425,156306,1159],{"class":701},[425,156308,103862],{"class":691},[425,156310,1159],{"class":701},[425,156312,1460],{"class":691},[425,156314,31252],{"class":701},[425,156316,156317,156319,156321,156323,156325,156327],{"class":427,"line":698},[425,156318,31170],{"class":691},[425,156320,1159],{"class":701},[425,156322,103862],{"class":691},[425,156324,1159],{"class":701},[425,156326,1207],{"class":691},[425,156328,31252],{"class":701},[425,156330,156331,156333,156335,156337,156339,156341],{"class":427,"line":710},[425,156332,31170],{"class":691},[425,156334,1159],{"class":701},[425,156336,103862],{"class":691},[425,156338,1159],{"class":701},[425,156340,6844],{"class":435},[425,156342,31252],{"class":701},[425,156344,156345,156347,156349,156351,156353,156355],{"class":427,"line":721},[425,156346,31170],{"class":691},[425,156348,1159],{"class":701},[425,156350,103862],{"class":691},[425,156352,1159],{"class":701},[425,156354,32231],{"class":691},[425,156356,31252],{"class":701},[425,156358,156359,156361,156363,156365,156367,156369],{"class":427,"line":735},[425,156360,31170],{"class":691},[425,156362,1159],{"class":701},[425,156364,103862],{"class":691},[425,156366,1159],{"class":701},[425,156368,96441],{"class":691},[425,156370,31252],{"class":701},[19,156372,156373],{},"输出类似：",[416,156375,156378],{"className":156376,"code":156377,"language":6187,"meta":395},[6185],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[422,156379,156377],{"__ignoreMap":395},[19,156381,970,156382,108038,156384,156386,156387,156389,156390,22497,156392,156389,156394,156396],{},[422,156383,2368],{},[422,156385,1162],{}," 的子类，",[422,156388,32231],{}," 可以当作 ",[422,156391,1367],{},[422,156393,34742],{},[422,156395,1341],{},"，但业务代码中不要滥用。",[416,156398,156400],{"className":31133,"code":156399,"language":31135,"meta":395,"style":395},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[422,156401,156402,156420],{"__ignoreMap":395},[425,156403,156404,156406,156408,156410,156412,156414,156417],{"class":427,"line":428},[425,156405,31170],{"class":691},[425,156407,1159],{"class":701},[425,156409,32231],{"class":691},[425,156411,46321],{"class":1155},[425,156413,26109],{"class":691},[425,156415,156416],{"class":701},")   ",[425,156418,156419],{"class":1216},"# 2\n",[425,156421,156422,156424,156426,156428,156430,156432,156434],{"class":427,"line":698},[425,156423,31170],{"class":691},[425,156425,1159],{"class":701},[425,156427,34742],{"class":691},[425,156429,46321],{"class":1155},[425,156431,26109],{"class":691},[425,156433,46563],{"class":701},[425,156435,156436],{"class":1216},"# 1\n",[1099,156438,156440],{"id":156439},"_26-类型转换","2.6 类型转换",[19,156442,156443],{},"常用转换函数：",[416,156445,156447],{"className":31133,"code":156446,"language":31135,"meta":395,"style":395},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[422,156448,156449,156459,156470,156480],{"__ignoreMap":395},[425,156450,156451,156453,156455,156457],{"class":427,"line":428},[425,156452,1162],{"class":691},[425,156454,1159],{"class":701},[425,156456,55071],{"class":435},[425,156458,1165],{"class":701},[425,156460,156461,156463,156465,156468],{"class":427,"line":698},[425,156462,1198],{"class":691},[425,156464,1159],{"class":701},[425,156466,156467],{"class":435},"\"3.14\"",[425,156469,1165],{"class":701},[425,156471,156472,156474,156476,156478],{"class":427,"line":710},[425,156473,2316],{"class":691},[425,156475,1159],{"class":701},[425,156477,1460],{"class":691},[425,156479,1165],{"class":701},[425,156481,156482,156484,156486,156488],{"class":427,"line":721},[425,156483,2368],{"class":691},[425,156485,1159],{"class":701},[425,156487,1367],{"class":691},[425,156489,1165],{"class":701},[19,156491,16132],{},[416,156493,156495],{"className":31133,"code":156494,"language":31135,"meta":395,"style":395},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[422,156496,156497,156506,156517],{"__ignoreMap":395},[425,156498,156499,156501,156503],{"class":427,"line":428},[425,156500,147301],{"class":701},[425,156502,1204],{"class":1155},[425,156504,156505],{"class":435}," \"18\"\n",[425,156507,156508,156510,156512,156514],{"class":427,"line":698},[425,156509,147301],{"class":701},[425,156511,1204],{"class":1155},[425,156513,3382],{"class":691},[425,156515,156516],{"class":701},"(age)\n",[425,156518,156519,156521,156524,156526,156528],{"class":427,"line":710},[425,156520,31170],{"class":691},[425,156522,156523],{"class":701},"(age ",[425,156525,1629],{"class":1155},[425,156527,26109],{"class":691},[425,156529,1165],{"class":701},[19,156531,156532],{},"输入得到的内容永远是字符串：",[416,156534,156536],{"className":31133,"code":156535,"language":31135,"meta":395,"style":395},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[422,156537,156538,156554],{"__ignoreMap":395},[425,156539,156540,156543,156545,156547,156549,156552],{"class":427,"line":428},[425,156541,156542],{"class":701},"num ",[425,156544,1204],{"class":1155},[425,156546,61360],{"class":691},[425,156548,1159],{"class":701},[425,156550,156551],{"class":435},"\"请输入数字:\"",[425,156553,1165],{"class":701},[425,156555,156556,156558,156560,156562,156565],{"class":427,"line":698},[425,156557,31170],{"class":691},[425,156559,1159],{"class":701},[425,156561,103862],{"class":691},[425,156563,156564],{"class":701},"(num))  ",[425,156566,156567],{"class":1216},"# str\n",[19,156569,156570],{},"如果要做数学运算，必须转换：",[416,156572,156574],{"className":31133,"code":156573,"language":31135,"meta":395,"style":395},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[422,156575,156576,156594],{"__ignoreMap":395},[425,156577,156578,156580,156582,156584,156586,156588,156590,156592],{"class":427,"line":428},[425,156579,156542],{"class":701},[425,156581,1204],{"class":1155},[425,156583,3382],{"class":691},[425,156585,1159],{"class":701},[425,156587,54576],{"class":691},[425,156589,1159],{"class":701},[425,156591,156551],{"class":435},[425,156593,31252],{"class":701},[425,156595,156596,156598,156600,156602,156604],{"class":427,"line":698},[425,156597,31170],{"class":691},[425,156599,46374],{"class":701},[425,156601,1629],{"class":1155},[425,156603,3038],{"class":691},[425,156605,1165],{"class":701},[19,156607,156608],{},"常见错误：",[416,156610,156612],{"className":31133,"code":156611,"language":31135,"meta":395,"style":395},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[422,156613,156614,156627],{"__ignoreMap":395},[425,156615,156616,156618,156620,156622,156624],{"class":427,"line":428},[425,156617,1162],{"class":691},[425,156619,1159],{"class":701},[425,156621,156467],{"class":435},[425,156623,156416],{"class":701},[425,156625,156626],{"class":1216},"# 错误\n",[425,156628,156629,156631,156633,156636,156639],{"class":427,"line":698},[425,156630,1162],{"class":691},[425,156632,1159],{"class":701},[425,156634,156635],{"class":435},"\"abc\"",[425,156637,156638],{"class":701},")    ",[425,156640,156626],{"class":1216},[19,156642,156643],{},"正确写法：",[416,156645,156647],{"className":31133,"code":156646,"language":31135,"meta":395,"style":395},"num = float(\"3.14\")\n",[422,156648,156649],{"__ignoreMap":395},[425,156650,156651,156653,156655,156657,156659,156661],{"class":427,"line":428},[425,156652,156542],{"class":701},[425,156654,1204],{"class":1155},[425,156656,110552],{"class":691},[425,156658,1159],{"class":701},[425,156660,156467],{"class":435},[425,156662,1165],{"class":701},[1099,156664,156666],{"id":156665},"_27-运算符","2.7 运算符",[14,156668,156670],{"id":156669},"_271-算术运算符","2.7.1 算术运算符",[35,156672,156673,156684],{},[38,156674,156675],{},[41,156676,156677,156680,156682],{},[44,156678,156679],{},"运算符",[44,156681,26860],{},[44,156683,53],{},[55,156685,156686,156700,156714,156728,156742,156756,156770],{},[41,156687,156688,156692,156695],{},[60,156689,156690],{},[422,156691,1629],{},[60,156693,156694],{},"加法",[60,156696,156697],{},[422,156698,156699],{},"1 + 2",[41,156701,156702,156706,156709],{},[60,156703,156704],{},[422,156705,1680],{},[60,156707,156708],{},"减法",[60,156710,156711],{},[422,156712,156713],{},"5 - 3",[41,156715,156716,156720,156723],{},[60,156717,156718],{},[422,156719,1603],{},[60,156721,156722],{},"乘法",[60,156724,156725],{},[422,156726,156727],{},"2 * 3",[41,156729,156730,156734,156737],{},[60,156731,156732],{},[422,156733,1732],{},[60,156735,156736],{},"除法，结果是浮点数",[60,156738,156739],{},[422,156740,156741],{},"5 \u002F 2",[41,156743,156744,156748,156751],{},[60,156745,156746],{},[422,156747,34084],{},[60,156749,156750],{},"整除",[60,156752,156753],{},[422,156754,156755],{},"5 \u002F\u002F 2",[41,156757,156758,156762,156765],{},[60,156759,156760],{},[422,156761,1477],{},[60,156763,156764],{},"取余",[60,156766,156767],{},[422,156768,156769],{},"5 % 2",[41,156771,156772,156776,156779],{},[60,156773,156774],{},[422,156775,11660],{},[60,156777,156778],{},"幂运算",[60,156780,156781],{},[422,156782,156783],{},"2 ** 3",[19,156785,16132],{},[416,156787,156789],{"className":31133,"code":156788,"language":31135,"meta":395,"style":395},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[422,156790,156791,156809,156826,156843],{"__ignoreMap":395},[425,156792,156793,156795,156797,156799,156802,156804,156806],{"class":427,"line":428},[425,156794,31170],{"class":691},[425,156796,1159],{"class":701},[425,156798,1468],{"class":691},[425,156800,156801],{"class":1155}," \u002F",[425,156803,15752],{"class":691},[425,156805,156416],{"class":701},[425,156807,156808],{"class":1216},"# 2.5\n",[425,156810,156811,156813,156815,156817,156820,156822,156824],{"class":427,"line":698},[425,156812,31170],{"class":691},[425,156814,1159],{"class":701},[425,156816,1468],{"class":691},[425,156818,156819],{"class":1155}," \u002F\u002F",[425,156821,15752],{"class":691},[425,156823,46563],{"class":701},[425,156825,156419],{"class":1216},[425,156827,156828,156830,156832,156834,156837,156839,156841],{"class":427,"line":710},[425,156829,31170],{"class":691},[425,156831,1159],{"class":701},[425,156833,1468],{"class":691},[425,156835,156836],{"class":1155}," %",[425,156838,15752],{"class":691},[425,156840,156416],{"class":701},[425,156842,156436],{"class":1216},[425,156844,156845,156847,156849,156851,156854,156856,156858],{"class":427,"line":721},[425,156846,31170],{"class":691},[425,156848,1159],{"class":701},[425,156850,1235],{"class":691},[425,156852,156853],{"class":1155}," **",[425,156855,78825],{"class":691},[425,156857,46563],{"class":701},[425,156859,156860],{"class":1216},"# 8\n",[14,156862,156864],{"id":156863},"_272-赋值运算符","2.7.2 赋值运算符",[416,156866,156868],{"className":31133,"code":156867,"language":31135,"meta":395,"style":395},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[422,156869,156870,156878,156886,156894,156902],{"__ignoreMap":395},[425,156871,156872,156874,156876],{"class":427,"line":428},[425,156873,156542],{"class":701},[425,156875,1204],{"class":1155},[425,156877,59183],{"class":691},[425,156879,156880,156882,156884],{"class":427,"line":698},[425,156881,156542],{"class":701},[425,156883,10476],{"class":1155},[425,156885,55182],{"class":691},[425,156887,156888,156890,156892],{"class":427,"line":710},[425,156889,156542],{"class":701},[425,156891,151007],{"class":1155},[425,156893,48478],{"class":691},[425,156895,156896,156898,156900],{"class":427,"line":721},[425,156897,156542],{"class":701},[425,156899,137903],{"class":1155},[425,156901,120791],{"class":691},[425,156903,156904,156906,156909],{"class":427,"line":735},[425,156905,156542],{"class":701},[425,156907,156908],{"class":1155},"\u002F=",[425,156910,48478],{"class":691},[19,156912,156913],{},"等价关系：",[416,156915,156917],{"className":31133,"code":156916,"language":31135,"meta":395,"style":395},"num += 1\nnum = num + 1\n",[422,156918,156919,156927],{"__ignoreMap":395},[425,156920,156921,156923,156925],{"class":427,"line":428},[425,156922,156542],{"class":701},[425,156924,10476],{"class":1155},[425,156926,56454],{"class":691},[425,156928,156929,156931,156933,156936,156938],{"class":427,"line":698},[425,156930,156542],{"class":701},[425,156932,1204],{"class":1155},[425,156934,156935],{"class":701}," num ",[425,156937,1629],{"class":1155},[425,156939,56454],{"class":691},[19,156941,156942,156943,101773,156946,998],{},"Python 没有 ",[422,156944,156945],{},"num++",[422,156947,156948],{},"num--",[14,156950,156952],{"id":156951},"_273-比较运算符","2.7.3 比较运算符",[19,156954,156955],{},"比较运算结果是布尔值。",[416,156957,156959],{"className":31133,"code":156958,"language":31135,"meta":395,"style":395},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[422,156960,156961,156975,156990,157004],{"__ignoreMap":395},[425,156962,156963,156965,156967,156969,156971,156973],{"class":427,"line":428},[425,156964,31170],{"class":691},[425,156966,1159],{"class":701},[425,156968,1594],{"class":691},[425,156970,27212],{"class":1155},[425,156972,3148],{"class":691},[425,156974,1165],{"class":701},[425,156976,156977,156979,156981,156983,156986,156988],{"class":427,"line":698},[425,156978,31170],{"class":691},[425,156980,1159],{"class":701},[425,156982,1594],{"class":691},[425,156984,156985],{"class":1155}," >=",[425,156987,3038],{"class":691},[425,156989,1165],{"class":701},[425,156991,156992,156994,156996,156998,157000,157002],{"class":427,"line":710},[425,156993,31170],{"class":691},[425,156995,1159],{"class":701},[425,156997,1594],{"class":691},[425,156999,102314],{"class":1155},[425,157001,3083],{"class":691},[425,157003,1165],{"class":701},[425,157005,157006,157008,157010,157012,157015,157017],{"class":427,"line":721},[425,157007,31170],{"class":691},[425,157009,1159],{"class":701},[425,157011,1594],{"class":691},[425,157013,157014],{"class":1155}," !=",[425,157016,3083],{"class":691},[425,157018,1165],{"class":701},[19,157020,157021,157022,157024,157025,998],{},"注意：判断相等用 ",[422,157023,3949],{},"，赋值用 ",[422,157026,1204],{},[416,157028,157030],{"className":31133,"code":157029,"language":31135,"meta":395,"style":395},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[422,157031,157032,157044],{"__ignoreMap":395},[425,157033,157034,157036,157038,157041],{"class":427,"line":428},[425,157035,147301],{"class":701},[425,157037,1204],{"class":1155},[425,157039,157040],{"class":691}," 18",[425,157042,157043],{"class":1216},"       # 赋值\n",[425,157045,157046,157048,157050,157052],{"class":427,"line":698},[425,157047,147301],{"class":701},[425,157049,3949],{"class":1155},[425,157051,157040],{"class":691},[425,157053,157054],{"class":1216},"      # 判断是否相等\n",[14,157056,157058],{"id":157057},"_274-逻辑运算符","2.7.4 逻辑运算符",[35,157060,157061,157069],{},[38,157062,157063],{},[41,157064,157065,157067],{},[44,157066,156679],{},[44,157068,26860],{},[55,157070,157071,157080,157089],{},[41,157072,157073,157077],{},[60,157074,157075],{},[422,157076,31217],{},[60,157078,157079],{},"并且",[41,157081,157082,157086],{},[60,157083,157084],{},[422,157085,115845],{},[60,157087,157088],{},"或者",[41,157090,157091,157096],{},[60,157092,157093],{},[422,157094,157095],{},"not",[60,157097,157098],{},"取反",[416,157100,157102],{"className":31133,"code":157101,"language":31135,"meta":395,"style":395},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[422,157103,157104,157112,157121,157125,157140,157154],{"__ignoreMap":395},[425,157105,157106,157108,157110],{"class":427,"line":428},[425,157107,147301],{"class":701},[425,157109,1204],{"class":1155},[425,157111,88820],{"class":691},[425,157113,157114,157117,157119],{"class":427,"line":698},[425,157115,157116],{"class":701},"has_ticket ",[425,157118,1204],{"class":1155},[425,157120,154354],{"class":691},[425,157122,157123],{"class":427,"line":710},[425,157124,3400],{"emptyLinePlaceholder":1084},[425,157126,157127,157129,157131,157133,157135,157137],{"class":427,"line":721},[425,157128,31170],{"class":691},[425,157130,156523],{"class":701},[425,157132,2712],{"class":1155},[425,157134,157040],{"class":691},[425,157136,121184],{"class":1155},[425,157138,157139],{"class":701}," has_ticket)\n",[425,157141,157142,157144,157146,157148,157150,157152],{"class":427,"line":735},[425,157143,31170],{"class":691},[425,157145,156523],{"class":701},[425,157147,2057],{"class":1155},[425,157149,157040],{"class":691},[425,157151,114956],{"class":1155},[425,157153,157139],{"class":701},[425,157155,157156,157158,157160,157162],{"class":427,"line":743},[425,157157,31170],{"class":691},[425,157159,1159],{"class":701},[425,157161,157095],{"class":1155},[425,157163,157139],{"class":701},[1099,157165,157167],{"id":157166},"_28-字符串定义","2.8 字符串定义",[19,157169,157170],{},"三种常见写法：",[416,157172,157174],{"className":31133,"code":157173,"language":31135,"meta":395,"style":395},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[422,157175,157176,157186,157195,157205],{"__ignoreMap":395},[425,157177,157178,157181,157183],{"class":427,"line":428},[425,157179,157180],{"class":701},"name1 ",[425,157182,1204],{"class":1155},[425,157184,157185],{"class":435}," '小明'\n",[425,157187,157188,157191,157193],{"class":427,"line":698},[425,157189,157190],{"class":701},"name2 ",[425,157192,1204],{"class":1155},[425,157194,150108],{"class":435},[425,157196,157197,157200,157202],{"class":427,"line":710},[425,157198,157199],{"class":701},"text ",[425,157201,1204],{"class":1155},[425,157203,157204],{"class":435}," \"\"\"这是多行字符串\n",[425,157206,157207],{"class":427,"line":721},[425,157208,157209],{"class":435},"可以换行\"\"\"\n",[19,157211,157212],{},"字符串中包含引号：",[416,157214,157216],{"className":31133,"code":157215,"language":31135,"meta":395,"style":395},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[422,157217,157218,157228,157238],{"__ignoreMap":395},[425,157219,157220,157223,157225],{"class":427,"line":428},[425,157221,157222],{"class":701},"msg ",[425,157224,1204],{"class":1155},[425,157226,157227],{"class":435}," \"他说:'你好'\"\n",[425,157229,157230,157233,157235],{"class":427,"line":698},[425,157231,157232],{"class":701},"msg2 ",[425,157234,1204],{"class":1155},[425,157236,157237],{"class":435}," '他说:\"你好\"'\n",[425,157239,157240,157243,157245,157248,157251,157254,157256],{"class":427,"line":710},[425,157241,157242],{"class":701},"msg3 ",[425,157244,1204],{"class":1155},[425,157246,157247],{"class":435}," \"他说:",[425,157249,157250],{"class":691},"\\\"",[425,157252,157253],{"class":435},"你好",[425,157255,157250],{"class":691},[425,157257,26124],{"class":435},[19,157259,157260],{},"常见转义字符：",[35,157262,157263,157272],{},[38,157264,157265],{},[41,157266,157267,157270],{},[44,157268,157269],{},"写法",[44,157271,101455],{},[55,157273,157274,157284,157293,157303,157312],{},[41,157275,157276,157281],{},[60,157277,157278],{},[422,157279,157280],{},"\\n",[60,157282,157283],{},"换行",[41,157285,157286,157290],{},[60,157287,157288],{},[422,157289,2247],{},[60,157291,157292],{},"制表符",[41,157294,157295,157300],{},[60,157296,157297],{},[422,157298,157299],{},"\\\\",[60,157301,157302],{},"反斜杠",[41,157304,157305,157309],{},[60,157306,157307],{},[422,157308,157250],{},[60,157310,157311],{},"双引号",[41,157313,157314,157319],{},[60,157315,157316],{},[422,157317,157318],{},"\\'",[60,157320,157321],{},"单引号",[1099,157323,157325],{"id":157324},"_29-字符串拼接","2.9 字符串拼接",[416,157327,157329],{"className":31133,"code":157328,"language":31135,"meta":395,"style":395},"name = \"小明\"\nprint(\"你好，\" + name)\n",[422,157330,157331,157339],{"__ignoreMap":395},[425,157332,157333,157335,157337],{"class":427,"line":428},[425,157334,147291],{"class":701},[425,157336,1204],{"class":1155},[425,157338,150108],{"class":435},[425,157340,157341,157343,157345,157348,157350],{"class":427,"line":698},[425,157342,31170],{"class":691},[425,157344,1159],{"class":701},[425,157346,157347],{"class":435},"\"你好，\"",[425,157349,46321],{"class":1155},[425,157351,157352],{"class":701}," name)\n",[19,157354,157355],{},"字符串只能和字符串拼接：",[416,157357,157359],{"className":31133,"code":157358,"language":31135,"meta":395,"style":395},"age = 18\nprint(\"年龄:\" + str(age))\n",[422,157360,157361,157369],{"__ignoreMap":395},[425,157362,157363,157365,157367],{"class":427,"line":428},[425,157364,147301],{"class":701},[425,157366,1204],{"class":1155},[425,157368,147306],{"class":691},[425,157370,157371,157373,157375,157377,157379,157381],{"class":427,"line":698},[425,157372,31170],{"class":691},[425,157374,1159],{"class":701},[425,157376,147272],{"class":435},[425,157378,46321],{"class":1155},[425,157380,74674],{"class":691},[425,157382,157383],{"class":701},"(age))\n",[19,157385,157386],{},"更推荐使用格式化字符串。",[1099,157388,157390],{"id":157389},"_210-字符串格式化","2.10 字符串格式化",[14,157392,157394],{"id":157393},"_2101-百分号格式化","2.10.1 百分号格式化",[416,157396,157398],{"className":31133,"code":157397,"language":31135,"meta":395,"style":395},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[422,157399,157400,157408,157416,157425,157429],{"__ignoreMap":395},[425,157401,157402,157404,157406],{"class":427,"line":428},[425,157403,147291],{"class":701},[425,157405,1204],{"class":1155},[425,157407,150108],{"class":435},[425,157409,157410,157412,157414],{"class":427,"line":698},[425,157411,147301],{"class":701},[425,157413,1204],{"class":1155},[425,157415,147306],{"class":691},[425,157417,157418,157420,157422],{"class":427,"line":710},[425,157419,156113],{"class":701},[425,157421,1204],{"class":1155},[425,157423,157424],{"class":691}," 95.5\n",[425,157426,157427],{"class":427,"line":721},[425,157428,3400],{"emptyLinePlaceholder":1084},[425,157430,157431,157433,157435,157438,157441,157444,157447,157450,157453,157455,157457],{"class":427,"line":735},[425,157432,31170],{"class":691},[425,157434,1159],{"class":701},[425,157436,157437],{"class":435},"\"姓名:",[425,157439,157440],{"class":691},"%s",[425,157442,157443],{"class":435}," 年龄:",[425,157445,157446],{"class":691},"%d",[425,157448,157449],{"class":435}," 分数:",[425,157451,157452],{"class":691},"%.1f",[425,157454,1400],{"class":435},[425,157456,156836],{"class":1155},[425,157458,157459],{"class":701}," (name, age, score))\n",[19,157461,157462],{},"常用占位符：",[35,157464,157465,157474],{},[38,157466,157467],{},[41,157468,157469,157472],{},[44,157470,157471],{},"占位符",[44,157473,26860],{},[55,157475,157476,157484,157492],{},[41,157477,157478,157482],{},[60,157479,157480],{},[422,157481,157440],{},[60,157483,155979],{},[41,157485,157486,157490],{},[60,157487,157488],{},[422,157489,157446],{},[60,157491,155957],{},[41,157493,157494,157499],{},[60,157495,157496],{},[422,157497,157498],{},"%f",[60,157500,155968],{},[19,157502,157503],{},"精度控制：",[416,157505,157507],{"className":31133,"code":157506,"language":31135,"meta":395,"style":395},"price = 12.3456\nprint(\"%.2f\" % price)\n",[422,157508,157509,157518],{"__ignoreMap":395},[425,157510,157511,157513,157515],{"class":427,"line":428},[425,157512,147436],{"class":701},[425,157514,1204],{"class":1155},[425,157516,157517],{"class":691}," 12.3456\n",[425,157519,157520,157522,157524,157526,157529,157531,157533],{"class":427,"line":698},[425,157521,31170],{"class":691},[425,157523,1159],{"class":701},[425,157525,1400],{"class":435},[425,157527,157528],{"class":691},"%.2f",[425,157530,1400],{"class":435},[425,157532,156836],{"class":1155},[425,157534,157535],{"class":701}," price)\n",[14,157537,157539],{"id":157538},"_2102-format方法","2.10.2 format方法",[416,157541,157543],{"className":31133,"code":157542,"language":31135,"meta":395,"style":395},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[422,157544,157545,157553,157561,157565,157584,157604],{"__ignoreMap":395},[425,157546,157547,157549,157551],{"class":427,"line":428},[425,157548,147291],{"class":701},[425,157550,1204],{"class":1155},[425,157552,150108],{"class":435},[425,157554,157555,157557,157559],{"class":427,"line":698},[425,157556,147301],{"class":701},[425,157558,1204],{"class":1155},[425,157560,147306],{"class":691},[425,157562,157563],{"class":427,"line":710},[425,157564,3400],{"emptyLinePlaceholder":1084},[425,157566,157567,157569,157571,157573,157575,157577,157579,157581],{"class":427,"line":721},[425,157568,31170],{"class":691},[425,157570,1159],{"class":701},[425,157572,157437],{"class":435},[425,157574,33214],{"class":691},[425,157576,157443],{"class":435},[425,157578,33214],{"class":691},[425,157580,1400],{"class":435},[425,157582,157583],{"class":701},".format(name, age))\n",[425,157585,157586,157588,157590,157592,157595,157597,157600,157602],{"class":427,"line":735},[425,157587,31170],{"class":691},[425,157589,1159],{"class":701},[425,157591,157437],{"class":435},[425,157593,157594],{"class":691},"{0}",[425,157596,157443],{"class":435},[425,157598,157599],{"class":691},"{1}",[425,157601,1400],{"class":435},[425,157603,157583],{"class":701},[425,157605,157606,157608,157610,157612,157615,157617,157620,157622,157625,157627,157629,157632,157634,157636],{"class":427,"line":743},[425,157607,31170],{"class":691},[425,157609,1159],{"class":701},[425,157611,157437],{"class":435},[425,157613,157614],{"class":691},"{name}",[425,157616,157443],{"class":435},[425,157618,157619],{"class":691},"{age}",[425,157621,1400],{"class":435},[425,157623,157624],{"class":701},".format(",[425,157626,80565],{"class":6216},[425,157628,1204],{"class":1155},[425,157630,157631],{"class":701},"name, ",[425,157633,70976],{"class":6216},[425,157635,1204],{"class":1155},[425,157637,157638],{"class":701},"age))\n",[14,157640,157642],{"id":157641},"_2103-f-string","2.10.3 f-string",[19,157644,157645],{},"推荐写法：",[416,157647,157649],{"className":31133,"code":157648,"language":31135,"meta":395,"style":395},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[422,157650,157651,157659,157667,157675,157679],{"__ignoreMap":395},[425,157652,157653,157655,157657],{"class":427,"line":428},[425,157654,147291],{"class":701},[425,157656,1204],{"class":1155},[425,157658,150108],{"class":435},[425,157660,157661,157663,157665],{"class":427,"line":698},[425,157662,147301],{"class":701},[425,157664,1204],{"class":1155},[425,157666,147306],{"class":691},[425,157668,157669,157671,157673],{"class":427,"line":710},[425,157670,156113],{"class":701},[425,157672,1204],{"class":1155},[425,157674,157424],{"class":691},[425,157676,157677],{"class":427,"line":721},[425,157678,3400],{"emptyLinePlaceholder":1084},[425,157680,157681,157683,157685,157687,157689,157691,157693,157695,157697,157699,157701,157703,157705,157707,157710,157713,157715,157717],{"class":427,"line":735},[425,157682,31170],{"class":691},[425,157684,1159],{"class":701},[425,157686,1210],{"class":1155},[425,157688,157437],{"class":435},[425,157690,2043],{"class":691},[425,157692,80565],{"class":701},[425,157694,2093],{"class":691},[425,157696,157443],{"class":435},[425,157698,2043],{"class":691},[425,157700,70976],{"class":701},[425,157702,2093],{"class":691},[425,157704,157449],{"class":435},[425,157706,2043],{"class":691},[425,157708,157709],{"class":701},"score",[425,157711,157712],{"class":1155},":.1f",[425,157714,2093],{"class":691},[425,157716,1400],{"class":435},[425,157718,1165],{"class":701},[19,157720,157721],{},"表达式也可以放进去：",[416,157723,157725],{"className":31133,"code":157724,"language":31135,"meta":395,"style":395},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[422,157726,157727,157735,157743],{"__ignoreMap":395},[425,157728,157729,157731,157733],{"class":427,"line":428},[425,157730,147436],{"class":701},[425,157732,1204],{"class":1155},[425,157734,147441],{"class":691},[425,157736,157737,157739,157741],{"class":427,"line":698},[425,157738,147446],{"class":701},[425,157740,1204],{"class":1155},[425,157742,55182],{"class":691},[425,157744,157745,157747,157749,157751,157754,157756,157758,157760,157763,157765,157768],{"class":427,"line":710},[425,157746,31170],{"class":691},[425,157748,1159],{"class":701},[425,157750,1210],{"class":1155},[425,157752,157753],{"class":435},"\"总价:",[425,157755,2043],{"class":691},[425,157757,147436],{"class":701},[425,157759,1603],{"class":1155},[425,157761,157762],{"class":701}," count",[425,157764,2093],{"class":691},[425,157766,157767],{"class":435},"元\"",[425,157769,1165],{"class":701},[1099,157771,157773],{"id":157772},"_211-input输入","2.11 input输入",[19,157775,157776,157779],{},[422,157777,157778],{},"input()"," 会暂停程序，等待用户输入。",[416,157781,157783],{"className":31133,"code":157782,"language":31135,"meta":395,"style":395},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[422,157784,157785,157799],{"__ignoreMap":395},[425,157786,157787,157789,157791,157793,157795,157797],{"class":427,"line":428},[425,157788,147291],{"class":701},[425,157790,1204],{"class":1155},[425,157792,61360],{"class":691},[425,157794,1159],{"class":701},[425,157796,153134],{"class":435},[425,157798,1165],{"class":701},[425,157800,157801,157803,157805,157807,157810,157812,157814,157816,157818],{"class":427,"line":698},[425,157802,31170],{"class":691},[425,157804,1159],{"class":701},[425,157806,1210],{"class":1155},[425,157808,157809],{"class":435},"\"你好，",[425,157811,2043],{"class":691},[425,157813,80565],{"class":701},[425,157815,2093],{"class":691},[425,157817,1400],{"class":435},[425,157819,1165],{"class":701},[19,157821,157822],{},"输入整数：",[416,157824,157826],{"className":31133,"code":157825,"language":31135,"meta":395,"style":395},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[422,157827,157828,157846],{"__ignoreMap":395},[425,157829,157830,157832,157834,157836,157838,157840,157842,157844],{"class":427,"line":428},[425,157831,147301],{"class":701},[425,157833,1204],{"class":1155},[425,157835,3382],{"class":691},[425,157837,1159],{"class":701},[425,157839,54576],{"class":691},[425,157841,1159],{"class":701},[425,157843,153149],{"class":435},[425,157845,31252],{"class":701},[425,157847,157848,157850,157852,157854,157857,157859,157861,157863,157866,157868],{"class":427,"line":698},[425,157849,31170],{"class":691},[425,157851,1159],{"class":701},[425,157853,1210],{"class":1155},[425,157855,157856],{"class":435},"\"明年你",[425,157858,2043],{"class":691},[425,157860,147301],{"class":701},[425,157862,1629],{"class":1155},[425,157864,157865],{"class":691}," 1}",[425,157867,150159],{"class":435},[425,157869,1165],{"class":701},[19,157871,157872],{},"输入小数：",[416,157874,157876],{"className":31133,"code":157875,"language":31135,"meta":395,"style":395},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[422,157877,157878,157897],{"__ignoreMap":395},[425,157879,157880,157882,157884,157886,157888,157890,157892,157895],{"class":427,"line":428},[425,157881,156086],{"class":701},[425,157883,1204],{"class":1155},[425,157885,110552],{"class":691},[425,157887,1159],{"class":701},[425,157889,54576],{"class":691},[425,157891,1159],{"class":701},[425,157893,157894],{"class":435},"\"请输入身高:\"",[425,157896,31252],{"class":701},[425,157898,157899,157901,157903,157905,157908,157910,157912,157915,157917,157920],{"class":427,"line":698},[425,157900,31170],{"class":691},[425,157902,1159],{"class":701},[425,157904,1210],{"class":1155},[425,157906,157907],{"class":435},"\"身高:",[425,157909,2043],{"class":691},[425,157911,25973],{"class":701},[425,157913,157914],{"class":1155},":.2f",[425,157916,2093],{"class":691},[425,157918,157919],{"class":435},"米\"",[425,157921,1165],{"class":701},[1099,157923,157925],{"id":157924},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,157927,124047],{},[972,157929,157930,157933,157936,157939],{},[450,157931,157932],{},"输入商品单价。",[450,157934,157935],{},"输入购买数量。",[450,157937,157938],{},"输入折扣，例如 0.8 表示八折。",[450,157940,157941],{},"输出最终金额，保留两位小数。",[19,157943,11034],{},[416,157945,157947],{"className":31133,"code":157946,"language":31135,"meta":395,"style":395},"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",[422,157948,157949,157968,157987,158007,158011,158031,158035,158058,158079,158101],{"__ignoreMap":395},[425,157950,157951,157953,157955,157957,157959,157961,157963,157966],{"class":427,"line":428},[425,157952,147436],{"class":701},[425,157954,1204],{"class":1155},[425,157956,110552],{"class":691},[425,157958,1159],{"class":701},[425,157960,54576],{"class":691},[425,157962,1159],{"class":701},[425,157964,157965],{"class":435},"\"请输入商品单价:\"",[425,157967,31252],{"class":701},[425,157969,157970,157972,157974,157976,157978,157980,157982,157985],{"class":427,"line":698},[425,157971,147446],{"class":701},[425,157973,1204],{"class":1155},[425,157975,3382],{"class":691},[425,157977,1159],{"class":701},[425,157979,54576],{"class":691},[425,157981,1159],{"class":701},[425,157983,157984],{"class":435},"\"请输入购买数量:\"",[425,157986,31252],{"class":701},[425,157988,157989,157992,157994,157996,157998,158000,158002,158005],{"class":427,"line":710},[425,157990,157991],{"class":701},"discount ",[425,157993,1204],{"class":1155},[425,157995,110552],{"class":691},[425,157997,1159],{"class":701},[425,157999,54576],{"class":691},[425,158001,1159],{"class":701},[425,158003,158004],{"class":435},"\"请输入折扣:\"",[425,158006,31252],{"class":701},[425,158008,158009],{"class":427,"line":721},[425,158010,3400],{"emptyLinePlaceholder":1084},[425,158012,158013,158016,158018,158021,158023,158026,158028],{"class":427,"line":735},[425,158014,158015],{"class":701},"total ",[425,158017,1204],{"class":1155},[425,158019,158020],{"class":701}," price ",[425,158022,1603],{"class":1155},[425,158024,158025],{"class":701}," count ",[425,158027,1603],{"class":1155},[425,158029,158030],{"class":701}," discount\n",[425,158032,158033],{"class":427,"line":743},[425,158034,3400],{"emptyLinePlaceholder":1084},[425,158036,158037,158039,158041,158043,158046,158048,158050,158052,158054,158056],{"class":427,"line":751},[425,158038,31170],{"class":691},[425,158040,1159],{"class":701},[425,158042,1210],{"class":1155},[425,158044,158045],{"class":435},"\"商品单价:",[425,158047,2043],{"class":691},[425,158049,80570],{"class":701},[425,158051,157914],{"class":1155},[425,158053,2093],{"class":691},[425,158055,1400],{"class":435},[425,158057,1165],{"class":701},[425,158059,158060,158062,158064,158066,158069,158071,158073,158075,158077],{"class":427,"line":759},[425,158061,31170],{"class":691},[425,158063,1159],{"class":701},[425,158065,1210],{"class":1155},[425,158067,158068],{"class":435},"\"购买数量:",[425,158070,2043],{"class":691},[425,158072,85189],{"class":701},[425,158074,2093],{"class":691},[425,158076,1400],{"class":435},[425,158078,1165],{"class":701},[425,158080,158081,158083,158085,158087,158090,158092,158095,158097,158099],{"class":427,"line":770},[425,158082,31170],{"class":691},[425,158084,1159],{"class":701},[425,158086,1210],{"class":1155},[425,158088,158089],{"class":435},"\"折扣:",[425,158091,2043],{"class":691},[425,158093,158094],{"class":701},"discount",[425,158096,2093],{"class":691},[425,158098,1400],{"class":435},[425,158100,1165],{"class":701},[425,158102,158103,158105,158107,158109,158112,158114,158117,158119,158121,158123],{"class":427,"line":780},[425,158104,31170],{"class":691},[425,158106,1159],{"class":701},[425,158108,1210],{"class":1155},[425,158110,158111],{"class":435},"\"应付金额:",[425,158113,2043],{"class":691},[425,158115,158116],{"class":701},"total",[425,158118,157914],{"class":1155},[425,158120,2093],{"class":691},[425,158122,157767],{"class":435},[425,158124,1165],{"class":701},[1099,158126,158128],{"id":158127},"_213-易错点","2.13 易错点",[972,158130,158131,158136,158142,158150,158153],{},[450,158132,158133,158135],{},[422,158134,157778],{}," 的结果是字符串，做运算前要转换。",[450,158137,158138,158139,998],{},"字符串拼接时，数字要先 ",[422,158140,158141],{},"str()",[450,158143,158144,158146,158147,158149],{},[422,158145,1204],{}," 是赋值，",[422,158148,3949],{}," 是比较。",[450,158151,158152],{},"Python 没有自增自减运算符。",[450,158154,158155],{},"浮点数计算可能有精度误差：",[416,158157,158159],{"className":31133,"code":158158,"language":31135,"meta":395,"style":395},"print(0.1 + 0.2)\n",[422,158160,158161],{"__ignoreMap":395},[425,158162,158163,158165,158167,158169,158171,158174],{"class":427,"line":428},[425,158164,31170],{"class":691},[425,158166,1159],{"class":701},[425,158168,86965],{"class":691},[425,158170,46321],{"class":1155},[425,158172,158173],{"class":691}," 0.2",[425,158175,1165],{"class":701},[19,158177,158178,158179,158182],{},"金额计算如果要求严格，可以后续学习 ",[422,158180,158181],{},"decimal"," 模块。",[1099,158184,158186],{"id":158185},"_214-本章练习","2.14 本章练习",[972,158188,158189,158192,158195,158198,158201],{},[450,158190,158191],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[450,158193,158194],{},"输入圆的半径，计算面积，保留两位小数。",[450,158196,158197],{},"输入工资和奖金，计算总收入。",[450,158199,158200],{},"输入摄氏温度，转换为华氏温度。",[450,158202,158203],{},"写一个 BMI 计算程序：",[416,158205,158208],{"className":158206,"code":158207,"language":6187,"meta":395},[6185],"BMI = 体重kg \u002F 身高m ** 2\n",[422,158209,158207],{"__ignoreMap":395},[1074,158211,158212],{},"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":395,"searchDepth":698,"depth":698,"links":158214},[158215,158216,158217,158218,158219,158220,158221,158227,158228,158229,158234,158235,158236,158237],{"id":155776,"depth":698,"text":155777},{"id":155885,"depth":698,"text":155886},{"id":156056,"depth":698,"text":156057},{"id":156133,"depth":698,"text":156134},{"id":51486,"depth":698,"text":51487},{"id":156439,"depth":698,"text":156440},{"id":156665,"depth":698,"text":156666,"children":158222},[158223,158224,158225,158226],{"id":156669,"depth":710,"text":156670},{"id":156863,"depth":710,"text":156864},{"id":156951,"depth":710,"text":156952},{"id":157057,"depth":710,"text":157058},{"id":157166,"depth":698,"text":157167},{"id":157324,"depth":698,"text":157325},{"id":157389,"depth":698,"text":157390,"children":158230},[158231,158232,158233],{"id":157393,"depth":710,"text":157394},{"id":157538,"depth":710,"text":157539},{"id":157641,"depth":710,"text":157642},{"id":157772,"depth":698,"text":157773},{"id":157924,"depth":698,"text":157925},{"id":158127,"depth":698,"text":158128},{"id":158185,"depth":698,"text":158186},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155768,"description":24374},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158244,"title":158245,"body":158246,"description":24374,"extension":1082,"meta":159882,"navigation":1084,"path":159883,"seo":159884,"stem":159885,"__hash__":159886},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158247,"toc":159863},[158248,158251,158255,158258,158273,158276,158304,158308,158358,158360,158376,158379,158405,158408,158412,158479,158482,158498,158502,158505,158623,158626,158633,158682,158688,158692,158695,158808,158811,158815,158819,158822,158872,158876,158879,158929,158933,158936,158974,158978,158981,159027,159030,159065,159069,159074,159077,159123,159125,159192,159196,159202,159313,159322,159326,159328,159339,159341,159507,159511,159513,159527,159529,159743,159747,159766,159783,159786,159832,159836,159860],[10,158249,158245],{"id":158250},"_3-判断语句",[1099,158252,158254],{"id":158253},"_31-布尔值","3.1 布尔值",[19,158256,158257],{},"判断语句依赖布尔值：",[416,158259,158261],{"className":31133,"code":158260,"language":31135,"meta":395,"style":395},"True\nFalse\n",[422,158262,158263,158268],{"__ignoreMap":395},[425,158264,158265],{"class":427,"line":428},[425,158266,158267],{"class":691},"True\n",[425,158269,158270],{"class":427,"line":698},[425,158271,158272],{"class":691},"False\n",[19,158274,158275],{},"比较表达式会产生布尔值：",[416,158277,158279],{"className":31133,"code":158278,"language":31135,"meta":395,"style":395},"age = 18\nprint(age >= 18)  # True\n",[422,158280,158281,158289],{"__ignoreMap":395},[425,158282,158283,158285,158287],{"class":427,"line":428},[425,158284,147301],{"class":701},[425,158286,1204],{"class":1155},[425,158288,147306],{"class":691},[425,158290,158291,158293,158295,158297,158299,158301],{"class":427,"line":698},[425,158292,31170],{"class":691},[425,158294,156523],{"class":701},[425,158296,2712],{"class":1155},[425,158298,157040],{"class":691},[425,158300,46563],{"class":701},[425,158302,158303],{"class":1216},"# True\n",[1099,158305,158307],{"id":158306},"_32-if基础语法","3.2 if基础语法",[416,158309,158311],{"className":31133,"code":158310,"language":31135,"meta":395,"style":395},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[422,158312,158313,158331,158335,158347],{"__ignoreMap":395},[425,158314,158315,158317,158319,158321,158323,158325,158327,158329],{"class":427,"line":428},[425,158316,147301],{"class":701},[425,158318,1204],{"class":1155},[425,158320,3382],{"class":691},[425,158322,1159],{"class":701},[425,158324,54576],{"class":691},[425,158326,1159],{"class":701},[425,158328,153149],{"class":435},[425,158330,31252],{"class":701},[425,158332,158333],{"class":427,"line":698},[425,158334,3400],{"emptyLinePlaceholder":1084},[425,158336,158337,158339,158341,158343,158345],{"class":427,"line":710},[425,158338,2544],{"class":1155},[425,158340,16704],{"class":701},[425,158342,2712],{"class":1155},[425,158344,157040],{"class":691},[425,158346,4739],{"class":701},[425,158348,158349,158351,158353,158356],{"class":427,"line":721},[425,158350,32054],{"class":691},[425,158352,1159],{"class":701},[425,158354,158355],{"class":435},"\"可以进入网吧\"",[425,158357,1165],{"class":701},[19,158359,970],{},[972,158361,158362,158367,158370,158373],{},[450,158363,158364,158366],{},[422,158365,2544],{}," 后面是条件表达式。",[450,158368,158369],{},"条件后面必须写冒号。",[450,158371,158372],{},"条件成立时执行缩进代码块。",[450,158374,158375],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,158377,158378],{},"错误示例：",[416,158380,158382],{"className":31133,"code":158381,"language":31135,"meta":395,"style":395},"if age >= 18\n    print(\"可以进入\")\n",[422,158383,158384,158394],{"__ignoreMap":395},[425,158385,158386,158388,158390,158392],{"class":427,"line":428},[425,158387,2544],{"class":1155},[425,158389,16704],{"class":701},[425,158391,2712],{"class":1155},[425,158393,147306],{"class":691},[425,158395,158396,158398,158400,158403],{"class":427,"line":698},[425,158397,32054],{"class":691},[425,158399,1159],{"class":701},[425,158401,158402],{"class":435},"\"可以进入\"",[425,158404,1165],{"class":701},[19,158406,158407],{},"缺少冒号。",[1099,158409,158411],{"id":158410},"_33-if-else","3.3 if else",[416,158413,158415],{"className":31133,"code":158414,"language":31135,"meta":395,"style":395},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[422,158416,158417,158435,158439,158451,158462,158468],{"__ignoreMap":395},[425,158418,158419,158421,158423,158425,158427,158429,158431,158433],{"class":427,"line":428},[425,158420,147301],{"class":701},[425,158422,1204],{"class":1155},[425,158424,3382],{"class":691},[425,158426,1159],{"class":701},[425,158428,54576],{"class":691},[425,158430,1159],{"class":701},[425,158432,153149],{"class":435},[425,158434,31252],{"class":701},[425,158436,158437],{"class":427,"line":698},[425,158438,3400],{"emptyLinePlaceholder":1084},[425,158440,158441,158443,158445,158447,158449],{"class":427,"line":710},[425,158442,2544],{"class":1155},[425,158444,16704],{"class":701},[425,158446,2712],{"class":1155},[425,158448,157040],{"class":691},[425,158450,4739],{"class":701},[425,158452,158453,158455,158457,158460],{"class":427,"line":721},[425,158454,32054],{"class":691},[425,158456,1159],{"class":701},[425,158458,158459],{"class":435},"\"成年人\"",[425,158461,1165],{"class":701},[425,158463,158464,158466],{"class":427,"line":735},[425,158465,2703],{"class":1155},[425,158467,4739],{"class":701},[425,158469,158470,158472,158474,158477],{"class":427,"line":743},[425,158471,32054],{"class":691},[425,158473,1159],{"class":701},[425,158475,158476],{"class":435},"\"未成年人\"",[425,158478,1165],{"class":701},[19,158480,158481],{},"执行逻辑：",[972,158483,158484,158490,158495],{},[450,158485,158486,158487,158489],{},"条件成立，执行 ",[422,158488,2544],{}," 代码块。",[450,158491,158492,158493,158489],{},"条件不成立，执行 ",[422,158494,2703],{},[450,158496,158497],{},"两个代码块只会执行其中一个。",[1099,158499,158501],{"id":158500},"_34-if-elif-else","3.4 if elif else",[19,158503,158504],{},"多条件判断：",[416,158506,158508],{"className":31133,"code":158507,"language":31135,"meta":395,"style":395},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[422,158509,158510,158528,158532,158546,158557,158571,158582,158595,158606,158612],{"__ignoreMap":395},[425,158511,158512,158514,158516,158518,158520,158522,158524,158526],{"class":427,"line":428},[425,158513,156113],{"class":701},[425,158515,1204],{"class":1155},[425,158517,3382],{"class":691},[425,158519,1159],{"class":701},[425,158521,54576],{"class":691},[425,158523,1159],{"class":701},[425,158525,153164],{"class":435},[425,158527,31252],{"class":701},[425,158529,158530],{"class":427,"line":698},[425,158531,3400],{"emptyLinePlaceholder":1084},[425,158533,158534,158536,158539,158541,158544],{"class":427,"line":710},[425,158535,2544],{"class":1155},[425,158537,158538],{"class":701}," score ",[425,158540,2712],{"class":1155},[425,158542,158543],{"class":691}," 90",[425,158545,4739],{"class":701},[425,158547,158548,158550,158552,158555],{"class":427,"line":721},[425,158549,32054],{"class":691},[425,158551,1159],{"class":701},[425,158553,158554],{"class":435},"\"优秀\"",[425,158556,1165],{"class":701},[425,158558,158559,158562,158564,158566,158569],{"class":427,"line":735},[425,158560,158561],{"class":1155},"elif",[425,158563,158538],{"class":701},[425,158565,2712],{"class":1155},[425,158567,158568],{"class":691}," 80",[425,158570,4739],{"class":701},[425,158572,158573,158575,158577,158580],{"class":427,"line":743},[425,158574,32054],{"class":691},[425,158576,1159],{"class":701},[425,158578,158579],{"class":435},"\"良好\"",[425,158581,1165],{"class":701},[425,158583,158584,158586,158588,158590,158593],{"class":427,"line":751},[425,158585,158561],{"class":1155},[425,158587,158538],{"class":701},[425,158589,2712],{"class":1155},[425,158591,158592],{"class":691}," 60",[425,158594,4739],{"class":701},[425,158596,158597,158599,158601,158604],{"class":427,"line":759},[425,158598,32054],{"class":691},[425,158600,1159],{"class":701},[425,158602,158603],{"class":435},"\"及格\"",[425,158605,1165],{"class":701},[425,158607,158608,158610],{"class":427,"line":770},[425,158609,2703],{"class":1155},[425,158611,4739],{"class":701},[425,158613,158614,158616,158618,158621],{"class":427,"line":780},[425,158615,32054],{"class":691},[425,158617,1159],{"class":701},[425,158619,158620],{"class":435},"\"不及格\"",[425,158622,1165],{"class":701},[19,158624,158625],{},"注意判断顺序很重要。",[19,158627,158628,158629,158632],{},"如果把 ",[422,158630,158631],{},"score >= 60"," 放在最前面：",[416,158634,158636],{"className":31133,"code":158635,"language":31135,"meta":395,"style":395},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[422,158637,158638,158650,158660,158672],{"__ignoreMap":395},[425,158639,158640,158642,158644,158646,158648],{"class":427,"line":428},[425,158641,2544],{"class":1155},[425,158643,158538],{"class":701},[425,158645,2712],{"class":1155},[425,158647,158592],{"class":691},[425,158649,4739],{"class":701},[425,158651,158652,158654,158656,158658],{"class":427,"line":698},[425,158653,32054],{"class":691},[425,158655,1159],{"class":701},[425,158657,158603],{"class":435},[425,158659,1165],{"class":701},[425,158661,158662,158664,158666,158668,158670],{"class":427,"line":710},[425,158663,158561],{"class":1155},[425,158665,158538],{"class":701},[425,158667,2712],{"class":1155},[425,158669,158543],{"class":691},[425,158671,4739],{"class":701},[425,158673,158674,158676,158678,158680],{"class":427,"line":721},[425,158675,32054],{"class":691},[425,158677,1159],{"class":701},[425,158679,158554],{"class":435},[425,158681,1165],{"class":701},[19,158683,158684,158685,158687],{},"成绩 95 会先满足 ",[422,158686,158631],{},"，后面的优秀分支就不会执行。",[1099,158689,158691],{"id":158690},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,158693,158694],{},"嵌套判断就是在一个判断内部再写判断。",[416,158696,158698],{"className":31133,"code":158697,"language":31135,"meta":395,"style":395},"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",[422,158699,158700,158718,158733,158737,158749,158763,158773,158780,158791,158797],{"__ignoreMap":395},[425,158701,158702,158704,158706,158708,158710,158712,158714,158716],{"class":427,"line":428},[425,158703,147301],{"class":701},[425,158705,1204],{"class":1155},[425,158707,3382],{"class":691},[425,158709,1159],{"class":701},[425,158711,54576],{"class":691},[425,158713,1159],{"class":701},[425,158715,153149],{"class":435},[425,158717,31252],{"class":701},[425,158719,158720,158722,158724,158726,158728,158731],{"class":427,"line":698},[425,158721,157116],{"class":701},[425,158723,1204],{"class":1155},[425,158725,61360],{"class":691},[425,158727,1159],{"class":701},[425,158729,158730],{"class":435},"\"是否有票(y\u002Fn):\"",[425,158732,1165],{"class":701},[425,158734,158735],{"class":427,"line":710},[425,158736,3400],{"emptyLinePlaceholder":1084},[425,158738,158739,158741,158743,158745,158747],{"class":427,"line":721},[425,158740,2544],{"class":1155},[425,158742,16704],{"class":701},[425,158744,2712],{"class":1155},[425,158746,157040],{"class":691},[425,158748,4739],{"class":701},[425,158750,158751,158753,158756,158758,158761],{"class":427,"line":735},[425,158752,4101],{"class":1155},[425,158754,158755],{"class":701}," has_ticket ",[425,158757,3949],{"class":1155},[425,158759,158760],{"class":435}," \"y\"",[425,158762,4739],{"class":701},[425,158764,158765,158767,158769,158771],{"class":427,"line":743},[425,158766,33206],{"class":691},[425,158768,1159],{"class":701},[425,158770,158402],{"class":435},[425,158772,1165],{"class":701},[425,158774,158775,158778],{"class":427,"line":751},[425,158776,158777],{"class":1155},"    else",[425,158779,4739],{"class":701},[425,158781,158782,158784,158786,158789],{"class":427,"line":759},[425,158783,33206],{"class":691},[425,158785,1159],{"class":701},[425,158787,158788],{"class":435},"\"请先买票\"",[425,158790,1165],{"class":701},[425,158792,158793,158795],{"class":427,"line":770},[425,158794,2703],{"class":1155},[425,158796,4739],{"class":701},[425,158798,158799,158801,158803,158806],{"class":427,"line":780},[425,158800,32054],{"class":691},[425,158802,1159],{"class":701},[425,158804,158805],{"class":435},"\"未成年人禁止进入\"",[425,158807,1165],{"class":701},[19,158809,158810],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[1099,158812,158814],{"id":158813},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[14,158816,158818],{"id":158817},"_361-and","3.6.1 and",[19,158820,158821],{},"两个条件都成立才成立。",[416,158823,158825],{"className":31133,"code":158824,"language":31135,"meta":395,"style":395},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[422,158826,158827,158835,158843,158847,158862],{"__ignoreMap":395},[425,158828,158829,158831,158833],{"class":427,"line":428},[425,158830,147301],{"class":701},[425,158832,1204],{"class":1155},[425,158834,88820],{"class":691},[425,158836,158837,158839,158841],{"class":427,"line":698},[425,158838,157116],{"class":701},[425,158840,1204],{"class":1155},[425,158842,154354],{"class":691},[425,158844,158845],{"class":427,"line":710},[425,158846,3400],{"emptyLinePlaceholder":1084},[425,158848,158849,158851,158853,158855,158857,158859],{"class":427,"line":721},[425,158850,2544],{"class":1155},[425,158852,16704],{"class":701},[425,158854,2712],{"class":1155},[425,158856,157040],{"class":691},[425,158858,121184],{"class":1155},[425,158860,158861],{"class":701}," has_ticket:\n",[425,158863,158864,158866,158868,158870],{"class":427,"line":735},[425,158865,32054],{"class":691},[425,158867,1159],{"class":701},[425,158869,158402],{"class":435},[425,158871,1165],{"class":701},[14,158873,158875],{"id":158874},"_362-or","3.6.2 or",[19,158877,158878],{},"只要一个条件成立就成立。",[416,158880,158882],{"className":31133,"code":158881,"language":31135,"meta":395,"style":395},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[422,158883,158884,158893,158902,158906,158918],{"__ignoreMap":395},[425,158885,158886,158889,158891],{"class":427,"line":428},[425,158887,158888],{"class":701},"is_vip ",[425,158890,1204],{"class":1155},[425,158892,126562],{"class":691},[425,158894,158895,158898,158900],{"class":427,"line":698},[425,158896,158897],{"class":701},"coupon ",[425,158899,1204],{"class":1155},[425,158901,154354],{"class":691},[425,158903,158904],{"class":427,"line":710},[425,158905,3400],{"emptyLinePlaceholder":1084},[425,158907,158908,158910,158913,158915],{"class":427,"line":721},[425,158909,2544],{"class":1155},[425,158911,158912],{"class":701}," is_vip ",[425,158914,115845],{"class":1155},[425,158916,158917],{"class":701}," coupon:\n",[425,158919,158920,158922,158924,158927],{"class":427,"line":735},[425,158921,32054],{"class":691},[425,158923,1159],{"class":701},[425,158925,158926],{"class":435},"\"可以享受优惠\"",[425,158928,1165],{"class":701},[14,158930,158932],{"id":158931},"_363-not","3.6.3 not",[19,158934,158935],{},"取反。",[416,158937,158939],{"className":31133,"code":158938,"language":31135,"meta":395,"style":395},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[422,158940,158941,158950,158954,158963],{"__ignoreMap":395},[425,158942,158943,158946,158948],{"class":427,"line":428},[425,158944,158945],{"class":701},"is_closed ",[425,158947,1204],{"class":1155},[425,158949,126562],{"class":691},[425,158951,158952],{"class":427,"line":698},[425,158953,3400],{"emptyLinePlaceholder":1084},[425,158955,158956,158958,158960],{"class":427,"line":710},[425,158957,2544],{"class":1155},[425,158959,39685],{"class":1155},[425,158961,158962],{"class":701}," is_closed:\n",[425,158964,158965,158967,158969,158972],{"class":427,"line":721},[425,158966,32054],{"class":691},[425,158968,1159],{"class":701},[425,158970,158971],{"class":435},"\"店铺营业中\"",[425,158973,1165],{"class":701},[1099,158975,158977],{"id":158976},"_37-链式比较","3.7 链式比较",[19,158979,158980],{},"Python 支持链式比较：",[416,158982,158984],{"className":31133,"code":158983,"language":31135,"meta":395,"style":395},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[422,158985,158986,158995,158999,159016],{"__ignoreMap":395},[425,158987,158988,158990,158992],{"class":427,"line":428},[425,158989,156113],{"class":701},[425,158991,1204],{"class":1155},[425,158993,158994],{"class":691}," 85\n",[425,158996,158997],{"class":427,"line":698},[425,158998,3400],{"emptyLinePlaceholder":1084},[425,159000,159001,159003,159005,159008,159010,159012,159014],{"class":427,"line":710},[425,159002,2544],{"class":1155},[425,159004,5093],{"class":691},[425,159006,159007],{"class":1155}," \u003C=",[425,159009,158538],{"class":701},[425,159011,2601],{"class":1155},[425,159013,6754],{"class":691},[425,159015,4739],{"class":701},[425,159017,159018,159020,159022,159025],{"class":427,"line":721},[425,159019,32054],{"class":691},[425,159021,1159],{"class":701},[425,159023,159024],{"class":435},"\"成绩合法\"",[425,159026,1165],{"class":701},[19,159028,159029],{},"等价于：",[416,159031,159033],{"className":31133,"code":159032,"language":31135,"meta":395,"style":395},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[422,159034,159035,159055],{"__ignoreMap":395},[425,159036,159037,159039,159041,159043,159045,159047,159049,159051,159053],{"class":427,"line":428},[425,159038,2544],{"class":1155},[425,159040,158538],{"class":701},[425,159042,2712],{"class":1155},[425,159044,5093],{"class":691},[425,159046,121184],{"class":1155},[425,159048,158538],{"class":701},[425,159050,2601],{"class":1155},[425,159052,6754],{"class":691},[425,159054,4739],{"class":701},[425,159056,159057,159059,159061,159063],{"class":427,"line":698},[425,159058,32054],{"class":691},[425,159060,1159],{"class":701},[425,159062,159024],{"class":435},[425,159064,1165],{"class":701},[1099,159066,159068],{"id":159067},"_38-真值和假值","3.8 真值和假值",[19,159070,117222,159071,159073],{},[422,159072,2544],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,159075,159076],{},"假值：",[416,159078,159080],{"className":31133,"code":159079,"language":31135,"meta":395,"style":395},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[422,159081,159082,159086,159091,159095,159099,159104,159108,159112,159117],{"__ignoreMap":395},[425,159083,159084],{"class":427,"line":428},[425,159085,158272],{"class":691},[425,159087,159088],{"class":427,"line":698},[425,159089,159090],{"class":691},"None\n",[425,159092,159093],{"class":427,"line":710},[425,159094,4085],{"class":691},[425,159096,159097],{"class":427,"line":721},[425,159098,33097],{"class":691},[425,159100,159101],{"class":427,"line":735},[425,159102,159103],{"class":435},"\"\"\n",[425,159105,159106],{"class":427,"line":743},[425,159107,33112],{"class":701},[425,159109,159110],{"class":427,"line":751},[425,159111,2976],{"class":701},[425,159113,159114],{"class":427,"line":759},[425,159115,159116],{"class":701},"{}\n",[425,159118,159119,159121],{"class":427,"line":770},[425,159120,156045],{"class":691},[425,159122,2976],{"class":701},[19,159124,16132],{},[416,159126,159128],{"className":31133,"code":159127,"language":31135,"meta":395,"style":395},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[422,159129,159130,159144,159148,159155,159175,159181],{"__ignoreMap":395},[425,159131,159132,159134,159136,159138,159140,159142],{"class":427,"line":428},[425,159133,147291],{"class":701},[425,159135,1204],{"class":1155},[425,159137,61360],{"class":691},[425,159139,1159],{"class":701},[425,159141,153134],{"class":435},[425,159143,1165],{"class":701},[425,159145,159146],{"class":427,"line":698},[425,159147,3400],{"emptyLinePlaceholder":1084},[425,159149,159150,159152],{"class":427,"line":710},[425,159151,2544],{"class":1155},[425,159153,159154],{"class":701}," name:\n",[425,159156,159157,159159,159161,159163,159165,159167,159169,159171,159173],{"class":427,"line":721},[425,159158,32054],{"class":691},[425,159160,1159],{"class":701},[425,159162,1210],{"class":1155},[425,159164,157809],{"class":435},[425,159166,2043],{"class":691},[425,159168,80565],{"class":701},[425,159170,2093],{"class":691},[425,159172,1400],{"class":435},[425,159174,1165],{"class":701},[425,159176,159177,159179],{"class":427,"line":735},[425,159178,2703],{"class":1155},[425,159180,4739],{"class":701},[425,159182,159183,159185,159187,159190],{"class":427,"line":743},[425,159184,32054],{"class":691},[425,159186,1159],{"class":701},[425,159188,159189],{"class":435},"\"姓名不能为空\"",[425,159191,1165],{"class":701},[1099,159193,159195],{"id":159194},"_39-match语句","3.9 match语句",[19,159197,159198,159199,159201],{},"Python 3.10 开始支持 ",[422,159200,72020],{},"。它适合处理固定选项。",[416,159203,159205],{"className":31133,"code":159204,"language":31135,"meta":395,"style":395},"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",[422,159206,159207,159223,159227,159234,159244,159255,159264,159275,159284,159295,159302],{"__ignoreMap":395},[425,159208,159209,159212,159214,159216,159218,159221],{"class":427,"line":428},[425,159210,159211],{"class":701},"command ",[425,159213,1204],{"class":1155},[425,159215,61360],{"class":691},[425,159217,1159],{"class":701},[425,159219,159220],{"class":435},"\"请输入命令:\"",[425,159222,1165],{"class":701},[425,159224,159225],{"class":427,"line":698},[425,159226,3400],{"emptyLinePlaceholder":1084},[425,159228,159229,159231],{"class":427,"line":710},[425,159230,72020],{"class":1155},[425,159232,159233],{"class":701}," command:\n",[425,159235,159236,159239,159242],{"class":427,"line":721},[425,159237,159238],{"class":1155},"    case",[425,159240,159241],{"class":435}," \"start\"",[425,159243,4739],{"class":701},[425,159245,159246,159248,159250,159253],{"class":427,"line":735},[425,159247,33206],{"class":691},[425,159249,1159],{"class":701},[425,159251,159252],{"class":435},"\"启动\"",[425,159254,1165],{"class":701},[425,159256,159257,159259,159262],{"class":427,"line":743},[425,159258,159238],{"class":1155},[425,159260,159261],{"class":435}," \"stop\"",[425,159263,4739],{"class":701},[425,159265,159266,159268,159270,159273],{"class":427,"line":751},[425,159267,33206],{"class":691},[425,159269,1159],{"class":701},[425,159271,159272],{"class":435},"\"停止\"",[425,159274,1165],{"class":701},[425,159276,159277,159279,159282],{"class":427,"line":759},[425,159278,159238],{"class":1155},[425,159280,159281],{"class":435}," \"restart\"",[425,159283,4739],{"class":701},[425,159285,159286,159288,159290,159293],{"class":427,"line":770},[425,159287,33206],{"class":691},[425,159289,1159],{"class":701},[425,159291,159292],{"class":435},"\"重启\"",[425,159294,1165],{"class":701},[425,159296,159297,159299],{"class":427,"line":780},[425,159298,159238],{"class":1155},[425,159300,159301],{"class":701}," _:\n",[425,159303,159304,159306,159308,159311],{"class":427,"line":790},[425,159305,33206],{"class":691},[425,159307,1159],{"class":701},[425,159309,159310],{"class":435},"\"未知命令\"",[425,159312,1165],{"class":701},[19,159314,159315,159316,159318,159319,159321],{},"入门阶段掌握 ",[422,159317,155413],{}," 更重要，",[422,159320,72020],{}," 可以作为补充。",[1099,159323,159325],{"id":159324},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,159327,124047],{},[972,159329,159330,159333,159336],{},[450,159331,159332],{},"输入成绩。",[450,159334,159335],{},"判断成绩是否合法。",[450,159337,159338],{},"输出等级。",[19,159340,11034],{},[416,159342,159344],{"className":31133,"code":159343,"language":31135,"meta":395,"style":395},"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",[422,159345,159346,159364,159368,159386,159397,159409,159420,159432,159443,159456,159467,159479,159490,159496],{"__ignoreMap":395},[425,159347,159348,159350,159352,159354,159356,159358,159360,159362],{"class":427,"line":428},[425,159349,156113],{"class":701},[425,159351,1204],{"class":1155},[425,159353,110552],{"class":691},[425,159355,1159],{"class":701},[425,159357,54576],{"class":691},[425,159359,1159],{"class":701},[425,159361,153164],{"class":435},[425,159363,31252],{"class":701},[425,159365,159366],{"class":427,"line":698},[425,159367,3400],{"emptyLinePlaceholder":1084},[425,159369,159370,159372,159374,159376,159378,159380,159382,159384],{"class":427,"line":710},[425,159371,2544],{"class":1155},[425,159373,39685],{"class":1155},[425,159375,5093],{"class":691},[425,159377,159007],{"class":1155},[425,159379,158538],{"class":701},[425,159381,2601],{"class":1155},[425,159383,6754],{"class":691},[425,159385,4739],{"class":701},[425,159387,159388,159390,159392,159395],{"class":427,"line":721},[425,159389,32054],{"class":691},[425,159391,1159],{"class":701},[425,159393,159394],{"class":435},"\"成绩不合法\"",[425,159396,1165],{"class":701},[425,159398,159399,159401,159403,159405,159407],{"class":427,"line":735},[425,159400,158561],{"class":1155},[425,159402,158538],{"class":701},[425,159404,2712],{"class":1155},[425,159406,158543],{"class":691},[425,159408,4739],{"class":701},[425,159410,159411,159413,159415,159418],{"class":427,"line":743},[425,159412,32054],{"class":691},[425,159414,1159],{"class":701},[425,159416,159417],{"class":435},"\"等级:A\"",[425,159419,1165],{"class":701},[425,159421,159422,159424,159426,159428,159430],{"class":427,"line":751},[425,159423,158561],{"class":1155},[425,159425,158538],{"class":701},[425,159427,2712],{"class":1155},[425,159429,158568],{"class":691},[425,159431,4739],{"class":701},[425,159433,159434,159436,159438,159441],{"class":427,"line":759},[425,159435,32054],{"class":691},[425,159437,1159],{"class":701},[425,159439,159440],{"class":435},"\"等级:B\"",[425,159442,1165],{"class":701},[425,159444,159445,159447,159449,159451,159454],{"class":427,"line":770},[425,159446,158561],{"class":1155},[425,159448,158538],{"class":701},[425,159450,2712],{"class":1155},[425,159452,159453],{"class":691}," 70",[425,159455,4739],{"class":701},[425,159457,159458,159460,159462,159465],{"class":427,"line":780},[425,159459,32054],{"class":691},[425,159461,1159],{"class":701},[425,159463,159464],{"class":435},"\"等级:C\"",[425,159466,1165],{"class":701},[425,159468,159469,159471,159473,159475,159477],{"class":427,"line":790},[425,159470,158561],{"class":1155},[425,159472,158538],{"class":701},[425,159474,2712],{"class":1155},[425,159476,158592],{"class":691},[425,159478,4739],{"class":701},[425,159480,159481,159483,159485,159488],{"class":427,"line":805},[425,159482,32054],{"class":691},[425,159484,1159],{"class":701},[425,159486,159487],{"class":435},"\"等级:D\"",[425,159489,1165],{"class":701},[425,159491,159492,159494],{"class":427,"line":818},[425,159493,2703],{"class":1155},[425,159495,4739],{"class":701},[425,159497,159498,159500,159502,159505],{"class":427,"line":831},[425,159499,32054],{"class":691},[425,159501,1159],{"class":701},[425,159503,159504],{"class":435},"\"等级:E\"",[425,159506,1165],{"class":701},[1099,159508,159510],{"id":159509},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,159512,124047],{},[972,159514,159515,159518,159521,159524],{},[450,159516,159517],{},"输入消费金额。",[450,159519,159520],{},"输入会员等级，普通、银卡、金卡。",[450,159522,159523],{},"普通不打折，银卡 9 折，金卡 8 折。",[450,159525,159526],{},"满 500 再减 50。",[19,159528,11034],{},[416,159530,159532],{"className":31133,"code":159531,"language":31135,"meta":395,"style":395},"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",[422,159533,159534,159554,159570,159574,159582,159586,159600,159610,159623,159632,159645,159653,159659,159670,159674,159688,159692,159706,159716,159720],{"__ignoreMap":395},[425,159535,159536,159539,159541,159543,159545,159547,159549,159552],{"class":427,"line":428},[425,159537,159538],{"class":701},"amount ",[425,159540,1204],{"class":1155},[425,159542,110552],{"class":691},[425,159544,1159],{"class":701},[425,159546,54576],{"class":691},[425,159548,1159],{"class":701},[425,159550,159551],{"class":435},"\"请输入消费金额:\"",[425,159553,31252],{"class":701},[425,159555,159556,159559,159561,159563,159565,159568],{"class":427,"line":698},[425,159557,159558],{"class":701},"level ",[425,159560,1204],{"class":1155},[425,159562,61360],{"class":691},[425,159564,1159],{"class":701},[425,159566,159567],{"class":435},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[425,159569,1165],{"class":701},[425,159571,159572],{"class":427,"line":710},[425,159573,3400],{"emptyLinePlaceholder":1084},[425,159575,159576,159578,159580],{"class":427,"line":721},[425,159577,157991],{"class":701},[425,159579,1204],{"class":1155},[425,159581,56454],{"class":691},[425,159583,159584],{"class":427,"line":735},[425,159585,3400],{"emptyLinePlaceholder":1084},[425,159587,159588,159590,159593,159595,159598],{"class":427,"line":743},[425,159589,2544],{"class":1155},[425,159591,159592],{"class":701}," level ",[425,159594,3949],{"class":1155},[425,159596,159597],{"class":435}," \"银卡\"",[425,159599,4739],{"class":701},[425,159601,159602,159605,159607],{"class":427,"line":751},[425,159603,159604],{"class":701},"    discount ",[425,159606,1204],{"class":1155},[425,159608,159609],{"class":691}," 0.9\n",[425,159611,159612,159614,159616,159618,159621],{"class":427,"line":759},[425,159613,158561],{"class":1155},[425,159615,159592],{"class":701},[425,159617,3949],{"class":1155},[425,159619,159620],{"class":435}," \"金卡\"",[425,159622,4739],{"class":701},[425,159624,159625,159627,159629],{"class":427,"line":770},[425,159626,159604],{"class":701},[425,159628,1204],{"class":1155},[425,159630,159631],{"class":691}," 0.8\n",[425,159633,159634,159636,159638,159640,159643],{"class":427,"line":780},[425,159635,158561],{"class":1155},[425,159637,159592],{"class":701},[425,159639,3949],{"class":1155},[425,159641,159642],{"class":435}," \"普通\"",[425,159644,4739],{"class":701},[425,159646,159647,159649,159651],{"class":427,"line":790},[425,159648,159604],{"class":701},[425,159650,1204],{"class":1155},[425,159652,56454],{"class":691},[425,159654,159655,159657],{"class":427,"line":805},[425,159656,2703],{"class":1155},[425,159658,4739],{"class":701},[425,159660,159661,159663,159665,159668],{"class":427,"line":818},[425,159662,32054],{"class":691},[425,159664,1159],{"class":701},[425,159666,159667],{"class":435},"\"会员等级输入错误，按普通会员计算\"",[425,159669,1165],{"class":701},[425,159671,159672],{"class":427,"line":831},[425,159673,3400],{"emptyLinePlaceholder":1084},[425,159675,159676,159679,159681,159684,159686],{"class":427,"line":841},[425,159677,159678],{"class":701},"pay ",[425,159680,1204],{"class":1155},[425,159682,159683],{"class":701}," amount ",[425,159685,1603],{"class":1155},[425,159687,158030],{"class":701},[425,159689,159690],{"class":427,"line":852},[425,159691,3400],{"emptyLinePlaceholder":1084},[425,159693,159694,159696,159699,159701,159704],{"class":427,"line":862},[425,159695,2544],{"class":1155},[425,159697,159698],{"class":701}," pay ",[425,159700,2712],{"class":1155},[425,159702,159703],{"class":691}," 500",[425,159705,4739],{"class":701},[425,159707,159708,159711,159713],{"class":427,"line":878},[425,159709,159710],{"class":701},"    pay ",[425,159712,151007],{"class":1155},[425,159714,159715],{"class":691}," 50\n",[425,159717,159718],{"class":427,"line":914},[425,159719,3400],{"emptyLinePlaceholder":1084},[425,159721,159722,159724,159726,159728,159730,159732,159735,159737,159739,159741],{"class":427,"line":943},[425,159723,31170],{"class":691},[425,159725,1159],{"class":701},[425,159727,1210],{"class":1155},[425,159729,158111],{"class":435},[425,159731,2043],{"class":691},[425,159733,159734],{"class":701},"pay",[425,159736,157914],{"class":1155},[425,159738,2093],{"class":691},[425,159740,157767],{"class":435},[425,159742,1165],{"class":701},[1099,159744,159746],{"id":159745},"_312-易错点","3.12 易错点",[972,159748,159749,159752,159755,159758,159763],{},[450,159750,159751],{},"冒号不能漏。",[450,159753,159754],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[450,159756,159757],{},"多分支判断要注意顺序。",[450,159759,159760,159761,998],{},"判断相等用 ",[422,159762,3949],{},[450,159764,159765],{},"字符串比较区分大小写：",[416,159767,159769],{"className":31133,"code":159768,"language":31135,"meta":395,"style":395},"\"Y\" == \"y\"  # False\n",[422,159770,159771],{"__ignoreMap":395},[425,159772,159773,159776,159778,159780],{"class":427,"line":428},[425,159774,159775],{"class":435},"\"Y\"",[425,159777,102314],{"class":1155},[425,159779,158760],{"class":435},[425,159781,159782],{"class":1216},"  # False\n",[19,159784,159785],{},"可转换后再判断：",[416,159787,159789],{"className":31133,"code":159788,"language":31135,"meta":395,"style":395},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[422,159790,159791,159808,159821],{"__ignoreMap":395},[425,159792,159793,159796,159798,159800,159802,159805],{"class":427,"line":428},[425,159794,159795],{"class":701},"answer ",[425,159797,1204],{"class":1155},[425,159799,61360],{"class":691},[425,159801,1159],{"class":701},[425,159803,159804],{"class":435},"\"是否继续(y\u002Fn):\"",[425,159806,159807],{"class":701},").lower()\n",[425,159809,159810,159812,159815,159817,159819],{"class":427,"line":698},[425,159811,2544],{"class":1155},[425,159813,159814],{"class":701}," answer ",[425,159816,3949],{"class":1155},[425,159818,158760],{"class":435},[425,159820,4739],{"class":701},[425,159822,159823,159825,159827,159830],{"class":427,"line":710},[425,159824,32054],{"class":691},[425,159826,1159],{"class":701},[425,159828,159829],{"class":435},"\"继续\"",[425,159831,1165],{"class":701},[1099,159833,159835],{"id":159834},"_313-本章练习","3.13 本章练习",[972,159837,159838,159841,159844,159847,159857],{},[450,159839,159840],{},"输入年龄，判断是否成年。",[450,159842,159843],{},"输入年份，判断是否为闰年。",[450,159845,159846],{},"输入三个数字，输出最大值。",[450,159848,159849,159850,159853,159854,159856],{},"写登录判断：用户名是 ",[422,159851,159852],{},"admin"," 且密码是 ",[422,159855,16081],{}," 才登录成功。",[450,159858,159859],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[1074,159861,159862],{},"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":395,"searchDepth":698,"depth":698,"links":159864},[159865,159866,159867,159868,159869,159870,159875,159876,159877,159878,159879,159880,159881],{"id":158253,"depth":698,"text":158254},{"id":158306,"depth":698,"text":158307},{"id":158410,"depth":698,"text":158411},{"id":158500,"depth":698,"text":158501},{"id":158690,"depth":698,"text":158691},{"id":158813,"depth":698,"text":158814,"children":159871},[159872,159873,159874],{"id":158817,"depth":710,"text":158818},{"id":158874,"depth":710,"text":158875},{"id":158931,"depth":710,"text":158932},{"id":158976,"depth":698,"text":158977},{"id":159067,"depth":698,"text":159068},{"id":159194,"depth":698,"text":159195},{"id":159324,"depth":698,"text":159325},{"id":159509,"depth":698,"text":159510},{"id":159745,"depth":698,"text":159746},{"id":159834,"depth":698,"text":159835},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158245,"description":24374},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159888,"title":159889,"body":159890,"description":24374,"extension":1082,"meta":161659,"navigation":1084,"path":161660,"seo":161661,"stem":161662,"__hash__":161663},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159891,"toc":161639},[159892,159895,159899,159905,159908,159925,159929,159931,159948,159950,159995,159997,160014,160018,160021,160087,160090,160108,160112,160273,160282,160286,160290,160295,160342,160344,160350,160354,160359,160406,160408,160414,160418,160423,160459,160462,160509,160513,160519,160577,160582,160613,160618,160622,160677,160680,160752,160755,160814,160818,160821,160896,160899,160903,161009,161012,161038,161042,161054,161123,161126,161218,161222,161224,161235,161237,161367,161371,161573,161581,161585,161615,161619,161636],[10,159893,159889],{"id":159894},"_4-循环语句",[1099,159896,159898],{"id":159897},"_41-为什么需要循环","4.1 为什么需要循环",[19,159900,159901,159902,159904],{},"如果要输出 1 到 100，不应该写 100 行 ",[422,159903,147227],{},"，而应该用循环。",[19,159906,159907],{},"循环适合处理重复任务：",[972,159909,159910,159913,159916,159919,159922],{},[450,159911,159912],{},"重复输出。",[450,159914,159915],{},"重复输入。",[450,159917,159918],{},"遍历数据。",[450,159920,159921],{},"持续执行菜单。",[450,159923,159924],{},"批量处理文件或数据。",[1099,159926,159928],{"id":159927},"_42-while循环","4.2 while循环",[19,159930,6181],{},[416,159932,159934],{"className":31133,"code":159933,"language":31135,"meta":395,"style":395},"while 条件:\n    循环体\n",[422,159935,159936,159943],{"__ignoreMap":395},[425,159937,159938,159940],{"class":427,"line":428},[425,159939,109418],{"class":1155},[425,159941,159942],{"class":701}," 条件:\n",[425,159944,159945],{"class":427,"line":698},[425,159946,159947],{"class":701},"    循环体\n",[19,159949,16132],{},[416,159951,159953],{"className":31133,"code":159952,"language":31135,"meta":395,"style":395},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[422,159954,159955,159963,159967,159979,159986],{"__ignoreMap":395},[425,159956,159957,159959,159961],{"class":427,"line":428},[425,159958,100903],{"class":701},[425,159960,1204],{"class":1155},[425,159962,56454],{"class":691},[425,159964,159965],{"class":427,"line":698},[425,159966,3400],{"emptyLinePlaceholder":1084},[425,159968,159969,159971,159973,159975,159977],{"class":427,"line":710},[425,159970,109418],{"class":1155},[425,159972,10437],{"class":701},[425,159974,2601],{"class":1155},[425,159976,3148],{"class":691},[425,159978,4739],{"class":701},[425,159980,159981,159983],{"class":427,"line":721},[425,159982,32054],{"class":691},[425,159984,159985],{"class":701},"(i)\n",[425,159987,159988,159991,159993],{"class":427,"line":735},[425,159989,159990],{"class":701},"    i ",[425,159992,10476],{"class":1155},[425,159994,56454],{"class":691},[19,159996,81684],{},[972,159998,159999,160005,160008,160011],{},[450,160000,160001,160002,998],{},"判断条件 ",[422,160003,160004],{},"i \u003C= 5",[450,160006,160007],{},"条件成立，执行循环体。",[450,160009,160010],{},"执行完后回到条件判断。",[450,160012,160013],{},"条件不成立，退出循环。",[1099,160015,160017],{"id":160016},"_43-while累加","4.3 while累加",[19,160019,160020],{},"计算 1 到 100 的和：",[416,160022,160024],{"className":31133,"code":160023,"language":31135,"meta":395,"style":395},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[422,160025,160026,160034,160042,160046,160058,160068,160076,160080],{"__ignoreMap":395},[425,160027,160028,160030,160032],{"class":427,"line":428},[425,160029,100903],{"class":701},[425,160031,1204],{"class":1155},[425,160033,56454],{"class":691},[425,160035,160036,160038,160040],{"class":427,"line":698},[425,160037,158015],{"class":701},[425,160039,1204],{"class":1155},[425,160041,48088],{"class":691},[425,160043,160044],{"class":427,"line":710},[425,160045,3400],{"emptyLinePlaceholder":1084},[425,160047,160048,160050,160052,160054,160056],{"class":427,"line":721},[425,160049,109418],{"class":1155},[425,160051,10437],{"class":701},[425,160053,2601],{"class":1155},[425,160055,6754],{"class":691},[425,160057,4739],{"class":701},[425,160059,160060,160063,160065],{"class":427,"line":735},[425,160061,160062],{"class":701},"    total ",[425,160064,10476],{"class":1155},[425,160066,160067],{"class":701}," i\n",[425,160069,160070,160072,160074],{"class":427,"line":743},[425,160071,159990],{"class":701},[425,160073,10476],{"class":1155},[425,160075,56454],{"class":691},[425,160077,160078],{"class":427,"line":751},[425,160079,3400],{"emptyLinePlaceholder":1084},[425,160081,160082,160084],{"class":427,"line":759},[425,160083,31170],{"class":691},[425,160085,160086],{"class":701},"(total)\n",[19,160088,160089],{},"核心思想：",[972,160091,160092,160097,160102],{},[450,160093,160094,160096],{},[422,160095,1589],{}," 控制循环次数。",[450,160098,160099,160101],{},[422,160100,158116],{}," 保存累加结果。",[450,160103,160104,160105,160107],{},"每轮循环都要更新 ",[422,160106,1589],{},"，否则可能死循环。",[1099,160109,160111],{"id":160110},"_44-while猜数字","4.4 while猜数字",[416,160113,160115],{"className":31133,"code":160114,"language":31135,"meta":395,"style":395},"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",[422,160116,160117,160123,160127,160144,160152,160156,160164,160184,160193,160197,160209,160220,160230,160241,160247,160269],{"__ignoreMap":395},[425,160118,160119,160121],{"class":427,"line":428},[425,160120,31147],{"class":1155},[425,160122,46083],{"class":701},[425,160124,160125],{"class":427,"line":698},[425,160126,3400],{"emptyLinePlaceholder":1084},[425,160128,160129,160131,160133,160136,160138,160140,160142],{"class":427,"line":710},[425,160130,159795],{"class":701},[425,160132,1204],{"class":1155},[425,160134,160135],{"class":701}," random.randint(",[425,160137,1367],{"class":691},[425,160139,13434],{"class":701},[425,160141,1460],{"class":691},[425,160143,1165],{"class":701},[425,160145,160146,160148,160150],{"class":427,"line":721},[425,160147,147446],{"class":701},[425,160149,1204],{"class":1155},[425,160151,48088],{"class":691},[425,160153,160154],{"class":427,"line":735},[425,160155,3400],{"emptyLinePlaceholder":1084},[425,160157,160158,160160,160162],{"class":427,"line":743},[425,160159,109418],{"class":1155},[425,160161,96047],{"class":691},[425,160163,4739],{"class":701},[425,160165,160166,160169,160171,160173,160175,160177,160179,160182],{"class":427,"line":751},[425,160167,160168],{"class":701},"    guess ",[425,160170,1204],{"class":1155},[425,160172,3382],{"class":691},[425,160174,1159],{"class":701},[425,160176,54576],{"class":691},[425,160178,1159],{"class":701},[425,160180,160181],{"class":435},"\"请输入1到100之间的数字:\"",[425,160183,31252],{"class":701},[425,160185,160186,160189,160191],{"class":427,"line":759},[425,160187,160188],{"class":701},"    count ",[425,160190,10476],{"class":1155},[425,160192,56454],{"class":691},[425,160194,160195],{"class":427,"line":770},[425,160196,3400],{"emptyLinePlaceholder":1084},[425,160198,160199,160201,160204,160206],{"class":427,"line":780},[425,160200,4101],{"class":1155},[425,160202,160203],{"class":701}," guess ",[425,160205,2107],{"class":1155},[425,160207,160208],{"class":701}," answer:\n",[425,160210,160211,160213,160215,160218],{"class":427,"line":790},[425,160212,33206],{"class":691},[425,160214,1159],{"class":701},[425,160216,160217],{"class":435},"\"猜大了\"",[425,160219,1165],{"class":701},[425,160221,160222,160224,160226,160228],{"class":427,"line":805},[425,160223,40048],{"class":1155},[425,160225,160203],{"class":701},[425,160227,2057],{"class":1155},[425,160229,160208],{"class":701},[425,160231,160232,160234,160236,160239],{"class":427,"line":818},[425,160233,33206],{"class":691},[425,160235,1159],{"class":701},[425,160237,160238],{"class":435},"\"猜小了\"",[425,160240,1165],{"class":701},[425,160242,160243,160245],{"class":427,"line":831},[425,160244,158777],{"class":1155},[425,160246,4739],{"class":701},[425,160248,160249,160251,160253,160255,160258,160260,160262,160264,160267],{"class":427,"line":841},[425,160250,33206],{"class":691},[425,160252,1159],{"class":701},[425,160254,1210],{"class":1155},[425,160256,160257],{"class":435},"\"猜对了，一共猜了",[425,160259,2043],{"class":691},[425,160261,85189],{"class":701},[425,160263,2093],{"class":691},[425,160265,160266],{"class":435},"次\"",[425,160268,1165],{"class":701},[425,160270,160271],{"class":427,"line":852},[425,160272,32382],{"class":1155},[19,160274,160275,160278,160279,160281],{},[422,160276,160277],{},"while True"," 表示无限循环，通常配合 ",[422,160280,3053],{}," 使用。",[1099,160283,160285],{"id":160284},"_45-break和continue","4.5 break和continue",[14,160287,160289],{"id":160288},"_451-break","4.5.1 break",[19,160291,160292,160294],{},[422,160293,3053],{}," 直接结束整个循环。",[416,160296,160298],{"className":31133,"code":160297,"language":31135,"meta":395,"style":395},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[422,160299,160300,160320,160332,160336],{"__ignoreMap":395},[425,160301,160302,160304,160306,160308,160310,160312,160314,160316,160318],{"class":427,"line":428},[425,160303,4025],{"class":1155},[425,160305,10437],{"class":701},[425,160307,27034],{"class":1155},[425,160309,33198],{"class":691},[425,160311,1159],{"class":701},[425,160313,1367],{"class":691},[425,160315,13434],{"class":701},[425,160317,1493],{"class":691},[425,160319,31541],{"class":701},[425,160321,160322,160324,160326,160328,160330],{"class":427,"line":698},[425,160323,4101],{"class":1155},[425,160325,10437],{"class":701},[425,160327,3949],{"class":1155},[425,160329,78825],{"class":691},[425,160331,4739],{"class":701},[425,160333,160334],{"class":427,"line":710},[425,160335,32382],{"class":1155},[425,160337,160338,160340],{"class":427,"line":721},[425,160339,32054],{"class":691},[425,160341,159985],{"class":701},[19,160343,147212],{},[416,160345,160348],{"className":160346,"code":160347,"language":6187,"meta":395},[6185],"1\n2\n",[422,160349,160347],{"__ignoreMap":395},[14,160351,160353],{"id":160352},"_452-continue","4.5.2 continue",[19,160355,160356,160358],{},[422,160357,155427],{}," 跳过本轮剩余代码，进入下一轮循环。",[416,160360,160362],{"className":31133,"code":160361,"language":31135,"meta":395,"style":395},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[422,160363,160364,160384,160396,160400],{"__ignoreMap":395},[425,160365,160366,160368,160370,160372,160374,160376,160378,160380,160382],{"class":427,"line":428},[425,160367,4025],{"class":1155},[425,160369,10437],{"class":701},[425,160371,27034],{"class":1155},[425,160373,33198],{"class":691},[425,160375,1159],{"class":701},[425,160377,1367],{"class":691},[425,160379,13434],{"class":701},[425,160381,1493],{"class":691},[425,160383,31541],{"class":701},[425,160385,160386,160388,160390,160392,160394],{"class":427,"line":698},[425,160387,4101],{"class":1155},[425,160389,10437],{"class":701},[425,160391,3949],{"class":1155},[425,160393,78825],{"class":691},[425,160395,4739],{"class":701},[425,160397,160398],{"class":427,"line":710},[425,160399,149267],{"class":1155},[425,160401,160402,160404],{"class":427,"line":721},[425,160403,32054],{"class":691},[425,160405,159985],{"class":701},[19,160407,147212],{},[416,160409,160412],{"className":160410,"code":160411,"language":6187,"meta":395},[6185],"1\n2\n4\n5\n",[422,160413,160411],{"__ignoreMap":395},[1099,160415,160417],{"id":160416},"_46-for循环","4.6 for循环",[19,160419,160420,160422],{},[422,160421,4025],{}," 常用于遍历序列。",[416,160424,160426],{"className":31133,"code":160425,"language":31135,"meta":395,"style":395},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[422,160427,160428,160437,160441,160452],{"__ignoreMap":395},[425,160429,160430,160432,160434],{"class":427,"line":428},[425,160431,147291],{"class":701},[425,160433,1204],{"class":1155},[425,160435,160436],{"class":435}," \"python\"\n",[425,160438,160439],{"class":427,"line":698},[425,160440,3400],{"emptyLinePlaceholder":1084},[425,160442,160443,160445,160448,160450],{"class":427,"line":710},[425,160444,4025],{"class":1155},[425,160446,160447],{"class":701}," ch ",[425,160449,27034],{"class":1155},[425,160451,159154],{"class":701},[425,160453,160454,160456],{"class":427,"line":721},[425,160455,32054],{"class":691},[425,160457,160458],{"class":701},"(ch)\n",[19,160460,160461],{},"遍历列表：",[416,160463,160465],{"className":31133,"code":160464,"language":31135,"meta":395,"style":395},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[422,160466,160467,160489,160493,160503],{"__ignoreMap":395},[425,160468,160469,160472,160474,160476,160478,160480,160482,160484,160487],{"class":427,"line":428},[425,160470,160471],{"class":701},"students ",[425,160473,1204],{"class":1155},[425,160475,52981],{"class":701},[425,160477,150643],{"class":435},[425,160479,13434],{"class":701},[425,160481,151691],{"class":435},[425,160483,13434],{"class":701},[425,160485,160486],{"class":435},"\"小刚\"",[425,160488,34001],{"class":701},[425,160490,160491],{"class":427,"line":698},[425,160492,3400],{"emptyLinePlaceholder":1084},[425,160494,160495,160497,160499,160501],{"class":427,"line":710},[425,160496,4025],{"class":1155},[425,160498,152892],{"class":701},[425,160500,27034],{"class":1155},[425,160502,152897],{"class":701},[425,160504,160505,160507],{"class":427,"line":721},[425,160506,32054],{"class":691},[425,160508,150797],{"class":701},[1099,160510,160512],{"id":160511},"_47-range函数","4.7 range函数",[19,160514,160515,160518],{},[422,160516,160517],{},"range()"," 用于生成整数序列。",[416,160520,160522],{"className":31133,"code":160521,"language":31135,"meta":395,"style":395},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[422,160523,160524,160538,160556],{"__ignoreMap":395},[425,160525,160526,160528,160530,160532,160535],{"class":427,"line":428},[425,160527,34171],{"class":691},[425,160529,1159],{"class":701},[425,160531,1468],{"class":691},[425,160533,160534],{"class":701},")          ",[425,160536,160537],{"class":1216},"# 0,1,2,3,4\n",[425,160539,160540,160542,160544,160546,160548,160550,160553],{"class":427,"line":698},[425,160541,34171],{"class":691},[425,160543,1159],{"class":701},[425,160545,1367],{"class":691},[425,160547,13434],{"class":701},[425,160549,1468],{"class":691},[425,160551,160552],{"class":701},")       ",[425,160554,160555],{"class":1216},"# 1,2,3,4\n",[425,160557,160558,160560,160562,160564,160566,160568,160570,160572,160574],{"class":427,"line":710},[425,160559,34171],{"class":691},[425,160561,1159],{"class":701},[425,160563,1367],{"class":691},[425,160565,13434],{"class":701},[425,160567,1594],{"class":691},[425,160569,13434],{"class":701},[425,160571,1235],{"class":691},[425,160573,156416],{"class":701},[425,160575,160576],{"class":1216},"# 1,3,5,7,9\n",[19,160578,160579,160580,25611],{},"配合 ",[422,160581,4025],{},[416,160583,160585],{"className":31133,"code":160584,"language":31135,"meta":395,"style":395},"for i in range(1, 6):\n    print(i)\n",[422,160586,160587,160607],{"__ignoreMap":395},[425,160588,160589,160591,160593,160595,160597,160599,160601,160603,160605],{"class":427,"line":428},[425,160590,4025],{"class":1155},[425,160592,10437],{"class":701},[425,160594,27034],{"class":1155},[425,160596,33198],{"class":691},[425,160598,1159],{"class":701},[425,160600,1367],{"class":691},[425,160602,13434],{"class":701},[425,160604,1493],{"class":691},[425,160606,31541],{"class":701},[425,160608,160609,160611],{"class":427,"line":698},[425,160610,32054],{"class":691},[425,160612,159985],{"class":701},[19,160614,970,160615,160617],{},[422,160616,34171],{}," 的结束值不包含在内。",[1099,160619,160621],{"id":160620},"_48-for循环求和","4.8 for循环求和",[416,160623,160625],{"className":31133,"code":160624,"language":31135,"meta":395,"style":395},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[422,160626,160627,160635,160639,160659,160667,160671],{"__ignoreMap":395},[425,160628,160629,160631,160633],{"class":427,"line":428},[425,160630,158015],{"class":701},[425,160632,1204],{"class":1155},[425,160634,48088],{"class":691},[425,160636,160637],{"class":427,"line":698},[425,160638,3400],{"emptyLinePlaceholder":1084},[425,160640,160641,160643,160645,160647,160649,160651,160653,160655,160657],{"class":427,"line":710},[425,160642,4025],{"class":1155},[425,160644,10437],{"class":701},[425,160646,27034],{"class":1155},[425,160648,33198],{"class":691},[425,160650,1159],{"class":701},[425,160652,1367],{"class":691},[425,160654,13434],{"class":701},[425,160656,1486],{"class":691},[425,160658,31541],{"class":701},[425,160660,160661,160663,160665],{"class":427,"line":721},[425,160662,160062],{"class":701},[425,160664,10476],{"class":1155},[425,160666,160067],{"class":701},[425,160668,160669],{"class":427,"line":735},[425,160670,3400],{"emptyLinePlaceholder":1084},[425,160672,160673,160675],{"class":427,"line":743},[425,160674,31170],{"class":691},[425,160676,160086],{"class":701},[19,160678,160679],{},"求偶数和：",[416,160681,160683],{"className":31133,"code":160682,"language":31135,"meta":395,"style":395},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[422,160684,160685,160693,160697,160717,160733,160742,160746],{"__ignoreMap":395},[425,160686,160687,160689,160691],{"class":427,"line":428},[425,160688,158015],{"class":701},[425,160690,1204],{"class":1155},[425,160692,48088],{"class":691},[425,160694,160695],{"class":427,"line":698},[425,160696,3400],{"emptyLinePlaceholder":1084},[425,160698,160699,160701,160703,160705,160707,160709,160711,160713,160715],{"class":427,"line":710},[425,160700,4025],{"class":1155},[425,160702,10437],{"class":701},[425,160704,27034],{"class":1155},[425,160706,33198],{"class":691},[425,160708,1159],{"class":701},[425,160710,1367],{"class":691},[425,160712,13434],{"class":701},[425,160714,1486],{"class":691},[425,160716,31541],{"class":701},[425,160718,160719,160721,160723,160725,160727,160729,160731],{"class":427,"line":721},[425,160720,4101],{"class":1155},[425,160722,10437],{"class":701},[425,160724,1477],{"class":1155},[425,160726,15752],{"class":691},[425,160728,102314],{"class":1155},[425,160730,5093],{"class":691},[425,160732,4739],{"class":701},[425,160734,160735,160738,160740],{"class":427,"line":735},[425,160736,160737],{"class":701},"        total ",[425,160739,10476],{"class":1155},[425,160741,160067],{"class":701},[425,160743,160744],{"class":427,"line":743},[425,160745,3400],{"emptyLinePlaceholder":1084},[425,160747,160748,160750],{"class":427,"line":751},[425,160749,31170],{"class":691},[425,160751,160086],{"class":701},[19,160753,160754],{},"也可以：",[416,160756,160758],{"className":31133,"code":160757,"language":31135,"meta":395,"style":395},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[422,160759,160760,160768,160772,160796,160804,160808],{"__ignoreMap":395},[425,160761,160762,160764,160766],{"class":427,"line":428},[425,160763,158015],{"class":701},[425,160765,1204],{"class":1155},[425,160767,48088],{"class":691},[425,160769,160770],{"class":427,"line":698},[425,160771,3400],{"emptyLinePlaceholder":1084},[425,160773,160774,160776,160778,160780,160782,160784,160786,160788,160790,160792,160794],{"class":427,"line":710},[425,160775,4025],{"class":1155},[425,160777,10437],{"class":701},[425,160779,27034],{"class":1155},[425,160781,33198],{"class":691},[425,160783,1159],{"class":701},[425,160785,1235],{"class":691},[425,160787,13434],{"class":701},[425,160789,1486],{"class":691},[425,160791,13434],{"class":701},[425,160793,1235],{"class":691},[425,160795,31541],{"class":701},[425,160797,160798,160800,160802],{"class":427,"line":721},[425,160799,160062],{"class":701},[425,160801,10476],{"class":1155},[425,160803,160067],{"class":701},[425,160805,160806],{"class":427,"line":735},[425,160807,3400],{"emptyLinePlaceholder":1084},[425,160809,160810,160812],{"class":427,"line":743},[425,160811,31170],{"class":691},[425,160813,160086],{"class":701},[1099,160815,160817],{"id":160816},"_49-循环嵌套","4.9 循环嵌套",[19,160819,160820],{},"嵌套循环就是循环里面再写循环。",[416,160822,160824],{"className":31133,"code":160823,"language":31135,"meta":395,"style":395},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[422,160825,160826,160846,160866],{"__ignoreMap":395},[425,160827,160828,160830,160832,160834,160836,160838,160840,160842,160844],{"class":427,"line":428},[425,160829,4025],{"class":1155},[425,160831,10437],{"class":701},[425,160833,27034],{"class":1155},[425,160835,33198],{"class":691},[425,160837,1159],{"class":701},[425,160839,1367],{"class":691},[425,160841,13434],{"class":701},[425,160843,1442],{"class":691},[425,160845,31541],{"class":701},[425,160847,160848,160850,160852,160854,160856,160858,160860,160862,160864],{"class":427,"line":698},[425,160849,4201],{"class":1155},[425,160851,10499],{"class":701},[425,160853,27034],{"class":1155},[425,160855,33198],{"class":691},[425,160857,1159],{"class":701},[425,160859,1367],{"class":691},[425,160861,13434],{"class":701},[425,160863,1442],{"class":691},[425,160865,31541],{"class":701},[425,160867,160868,160870,160872,160874,160877,160879,160881,160883,160886,160888,160890,160892,160894],{"class":427,"line":710},[425,160869,33206],{"class":691},[425,160871,1159],{"class":701},[425,160873,1210],{"class":1155},[425,160875,160876],{"class":435},"\"i=",[425,160878,2043],{"class":691},[425,160880,1589],{"class":701},[425,160882,2093],{"class":691},[425,160884,160885],{"class":435},", j=",[425,160887,2043],{"class":691},[425,160889,1615],{"class":701},[425,160891,2093],{"class":691},[425,160893,1400],{"class":435},[425,160895,1165],{"class":701},[19,160897,160898],{},"外层循环执行一次，内层循环执行完整一轮。",[1099,160900,160902],{"id":160901},"_410-九九乘法表","4.10 九九乘法表",[416,160904,160906],{"className":31133,"code":160905,"language":31135,"meta":395,"style":395},"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",[422,160907,160908,160928,160951,161003],{"__ignoreMap":395},[425,160909,160910,160912,160914,160916,160918,160920,160922,160924,160926],{"class":427,"line":428},[425,160911,4025],{"class":1155},[425,160913,10437],{"class":701},[425,160915,27034],{"class":1155},[425,160917,33198],{"class":691},[425,160919,1159],{"class":701},[425,160921,1367],{"class":691},[425,160923,13434],{"class":701},[425,160925,1594],{"class":691},[425,160927,31541],{"class":701},[425,160929,160930,160932,160934,160936,160938,160940,160942,160945,160947,160949],{"class":427,"line":698},[425,160931,4201],{"class":1155},[425,160933,10499],{"class":701},[425,160935,27034],{"class":1155},[425,160937,33198],{"class":691},[425,160939,1159],{"class":701},[425,160941,1367],{"class":691},[425,160943,160944],{"class":701},", i ",[425,160946,1629],{"class":1155},[425,160948,26109],{"class":691},[425,160950,31541],{"class":701},[425,160952,160953,160955,160957,160959,160961,160963,160965,160967,160969,160971,160973,160975,160977,160979,160981,160983,160985,160987,160989,160991,160993,160995,160997,160999,161001],{"class":427,"line":710},[425,160954,33206],{"class":691},[425,160956,1159],{"class":701},[425,160958,1210],{"class":1155},[425,160960,1400],{"class":435},[425,160962,2043],{"class":691},[425,160964,1615],{"class":701},[425,160966,2093],{"class":691},[425,160968,1603],{"class":435},[425,160970,2043],{"class":691},[425,160972,1589],{"class":701},[425,160974,2093],{"class":691},[425,160976,1204],{"class":435},[425,160978,2043],{"class":691},[425,160980,100903],{"class":701},[425,160982,1603],{"class":1155},[425,160984,4410],{"class":701},[425,160986,2093],{"class":691},[425,160988,1400],{"class":435},[425,160990,13434],{"class":701},[425,160992,46556],{"class":6216},[425,160994,1204],{"class":1155},[425,160996,1400],{"class":435},[425,160998,2247],{"class":691},[425,161000,1400],{"class":435},[425,161002,1165],{"class":701},[425,161004,161005,161007],{"class":427,"line":721},[425,161006,32054],{"class":691},[425,161008,2976],{"class":701},[19,161010,161011],{},"关键点：",[972,161013,161014,161020,161026,161032],{},[450,161015,161016,161017,161019],{},"外层 ",[422,161018,1589],{}," 控制行。",[450,161021,161022,161023,161025],{},"内层 ",[422,161024,1615],{}," 控制列。",[450,161027,161028,161029,161031],{},"每行结束后用 ",[422,161030,147227],{}," 换行。",[450,161033,161034,161037],{},[422,161035,161036],{},"end=\"\\t\""," 让同一行的内容横向排列。",[1099,161039,161041],{"id":161040},"_411-循环else","4.11 循环else",[19,161043,161044,161045,161047,161048,161050,161051,161053],{},"Python 的循环可以带 ",[422,161046,2703],{},"。当循环正常结束时执行 ",[422,161049,2703],{},"，如果被 ",[422,161052,3053],{}," 打断，则不执行。",[416,161055,161057],{"className":31133,"code":161056,"language":31135,"meta":395,"style":395},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[422,161058,161059,161079,161091,161102,161106,161112],{"__ignoreMap":395},[425,161060,161061,161063,161065,161067,161069,161071,161073,161075,161077],{"class":427,"line":428},[425,161062,4025],{"class":1155},[425,161064,10437],{"class":701},[425,161066,27034],{"class":1155},[425,161068,33198],{"class":691},[425,161070,1159],{"class":701},[425,161072,1367],{"class":691},[425,161074,13434],{"class":701},[425,161076,1493],{"class":691},[425,161078,31541],{"class":701},[425,161080,161081,161083,161085,161087,161089],{"class":427,"line":698},[425,161082,4101],{"class":1155},[425,161084,10437],{"class":701},[425,161086,3949],{"class":1155},[425,161088,3038],{"class":691},[425,161090,4739],{"class":701},[425,161092,161093,161095,161097,161100],{"class":427,"line":710},[425,161094,33206],{"class":691},[425,161096,1159],{"class":701},[425,161098,161099],{"class":435},"\"找到了\"",[425,161101,1165],{"class":701},[425,161103,161104],{"class":427,"line":721},[425,161105,32382],{"class":1155},[425,161107,161108,161110],{"class":427,"line":735},[425,161109,2703],{"class":1155},[425,161111,4739],{"class":701},[425,161113,161114,161116,161118,161121],{"class":427,"line":743},[425,161115,32054],{"class":691},[425,161117,1159],{"class":701},[425,161119,161120],{"class":435},"\"没找到\"",[425,161122,1165],{"class":701},[19,161124,161125],{},"常用于搜索。",[416,161127,161129],{"className":31133,"code":161128,"language":31135,"meta":395,"style":395},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[422,161130,161131,161152,161161,161165,161177,161188,161198,161202,161208],{"__ignoreMap":395},[425,161132,161133,161136,161138,161140,161142,161144,161146,161148,161150],{"class":427,"line":428},[425,161134,161135],{"class":701},"names ",[425,161137,1204],{"class":1155},[425,161139,52981],{"class":701},[425,161141,150643],{"class":435},[425,161143,13434],{"class":701},[425,161145,151691],{"class":435},[425,161147,13434],{"class":701},[425,161149,160486],{"class":435},[425,161151,34001],{"class":701},[425,161153,161154,161156,161158],{"class":427,"line":698},[425,161155,112333],{"class":701},[425,161157,1204],{"class":1155},[425,161159,161160],{"class":435}," \"小李\"\n",[425,161162,161163],{"class":427,"line":710},[425,161164,3400],{"emptyLinePlaceholder":1084},[425,161166,161167,161169,161172,161174],{"class":427,"line":721},[425,161168,4025],{"class":1155},[425,161170,161171],{"class":701}," name ",[425,161173,27034],{"class":1155},[425,161175,161176],{"class":701}," names:\n",[425,161178,161179,161181,161183,161185],{"class":427,"line":735},[425,161180,4101],{"class":1155},[425,161182,161171],{"class":701},[425,161184,3949],{"class":1155},[425,161186,161187],{"class":701}," target:\n",[425,161189,161190,161192,161194,161196],{"class":427,"line":743},[425,161191,33206],{"class":691},[425,161193,1159],{"class":701},[425,161195,161099],{"class":435},[425,161197,1165],{"class":701},[425,161199,161200],{"class":427,"line":751},[425,161201,32382],{"class":1155},[425,161203,161204,161206],{"class":427,"line":759},[425,161205,2703],{"class":1155},[425,161207,4739],{"class":701},[425,161209,161210,161212,161214,161216],{"class":427,"line":770},[425,161211,32054],{"class":691},[425,161213,1159],{"class":701},[425,161215,161120],{"class":435},[425,161217,1165],{"class":701},[1099,161219,161221],{"id":161220},"_412-小案例登录重试","4.12 小案例：登录重试",[19,161223,124047],{},[972,161225,161226,161229,161232],{},[450,161227,161228],{},"用户最多输入 3 次密码。",[450,161230,161231],{},"密码正确则登录成功。",[450,161233,161234],{},"3 次都错误则锁定账号。",[19,161236,11034],{},[416,161238,161240],{"className":31133,"code":161239,"language":31135,"meta":395,"style":395},"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",[422,161241,161242,161252,161256,161272,161288,161292,161304,161315,161319,161325,161350,161356],{"__ignoreMap":395},[425,161243,161244,161247,161249],{"class":427,"line":428},[425,161245,161246],{"class":701},"password ",[425,161248,1204],{"class":1155},[425,161250,161251],{"class":435}," \"123456\"\n",[425,161253,161254],{"class":427,"line":698},[425,161255,3400],{"emptyLinePlaceholder":1084},[425,161257,161258,161260,161262,161264,161266,161268,161270],{"class":427,"line":710},[425,161259,4025],{"class":1155},[425,161261,10437],{"class":701},[425,161263,27034],{"class":1155},[425,161265,33198],{"class":691},[425,161267,1159],{"class":701},[425,161269,1229],{"class":691},[425,161271,31541],{"class":701},[425,161273,161274,161277,161279,161281,161283,161286],{"class":427,"line":721},[425,161275,161276],{"class":701},"    user_password ",[425,161278,1204],{"class":1155},[425,161280,61360],{"class":691},[425,161282,1159],{"class":701},[425,161284,161285],{"class":435},"\"请输入密码:\"",[425,161287,1165],{"class":701},[425,161289,161290],{"class":427,"line":735},[425,161291,3400],{"emptyLinePlaceholder":1084},[425,161293,161294,161296,161299,161301],{"class":427,"line":743},[425,161295,4101],{"class":1155},[425,161297,161298],{"class":701}," user_password ",[425,161300,3949],{"class":1155},[425,161302,161303],{"class":701}," password:\n",[425,161305,161306,161308,161310,161313],{"class":427,"line":751},[425,161307,33206],{"class":691},[425,161309,1159],{"class":701},[425,161311,161312],{"class":435},"\"登录成功\"",[425,161314,1165],{"class":701},[425,161316,161317],{"class":427,"line":759},[425,161318,32382],{"class":1155},[425,161320,161321,161323],{"class":427,"line":770},[425,161322,158777],{"class":1155},[425,161324,4739],{"class":701},[425,161326,161327,161329,161331,161333,161336,161339,161341,161343,161345,161348],{"class":427,"line":780},[425,161328,33206],{"class":691},[425,161330,1159],{"class":701},[425,161332,1210],{"class":1155},[425,161334,161335],{"class":435},"\"密码错误，还剩",[425,161337,161338],{"class":691},"{2",[425,161340,53026],{"class":1155},[425,161342,4032],{"class":701},[425,161344,2093],{"class":691},[425,161346,161347],{"class":435},"次机会\"",[425,161349,1165],{"class":701},[425,161351,161352,161354],{"class":427,"line":790},[425,161353,2703],{"class":1155},[425,161355,4739],{"class":701},[425,161357,161358,161360,161362,161365],{"class":427,"line":805},[425,161359,32054],{"class":691},[425,161361,1159],{"class":701},[425,161363,161364],{"class":435},"\"账号已锁定\"",[425,161366,1165],{"class":701},[1099,161368,161370],{"id":161369},"_413-小案例菜单程序","4.13 小案例：菜单程序",[416,161372,161374],{"className":31133,"code":161373,"language":31135,"meta":395,"style":395},"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",[422,161375,161376,161384,161395,161406,161417,161428,161439,161443,161458,161462,161474,161485,161497,161508,161520,161531,161543,161553,161557,161563],{"__ignoreMap":395},[425,161377,161378,161380,161382],{"class":427,"line":428},[425,161379,109418],{"class":1155},[425,161381,96047],{"class":691},[425,161383,4739],{"class":701},[425,161385,161386,161388,161390,161393],{"class":427,"line":698},[425,161387,32054],{"class":691},[425,161389,1159],{"class":701},[425,161391,161392],{"class":435},"\"====== 菜单 ======\"",[425,161394,1165],{"class":701},[425,161396,161397,161399,161401,161404],{"class":427,"line":710},[425,161398,32054],{"class":691},[425,161400,1159],{"class":701},[425,161402,161403],{"class":435},"\"1. 查询余额\"",[425,161405,1165],{"class":701},[425,161407,161408,161410,161412,161415],{"class":427,"line":721},[425,161409,32054],{"class":691},[425,161411,1159],{"class":701},[425,161413,161414],{"class":435},"\"2. 存款\"",[425,161416,1165],{"class":701},[425,161418,161419,161421,161423,161426],{"class":427,"line":735},[425,161420,32054],{"class":691},[425,161422,1159],{"class":701},[425,161424,161425],{"class":435},"\"3. 取款\"",[425,161427,1165],{"class":701},[425,161429,161430,161432,161434,161437],{"class":427,"line":743},[425,161431,32054],{"class":691},[425,161433,1159],{"class":701},[425,161435,161436],{"class":435},"\"0. 退出\"",[425,161438,1165],{"class":701},[425,161440,161441],{"class":427,"line":751},[425,161442,3400],{"emptyLinePlaceholder":1084},[425,161444,161445,161448,161450,161452,161454,161456],{"class":427,"line":759},[425,161446,161447],{"class":701},"    choice ",[425,161449,1204],{"class":1155},[425,161451,61360],{"class":691},[425,161453,1159],{"class":701},[425,161455,153828],{"class":435},[425,161457,1165],{"class":701},[425,161459,161460],{"class":427,"line":770},[425,161461,3400],{"emptyLinePlaceholder":1084},[425,161463,161464,161466,161468,161470,161472],{"class":427,"line":780},[425,161465,4101],{"class":1155},[425,161467,153841],{"class":701},[425,161469,3949],{"class":1155},[425,161471,153846],{"class":435},[425,161473,4739],{"class":701},[425,161475,161476,161478,161480,161483],{"class":427,"line":790},[425,161477,33206],{"class":691},[425,161479,1159],{"class":701},[425,161481,161482],{"class":435},"\"余额为1000元\"",[425,161484,1165],{"class":701},[425,161486,161487,161489,161491,161493,161495],{"class":427,"line":805},[425,161488,40048],{"class":1155},[425,161490,153841],{"class":701},[425,161492,3949],{"class":1155},[425,161494,153865],{"class":435},[425,161496,4739],{"class":701},[425,161498,161499,161501,161503,161506],{"class":427,"line":818},[425,161500,33206],{"class":691},[425,161502,1159],{"class":701},[425,161504,161505],{"class":435},"\"存款功能\"",[425,161507,1165],{"class":701},[425,161509,161510,161512,161514,161516,161518],{"class":427,"line":831},[425,161511,40048],{"class":1155},[425,161513,153841],{"class":701},[425,161515,3949],{"class":1155},[425,161517,153883],{"class":435},[425,161519,4739],{"class":701},[425,161521,161522,161524,161526,161529],{"class":427,"line":841},[425,161523,33206],{"class":691},[425,161525,1159],{"class":701},[425,161527,161528],{"class":435},"\"取款功能\"",[425,161530,1165],{"class":701},[425,161532,161533,161535,161537,161539,161541],{"class":427,"line":852},[425,161534,40048],{"class":1155},[425,161536,153841],{"class":701},[425,161538,3949],{"class":1155},[425,161540,153937],{"class":435},[425,161542,4739],{"class":701},[425,161544,161545,161547,161549,161551],{"class":427,"line":862},[425,161546,33206],{"class":691},[425,161548,1159],{"class":701},[425,161550,153948],{"class":435},[425,161552,1165],{"class":701},[425,161554,161555],{"class":427,"line":878},[425,161556,32382],{"class":1155},[425,161558,161559,161561],{"class":427,"line":914},[425,161560,158777],{"class":1155},[425,161562,4739],{"class":701},[425,161564,161565,161567,161569,161571],{"class":427,"line":943},[425,161566,33206],{"class":691},[425,161568,1159],{"class":701},[425,161570,153969],{"class":435},[425,161572,1165],{"class":701},[19,161574,161575,161576,161578,161579,998],{},"菜单类程序通常使用 ",[422,161577,160277],{},"，用户选择退出时 ",[422,161580,3053],{},[1099,161582,161584],{"id":161583},"_414-易错点","4.14 易错点",[972,161586,161587,161592,161598,161606,161612],{},[450,161588,161589,161591],{},[422,161590,109418],{}," 循环必须更新控制变量。",[450,161593,161594,161597],{},[422,161595,161596],{},"range(1, 10)"," 不包含 10。",[450,161599,161600,161602,161603,161605],{},[422,161601,3053],{}," 结束整个循环，",[422,161604,155427],{}," 只跳过本轮。",[450,161607,161608,161609,161611],{},"嵌套循环中，",[422,161610,3053],{}," 只跳出当前所在的一层循环。",[450,161613,161614],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[1099,161616,161618],{"id":161617},"_415-本章练习","4.15 本章练习",[972,161620,161621,161624,161627,161630,161633],{},[450,161622,161623],{},"输出 1 到 100。",[450,161625,161626],{},"计算 1 到 100 的偶数和。",[450,161628,161629],{},"输出 100 以内能被 3 和 5 同时整除的数。",[450,161631,161632],{},"编写猜数字游戏，限制最多猜 7 次。",[450,161634,161635],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[1074,161637,161638],{},"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":395,"searchDepth":698,"depth":698,"links":161640},[161641,161642,161643,161644,161645,161649,161650,161651,161652,161653,161654,161655,161656,161657,161658],{"id":159897,"depth":698,"text":159898},{"id":159927,"depth":698,"text":159928},{"id":160016,"depth":698,"text":160017},{"id":160110,"depth":698,"text":160111},{"id":160284,"depth":698,"text":160285,"children":161646},[161647,161648],{"id":160288,"depth":710,"text":160289},{"id":160352,"depth":710,"text":160353},{"id":160416,"depth":698,"text":160417},{"id":160511,"depth":698,"text":160512},{"id":160620,"depth":698,"text":160621},{"id":160816,"depth":698,"text":160817},{"id":160901,"depth":698,"text":160902},{"id":161040,"depth":698,"text":161041},{"id":161220,"depth":698,"text":161221},{"id":161369,"depth":698,"text":161370},{"id":161583,"depth":698,"text":161584},{"id":161617,"depth":698,"text":161618},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159889,"description":24374},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161665,"title":161666,"body":161667,"description":24374,"extension":1082,"meta":163672,"navigation":1084,"path":163673,"seo":163674,"stem":163675,"__hash__":163676},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161668,"toc":163652},[161669,161672,161676,161679,161682,161696,161699,161713,161717,161719,161738,161740,161787,161789,161803,161807,161881,161884,161888,161891,161950,161958,161961,162014,162017,162021,162026,162081,162089,162139,162143,162148,162156,162255,162261,162265,162270,162273,162284,162325,162338,162342,162345,162381,162384,162397,162400,162460,162464,162468,162471,162522,162526,162529,162576,162582,162648,162651,162655,162658,162774,162777,162781,162784,162890,162894,162897,162935,162938,162980,162983,163043,163046,163050,163514,163517,163521,163548,163554,163615,163619,163649],[10,161670,161666],{"id":161671},"_5-函数基础",[1099,161673,161675],{"id":161674},"_51-为什么需要函数","5.1 为什么需要函数",[19,161677,161678],{},"函数用于封装一段可以重复使用的代码。",[19,161680,161681],{},"不使用函数的问题：",[972,161683,161684,161687,161690,161693],{},[450,161685,161686],{},"重复代码多。",[450,161688,161689],{},"修改逻辑时容易漏改。",[450,161691,161692],{},"主流程不清晰。",[450,161694,161695],{},"程序越写越长，难以维护。",[19,161697,161698],{},"使用函数后的好处：",[972,161700,161701,161704,161707,161710],{},[450,161702,161703],{},"提高复用性。",[450,161705,161706],{},"提高可读性。",[450,161708,161709],{},"便于调试。",[450,161711,161712],{},"便于分工。",[1099,161714,161716],{"id":161715},"_52-函数定义","5.2 函数定义",[19,161718,6181],{},[416,161720,161722],{"className":31133,"code":161721,"language":31135,"meta":395,"style":395},"def 函数名():\n    函数体\n",[422,161723,161724,161733],{"__ignoreMap":395},[425,161725,161726,161728,161731],{"class":427,"line":428},[425,161727,32702],{"class":1155},[425,161729,161730],{"class":431}," 函数名",[425,161732,32708],{"class":701},[425,161734,161735],{"class":427,"line":698},[425,161736,161737],{"class":701},"    函数体\n",[19,161739,16132],{},[416,161741,161743],{"className":31133,"code":161742,"language":31135,"meta":395,"style":395},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[422,161744,161745,161754,161764,161774,161778,161782],{"__ignoreMap":395},[425,161746,161747,161749,161752],{"class":427,"line":428},[425,161748,32702],{"class":1155},[425,161750,161751],{"class":431}," say_hello",[425,161753,32708],{"class":701},[425,161755,161756,161758,161760,161762],{"class":427,"line":698},[425,161757,32054],{"class":691},[425,161759,1159],{"class":701},[425,161761,6844],{"class":435},[425,161763,1165],{"class":701},[425,161765,161766,161768,161770,161772],{"class":427,"line":710},[425,161767,32054],{"class":691},[425,161769,1159],{"class":701},[425,161771,147394],{"class":435},[425,161773,1165],{"class":701},[425,161775,161776],{"class":427,"line":721},[425,161777,3400],{"emptyLinePlaceholder":1084},[425,161779,161780],{"class":427,"line":735},[425,161781,3400],{"emptyLinePlaceholder":1084},[425,161783,161784],{"class":427,"line":743},[425,161785,161786],{"class":701},"say_hello()\n",[19,161788,970],{},[972,161790,161791,161794,161797,161800],{},[450,161792,161793],{},"函数必须先定义，再调用。",[450,161795,161796],{},"函数名遵循变量命名规则。",[450,161798,161799],{},"函数体需要缩进。",[450,161801,161802],{},"函数不调用就不会执行。",[1099,161804,161806],{"id":161805},"_53-函数调用","5.3 函数调用",[416,161808,161810],{"className":31133,"code":161809,"language":31135,"meta":395,"style":395},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[422,161811,161812,161821,161832,161843,161854,161864,161868,161872,161877],{"__ignoreMap":395},[425,161813,161814,161816,161819],{"class":427,"line":428},[425,161815,32702],{"class":1155},[425,161817,161818],{"class":431}," print_menu",[425,161820,32708],{"class":701},[425,161822,161823,161825,161827,161830],{"class":427,"line":698},[425,161824,32054],{"class":691},[425,161826,1159],{"class":701},[425,161828,161829],{"class":435},"\"1. 查询\"",[425,161831,1165],{"class":701},[425,161833,161834,161836,161838,161841],{"class":427,"line":710},[425,161835,32054],{"class":691},[425,161837,1159],{"class":701},[425,161839,161840],{"class":435},"\"2. 添加\"",[425,161842,1165],{"class":701},[425,161844,161845,161847,161849,161852],{"class":427,"line":721},[425,161846,32054],{"class":691},[425,161848,1159],{"class":701},[425,161850,161851],{"class":435},"\"3. 删除\"",[425,161853,1165],{"class":701},[425,161855,161856,161858,161860,161862],{"class":427,"line":735},[425,161857,32054],{"class":691},[425,161859,1159],{"class":701},[425,161861,161436],{"class":435},[425,161863,1165],{"class":701},[425,161865,161866],{"class":427,"line":743},[425,161867,3400],{"emptyLinePlaceholder":1084},[425,161869,161870],{"class":427,"line":751},[425,161871,3400],{"emptyLinePlaceholder":1084},[425,161873,161874],{"class":427,"line":759},[425,161875,161876],{"class":701},"print_menu()\n",[425,161878,161879],{"class":427,"line":770},[425,161880,161876],{"class":701},[19,161882,161883],{},"函数可以多次调用，每次调用都会执行函数体。",[1099,161885,161887],{"id":161886},"_54-参数","5.4 参数",[19,161889,161890],{},"参数用于向函数传递数据。",[416,161892,161894],{"className":31133,"code":161893,"language":31135,"meta":395,"style":395},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[422,161895,161896,161905,161925,161929,161933,161942],{"__ignoreMap":395},[425,161897,161898,161900,161902],{"class":427,"line":428},[425,161899,32702],{"class":1155},[425,161901,161751],{"class":431},[425,161903,161904],{"class":701},"(name):\n",[425,161906,161907,161909,161911,161913,161915,161917,161919,161921,161923],{"class":427,"line":698},[425,161908,32054],{"class":691},[425,161910,1159],{"class":701},[425,161912,1210],{"class":1155},[425,161914,157809],{"class":435},[425,161916,2043],{"class":691},[425,161918,80565],{"class":701},[425,161920,2093],{"class":691},[425,161922,1400],{"class":435},[425,161924,1165],{"class":701},[425,161926,161927],{"class":427,"line":710},[425,161928,3400],{"emptyLinePlaceholder":1084},[425,161930,161931],{"class":427,"line":721},[425,161932,3400],{"emptyLinePlaceholder":1084},[425,161934,161935,161938,161940],{"class":427,"line":735},[425,161936,161937],{"class":701},"say_hello(",[425,161939,150643],{"class":435},[425,161941,1165],{"class":701},[425,161943,161944,161946,161948],{"class":427,"line":743},[425,161945,161937],{"class":701},[425,161947,151691],{"class":435},[425,161949,1165],{"class":701},[19,161951,161952,161954,161955,161957],{},[422,161953,80565],{}," 是形参，",[422,161956,150643],{}," 是实参。",[19,161959,161960],{},"多个参数：",[416,161962,161964],{"className":31133,"code":161963,"language":31135,"meta":395,"style":395},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[422,161965,161966,161974,161987,161993,161997,162001],{"__ignoreMap":395},[425,161967,161968,161970,161972],{"class":427,"line":428},[425,161969,32702],{"class":1155},[425,161971,6209],{"class":431},[425,161973,151848],{"class":701},[425,161975,161976,161979,161981,161983,161985],{"class":427,"line":698},[425,161977,161978],{"class":701},"    result ",[425,161980,1204],{"class":1155},[425,161982,11868],{"class":701},[425,161984,1629],{"class":1155},[425,161986,151859],{"class":701},[425,161988,161989,161991],{"class":427,"line":710},[425,161990,32054],{"class":691},[425,161992,77340],{"class":701},[425,161994,161995],{"class":427,"line":721},[425,161996,3400],{"emptyLinePlaceholder":1084},[425,161998,161999],{"class":427,"line":735},[425,162000,3400],{"emptyLinePlaceholder":1084},[425,162002,162003,162006,162008,162010,162012],{"class":427,"line":743},[425,162004,162005],{"class":701},"add(",[425,162007,1594],{"class":691},[425,162009,13434],{"class":701},[425,162011,1848],{"class":691},[425,162013,1165],{"class":701},[19,162015,162016],{},"调用时参数数量必须匹配。",[1099,162018,162020],{"id":162019},"_55-返回值","5.5 返回值",[19,162022,162023,162025],{},[422,162024,18043],{}," 用于把函数内部的结果返回给调用者。",[416,162027,162029],{"className":31133,"code":162028,"language":31135,"meta":395,"style":395},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[422,162030,162031,162039,162049,162053,162057,162075],{"__ignoreMap":395},[425,162032,162033,162035,162037],{"class":427,"line":428},[425,162034,32702],{"class":1155},[425,162036,6209],{"class":431},[425,162038,151848],{"class":701},[425,162040,162041,162043,162045,162047],{"class":427,"line":698},[425,162042,5090],{"class":1155},[425,162044,11868],{"class":701},[425,162046,1629],{"class":1155},[425,162048,151859],{"class":701},[425,162050,162051],{"class":427,"line":710},[425,162052,3400],{"emptyLinePlaceholder":1084},[425,162054,162055],{"class":427,"line":721},[425,162056,3400],{"emptyLinePlaceholder":1084},[425,162058,162059,162062,162064,162067,162069,162071,162073],{"class":427,"line":735},[425,162060,162061],{"class":701},"result ",[425,162063,1204],{"class":1155},[425,162065,162066],{"class":701}," add(",[425,162068,1594],{"class":691},[425,162070,13434],{"class":701},[425,162072,1848],{"class":691},[425,162074,1165],{"class":701},[425,162076,162077,162079],{"class":427,"line":743},[425,162078,31170],{"class":691},[425,162080,77340],{"class":701},[19,162082,162083,162084,162086,162087,998],{},"如果函数没有写 ",[422,162085,18043],{},"，默认返回 ",[422,162088,96441],{},[416,162090,162092],{"className":31133,"code":162091,"language":31135,"meta":395,"style":395},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[422,162093,162094,162102,162112,162116,162120,162129],{"__ignoreMap":395},[425,162095,162096,162098,162100],{"class":427,"line":428},[425,162097,32702],{"class":1155},[425,162099,161751],{"class":431},[425,162101,32708],{"class":701},[425,162103,162104,162106,162108,162110],{"class":427,"line":698},[425,162105,32054],{"class":691},[425,162107,1159],{"class":701},[425,162109,6844],{"class":435},[425,162111,1165],{"class":701},[425,162113,162114],{"class":427,"line":710},[425,162115,3400],{"emptyLinePlaceholder":1084},[425,162117,162118],{"class":427,"line":721},[425,162119,3400],{"emptyLinePlaceholder":1084},[425,162121,162122,162124,162126],{"class":427,"line":735},[425,162123,162061],{"class":701},[425,162125,1204],{"class":1155},[425,162127,162128],{"class":701}," say_hello()\n",[425,162130,162131,162133,162136],{"class":427,"line":743},[425,162132,31170],{"class":691},[425,162134,162135],{"class":701},"(result)  ",[425,162137,162138],{"class":1216},"# None\n",[1099,162140,162142],{"id":162141},"_56-return的作用","5.6 return的作用",[19,162144,162145,162147],{},[422,162146,18043],{}," 有两个作用：",[972,162149,162150,162153],{},[450,162151,162152],{},"返回结果。",[450,162154,162155],{},"结束函数。",[416,162157,162159],{"className":31133,"code":162158,"language":31135,"meta":395,"style":395},"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",[422,162160,162161,162171,162183,162190,162194,162206,162213,162217,162224,162228,162232,162243],{"__ignoreMap":395},[425,162162,162163,162165,162168],{"class":427,"line":428},[425,162164,32702],{"class":1155},[425,162166,162167],{"class":431}," check_age",[425,162169,162170],{"class":701},"(age):\n",[425,162172,162173,162175,162177,162179,162181],{"class":427,"line":698},[425,162174,4101],{"class":1155},[425,162176,16704],{"class":701},[425,162178,2057],{"class":1155},[425,162180,5093],{"class":691},[425,162182,4739],{"class":701},[425,162184,162185,162187],{"class":427,"line":710},[425,162186,15749],{"class":1155},[425,162188,162189],{"class":435}," \"年龄不合法\"\n",[425,162191,162192],{"class":427,"line":721},[425,162193,3400],{"emptyLinePlaceholder":1084},[425,162195,162196,162198,162200,162202,162204],{"class":427,"line":735},[425,162197,4101],{"class":1155},[425,162199,16704],{"class":701},[425,162201,2712],{"class":1155},[425,162203,157040],{"class":691},[425,162205,4739],{"class":701},[425,162207,162208,162210],{"class":427,"line":743},[425,162209,15749],{"class":1155},[425,162211,162212],{"class":435}," \"成年人\"\n",[425,162214,162215],{"class":427,"line":751},[425,162216,3400],{"emptyLinePlaceholder":1084},[425,162218,162219,162221],{"class":427,"line":759},[425,162220,5090],{"class":1155},[425,162222,162223],{"class":435}," \"未成年人\"\n",[425,162225,162226],{"class":427,"line":770},[425,162227,3400],{"emptyLinePlaceholder":1084},[425,162229,162230],{"class":427,"line":780},[425,162231,3400],{"emptyLinePlaceholder":1084},[425,162233,162234,162236,162239,162241],{"class":427,"line":790},[425,162235,31170],{"class":691},[425,162237,162238],{"class":701},"(check_age(",[425,162240,1848],{"class":691},[425,162242,31252],{"class":701},[425,162244,162245,162247,162249,162251,162253],{"class":427,"line":805},[425,162246,31170],{"class":691},[425,162248,162238],{"class":701},[425,162250,1680],{"class":1155},[425,162252,1367],{"class":691},[425,162254,31252],{"class":701},[19,162256,162257,162258,162260],{},"函数执行到 ",[422,162259,18043],{}," 后，后面的代码不会继续执行。",[1099,162262,162264],{"id":162263},"_57-none","5.7 None",[19,162266,162267,162269],{},[422,162268,96441],{}," 表示空值或没有结果。",[19,162271,162272],{},"常见使用场景：",[972,162274,162275,162278,162281],{},[450,162276,162277],{},"函数没有返回值。",[450,162279,162280],{},"变量暂时没有具体值。",[450,162282,162283],{},"表示查询不到结果。",[416,162285,162287],{"className":31133,"code":162286,"language":31135,"meta":395,"style":395},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[422,162288,162289,162297,162301,162314],{"__ignoreMap":395},[425,162290,162291,162293,162295],{"class":427,"line":428},[425,162292,162061],{"class":701},[425,162294,1204],{"class":1155},[425,162296,152927],{"class":691},[425,162298,162299],{"class":427,"line":698},[425,162300,3400],{"emptyLinePlaceholder":1084},[425,162302,162303,162305,162308,162310,162312],{"class":427,"line":710},[425,162304,2544],{"class":1155},[425,162306,162307],{"class":701}," result ",[425,162309,39682],{"class":1155},[425,162311,39688],{"class":691},[425,162313,4739],{"class":701},[425,162315,162316,162318,162320,162323],{"class":427,"line":721},[425,162317,32054],{"class":691},[425,162319,1159],{"class":701},[425,162321,162322],{"class":435},"\"没有数据\"",[425,162324,1165],{"class":701},[19,162326,162327,162328,162330,162331,162334,162335,998],{},"判断 ",[422,162329,96441],{}," 推荐使用 ",[422,162332,162333],{},"is None","，不要写成 ",[422,162336,162337],{},"== None",[1099,162339,162341],{"id":162340},"_58-函数文档字符串","5.8 函数文档字符串",[19,162343,162344],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[416,162346,162348],{"className":31133,"code":162347,"language":31135,"meta":395,"style":395},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[422,162349,162350,162360,162365],{"__ignoreMap":395},[425,162351,162352,162354,162357],{"class":427,"line":428},[425,162353,32702],{"class":1155},[425,162355,162356],{"class":431}," calculate_bmi",[425,162358,162359],{"class":701},"(weight, height):\n",[425,162361,162362],{"class":427,"line":698},[425,162363,162364],{"class":435},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[425,162366,162367,162369,162372,162374,162377,162379],{"class":427,"line":710},[425,162368,5090],{"class":1155},[425,162370,162371],{"class":701}," weight ",[425,162373,1732],{"class":1155},[425,162375,162376],{"class":701}," height ",[425,162378,11660],{"class":1155},[425,162380,48478],{"class":691},[19,162382,162383],{},"查看说明：",[416,162385,162387],{"className":31133,"code":162386,"language":31135,"meta":395,"style":395},"help(calculate_bmi)\n",[422,162388,162389],{"__ignoreMap":395},[425,162390,162391,162394],{"class":427,"line":428},[425,162392,162393],{"class":691},"help",[425,162395,162396],{"class":701},"(calculate_bmi)\n",[19,162398,162399],{},"较完整的写法：",[416,162401,162403],{"className":31133,"code":162402,"language":31135,"meta":395,"style":395},"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",[422,162404,162405,162413,162418,162423,162427,162432,162437,162442,162446],{"__ignoreMap":395},[425,162406,162407,162409,162411],{"class":427,"line":428},[425,162408,32702],{"class":1155},[425,162410,162356],{"class":431},[425,162412,162359],{"class":701},[425,162414,162415],{"class":427,"line":698},[425,162416,162417],{"class":435},"    \"\"\"\n",[425,162419,162420],{"class":427,"line":710},[425,162421,162422],{"class":435},"    计算BMI。\n",[425,162424,162425],{"class":427,"line":721},[425,162426,3400],{"emptyLinePlaceholder":1084},[425,162428,162429],{"class":427,"line":735},[425,162430,162431],{"class":435},"    :param weight: 体重，单位kg\n",[425,162433,162434],{"class":427,"line":743},[425,162435,162436],{"class":435},"    :param height: 身高，单位m\n",[425,162438,162439],{"class":427,"line":751},[425,162440,162441],{"class":435},"    :return: BMI数值\n",[425,162443,162444],{"class":427,"line":759},[425,162445,162417],{"class":435},[425,162447,162448,162450,162452,162454,162456,162458],{"class":427,"line":770},[425,162449,5090],{"class":1155},[425,162451,162371],{"class":701},[425,162453,1732],{"class":1155},[425,162455,162376],{"class":701},[425,162457,11660],{"class":1155},[425,162459,48478],{"class":691},[1099,162461,162463],{"id":162462},"_59-变量作用域","5.9 变量作用域",[14,162465,162467],{"id":162466},"_591-局部变量","5.9.1 局部变量",[19,162469,162470],{},"在函数内部定义的变量，只能在函数内部使用。",[416,162472,162474],{"className":31133,"code":162473,"language":31135,"meta":395,"style":395},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[422,162475,162476,162485,162493,162499,162503,162507,162512],{"__ignoreMap":395},[425,162477,162478,162480,162483],{"class":427,"line":428},[425,162479,32702],{"class":1155},[425,162481,162482],{"class":431}," test",[425,162484,32708],{"class":701},[425,162486,162487,162489,162491],{"class":427,"line":698},[425,162488,46348],{"class":701},[425,162490,1204],{"class":1155},[425,162492,59183],{"class":691},[425,162494,162495,162497],{"class":427,"line":710},[425,162496,32054],{"class":691},[425,162498,1172],{"class":701},[425,162500,162501],{"class":427,"line":721},[425,162502,3400],{"emptyLinePlaceholder":1084},[425,162504,162505],{"class":427,"line":735},[425,162506,3400],{"emptyLinePlaceholder":1084},[425,162508,162509],{"class":427,"line":743},[425,162510,162511],{"class":701},"test()\n",[425,162513,162514,162516,162519],{"class":427,"line":751},[425,162515,31170],{"class":691},[425,162517,162518],{"class":701},"(num)  ",[425,162520,162521],{"class":1216},"# 报错\n",[14,162523,162525],{"id":162524},"_592-全局变量","5.9.2 全局变量",[19,162527,162528],{},"在函数外部定义的变量，可以在函数内部读取。",[416,162530,162532],{"className":31133,"code":162531,"language":31135,"meta":395,"style":395},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[422,162533,162534,162542,162546,162550,162558,162564,162568,162572],{"__ignoreMap":395},[425,162535,162536,162538,162540],{"class":427,"line":428},[425,162537,147291],{"class":701},[425,162539,1204],{"class":1155},[425,162541,150108],{"class":435},[425,162543,162544],{"class":427,"line":698},[425,162545,3400],{"emptyLinePlaceholder":1084},[425,162547,162548],{"class":427,"line":710},[425,162549,3400],{"emptyLinePlaceholder":1084},[425,162551,162552,162554,162556],{"class":427,"line":721},[425,162553,32702],{"class":1155},[425,162555,161751],{"class":431},[425,162557,32708],{"class":701},[425,162559,162560,162562],{"class":427,"line":735},[425,162561,32054],{"class":691},[425,162563,151415],{"class":701},[425,162565,162566],{"class":427,"line":743},[425,162567,3400],{"emptyLinePlaceholder":1084},[425,162569,162570],{"class":427,"line":751},[425,162571,3400],{"emptyLinePlaceholder":1084},[425,162573,162574],{"class":427,"line":759},[425,162575,161786],{"class":701},[19,162577,162578,162579,998],{},"如果要在函数内部修改全局变量，需要 ",[422,162580,162581],{},"global",[416,162583,162585],{"className":31133,"code":162584,"language":31135,"meta":395,"style":395},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[422,162586,162587,162595,162599,162603,162612,162620,162628,162632,162636,162641],{"__ignoreMap":395},[425,162588,162589,162591,162593],{"class":427,"line":428},[425,162590,147446],{"class":701},[425,162592,1204],{"class":1155},[425,162594,48088],{"class":691},[425,162596,162597],{"class":427,"line":698},[425,162598,3400],{"emptyLinePlaceholder":1084},[425,162600,162601],{"class":427,"line":710},[425,162602,3400],{"emptyLinePlaceholder":1084},[425,162604,162605,162607,162610],{"class":427,"line":721},[425,162606,32702],{"class":1155},[425,162608,162609],{"class":431}," add_count",[425,162611,32708],{"class":701},[425,162613,162614,162617],{"class":427,"line":735},[425,162615,162616],{"class":1155},"    global",[425,162618,162619],{"class":701}," count\n",[425,162621,162622,162624,162626],{"class":427,"line":743},[425,162623,160188],{"class":701},[425,162625,10476],{"class":1155},[425,162627,56454],{"class":691},[425,162629,162630],{"class":427,"line":751},[425,162631,3400],{"emptyLinePlaceholder":1084},[425,162633,162634],{"class":427,"line":759},[425,162635,3400],{"emptyLinePlaceholder":1084},[425,162637,162638],{"class":427,"line":770},[425,162639,162640],{"class":701},"add_count()\n",[425,162642,162643,162645],{"class":427,"line":780},[425,162644,31170],{"class":691},[425,162646,162647],{"class":701},"(count)\n",[19,162649,162650],{},"不建议大量使用全局变量，项目变大后很难维护。",[1099,162652,162654],{"id":162653},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,162656,162657],{},"一个函数中可以调用另一个函数。",[416,162659,162661],{"className":31133,"code":162660,"language":31135,"meta":395,"style":395},"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",[422,162662,162663,162672,162686,162690,162694,162703,162708,162728,162749,162753,162757,162761],{"__ignoreMap":395},[425,162664,162665,162667,162670],{"class":427,"line":428},[425,162666,32702],{"class":1155},[425,162668,162669],{"class":431}," print_line",[425,162671,32708],{"class":701},[425,162673,162674,162676,162678,162680,162682,162684],{"class":427,"line":698},[425,162675,32054],{"class":691},[425,162677,1159],{"class":701},[425,162679,33238],{"class":435},[425,162681,7518],{"class":1155},[425,162683,79420],{"class":691},[425,162685,1165],{"class":701},[425,162687,162688],{"class":427,"line":710},[425,162689,3400],{"emptyLinePlaceholder":1084},[425,162691,162692],{"class":427,"line":721},[425,162693,3400],{"emptyLinePlaceholder":1084},[425,162695,162696,162698,162701],{"class":427,"line":735},[425,162697,32702],{"class":1155},[425,162699,162700],{"class":431}," print_info",[425,162702,150130],{"class":701},[425,162704,162705],{"class":427,"line":743},[425,162706,162707],{"class":701},"    print_line()\n",[425,162709,162710,162712,162714,162716,162718,162720,162722,162724,162726],{"class":427,"line":751},[425,162711,32054],{"class":691},[425,162713,1159],{"class":701},[425,162715,1210],{"class":1155},[425,162717,157437],{"class":435},[425,162719,2043],{"class":691},[425,162721,80565],{"class":701},[425,162723,2093],{"class":691},[425,162725,1400],{"class":435},[425,162727,1165],{"class":701},[425,162729,162730,162732,162734,162736,162739,162741,162743,162745,162747],{"class":427,"line":759},[425,162731,32054],{"class":691},[425,162733,1159],{"class":701},[425,162735,1210],{"class":1155},[425,162737,162738],{"class":435},"\"年龄:",[425,162740,2043],{"class":691},[425,162742,70976],{"class":701},[425,162744,2093],{"class":691},[425,162746,1400],{"class":435},[425,162748,1165],{"class":701},[425,162750,162751],{"class":427,"line":770},[425,162752,162707],{"class":701},[425,162754,162755],{"class":427,"line":780},[425,162756,3400],{"emptyLinePlaceholder":1084},[425,162758,162759],{"class":427,"line":790},[425,162760,3400],{"emptyLinePlaceholder":1084},[425,162762,162763,162766,162768,162770,162772],{"class":427,"line":805},[425,162764,162765],{"class":701},"print_info(",[425,162767,150643],{"class":435},[425,162769,13434],{"class":701},[425,162771,1798],{"class":691},[425,162773,1165],{"class":701},[19,162775,162776],{},"这种方式可以把小功能组合成大功能。",[1099,162778,162780],{"id":162779},"_511-参数检查","5.11 参数检查",[19,162782,162783],{},"函数内部可以检查参数是否合法。",[416,162785,162787],{"className":31133,"code":162786,"language":31135,"meta":395,"style":395},"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",[422,162788,162789,162798,162810,162816,162826,162830,162834,162851,162855,162867,162878,162884],{"__ignoreMap":395},[425,162790,162791,162793,162796],{"class":427,"line":428},[425,162792,32702],{"class":1155},[425,162794,162795],{"class":431}," divide",[425,162797,151848],{"class":701},[425,162799,162800,162802,162804,162806,162808],{"class":427,"line":698},[425,162801,4101],{"class":1155},[425,162803,11881],{"class":701},[425,162805,3949],{"class":1155},[425,162807,5093],{"class":691},[425,162809,4739],{"class":701},[425,162811,162812,162814],{"class":427,"line":710},[425,162813,15749],{"class":1155},[425,162815,152927],{"class":691},[425,162817,162818,162820,162822,162824],{"class":427,"line":721},[425,162819,5090],{"class":1155},[425,162821,11868],{"class":701},[425,162823,1732],{"class":1155},[425,162825,151859],{"class":701},[425,162827,162828],{"class":427,"line":735},[425,162829,3400],{"emptyLinePlaceholder":1084},[425,162831,162832],{"class":427,"line":743},[425,162833,3400],{"emptyLinePlaceholder":1084},[425,162835,162836,162838,162840,162843,162845,162847,162849],{"class":427,"line":751},[425,162837,162061],{"class":701},[425,162839,1204],{"class":1155},[425,162841,162842],{"class":701}," divide(",[425,162844,1594],{"class":691},[425,162846,13434],{"class":701},[425,162848,1341],{"class":691},[425,162850,1165],{"class":701},[425,162852,162853],{"class":427,"line":759},[425,162854,3400],{"emptyLinePlaceholder":1084},[425,162856,162857,162859,162861,162863,162865],{"class":427,"line":770},[425,162858,2544],{"class":1155},[425,162860,162307],{"class":701},[425,162862,39682],{"class":1155},[425,162864,39688],{"class":691},[425,162866,4739],{"class":701},[425,162868,162869,162871,162873,162876],{"class":427,"line":780},[425,162870,32054],{"class":691},[425,162872,1159],{"class":701},[425,162874,162875],{"class":435},"\"除数不能为0\"",[425,162877,1165],{"class":701},[425,162879,162880,162882],{"class":427,"line":790},[425,162881,2703],{"class":1155},[425,162883,4739],{"class":701},[425,162885,162886,162888],{"class":427,"line":805},[425,162887,32054],{"class":691},[425,162889,77340],{"class":701},[1099,162891,162893],{"id":162892},"_512-类型提示","5.12 类型提示",[19,162895,162896],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[416,162898,162900],{"className":31133,"code":162899,"language":31135,"meta":395,"style":395},"def add(a: int, b: int) -> int:\n    return a + b\n",[422,162901,162902,162925],{"__ignoreMap":395},[425,162903,162904,162906,162908,162911,162913,162916,162918,162921,162923],{"class":427,"line":428},[425,162905,32702],{"class":1155},[425,162907,6209],{"class":431},[425,162909,162910],{"class":701},"(a: ",[425,162912,1162],{"class":691},[425,162914,162915],{"class":701},", b: ",[425,162917,1162],{"class":691},[425,162919,162920],{"class":701},") -> ",[425,162922,1162],{"class":691},[425,162924,4739],{"class":701},[425,162926,162927,162929,162931,162933],{"class":427,"line":698},[425,162928,5090],{"class":1155},[425,162930,11868],{"class":701},[425,162932,1629],{"class":1155},[425,162934,151859],{"class":701},[19,162936,162937],{},"字符串参数：",[416,162939,162941],{"className":31133,"code":162940,"language":31135,"meta":395,"style":395},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[422,162942,162943,162960],{"__ignoreMap":395},[425,162944,162945,162947,162949,162952,162954,162956,162958],{"class":427,"line":428},[425,162946,32702],{"class":1155},[425,162948,161751],{"class":431},[425,162950,162951],{"class":701},"(name: ",[425,162953,2316],{"class":691},[425,162955,162920],{"class":701},[425,162957,96441],{"class":691},[425,162959,4739],{"class":701},[425,162961,162962,162964,162966,162968,162970,162972,162974,162976,162978],{"class":427,"line":698},[425,162963,32054],{"class":691},[425,162965,1159],{"class":701},[425,162967,1210],{"class":1155},[425,162969,157809],{"class":435},[425,162971,2043],{"class":691},[425,162973,80565],{"class":701},[425,162975,2093],{"class":691},[425,162977,1400],{"class":435},[425,162979,1165],{"class":701},[19,162981,162982],{},"列表参数：",[416,162984,162986],{"className":31133,"code":162985,"language":31135,"meta":395,"style":395},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[422,162987,162988,163007,163015,163027,163036],{"__ignoreMap":395},[425,162989,162990,162992,162995,162998,163000,163003,163005],{"class":427,"line":428},[425,162991,32702],{"class":1155},[425,162993,162994],{"class":431}," get_total",[425,162996,162997],{"class":701},"(numbers: list[",[425,162999,1162],{"class":691},[425,163001,163002],{"class":701},"]) -> ",[425,163004,1162],{"class":691},[425,163006,4739],{"class":701},[425,163008,163009,163011,163013],{"class":427,"line":698},[425,163010,160062],{"class":701},[425,163012,1204],{"class":1155},[425,163014,48088],{"class":691},[425,163016,163017,163019,163022,163024],{"class":427,"line":710},[425,163018,4201],{"class":1155},[425,163020,163021],{"class":701}," number ",[425,163023,27034],{"class":1155},[425,163025,163026],{"class":701}," numbers:\n",[425,163028,163029,163031,163033],{"class":427,"line":721},[425,163030,160737],{"class":701},[425,163032,10476],{"class":1155},[425,163034,163035],{"class":701}," number\n",[425,163037,163038,163040],{"class":427,"line":735},[425,163039,5090],{"class":1155},[425,163041,163042],{"class":701}," total\n",[19,163044,163045],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[1099,163047,163049],{"id":163048},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[416,163051,163053],{"className":31133,"code":163052,"language":31135,"meta":395,"style":395},"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",[422,163054,163055,163065,163069,163073,163081,163092,163102,163112,163122,163132,163136,163140,163149,163171,163175,163179,163188,163194,163214,163226,163237,163241,163250,163261,163266,163270,163274,163283,163289,163308,163320,163330,163334,163345,163355,163359,163367,163378,163382,163386,163390,163398,163403,163417,163421,163433,163438,163450,163455,163467,163472,163484,163494,163498,163504],{"__ignoreMap":395},[425,163056,163057,163060,163062],{"class":427,"line":428},[425,163058,163059],{"class":701},"balance ",[425,163061,1204],{"class":1155},[425,163063,163064],{"class":691}," 1000\n",[425,163066,163067],{"class":427,"line":698},[425,163068,3400],{"emptyLinePlaceholder":1084},[425,163070,163071],{"class":427,"line":710},[425,163072,3400],{"emptyLinePlaceholder":1084},[425,163074,163075,163077,163079],{"class":427,"line":721},[425,163076,32702],{"class":1155},[425,163078,152788],{"class":431},[425,163080,32708],{"class":701},[425,163082,163083,163085,163087,163090],{"class":427,"line":735},[425,163084,32054],{"class":691},[425,163086,1159],{"class":701},[425,163088,163089],{"class":435},"\"====== ATM ======\"",[425,163091,1165],{"class":701},[425,163093,163094,163096,163098,163100],{"class":427,"line":743},[425,163095,32054],{"class":691},[425,163097,1159],{"class":701},[425,163099,161403],{"class":435},[425,163101,1165],{"class":701},[425,163103,163104,163106,163108,163110],{"class":427,"line":751},[425,163105,32054],{"class":691},[425,163107,1159],{"class":701},[425,163109,161414],{"class":435},[425,163111,1165],{"class":701},[425,163113,163114,163116,163118,163120],{"class":427,"line":759},[425,163115,32054],{"class":691},[425,163117,1159],{"class":701},[425,163119,161425],{"class":435},[425,163121,1165],{"class":701},[425,163123,163124,163126,163128,163130],{"class":427,"line":770},[425,163125,32054],{"class":691},[425,163127,1159],{"class":701},[425,163129,161436],{"class":435},[425,163131,1165],{"class":701},[425,163133,163134],{"class":427,"line":780},[425,163135,3400],{"emptyLinePlaceholder":1084},[425,163137,163138],{"class":427,"line":790},[425,163139,3400],{"emptyLinePlaceholder":1084},[425,163141,163142,163144,163147],{"class":427,"line":805},[425,163143,32702],{"class":1155},[425,163145,163146],{"class":431}," show_balance",[425,163148,32708],{"class":701},[425,163150,163151,163153,163155,163157,163160,163162,163165,163167,163169],{"class":427,"line":818},[425,163152,32054],{"class":691},[425,163154,1159],{"class":701},[425,163156,1210],{"class":1155},[425,163158,163159],{"class":435},"\"当前余额:",[425,163161,2043],{"class":691},[425,163163,163164],{"class":701},"balance",[425,163166,2093],{"class":691},[425,163168,157767],{"class":435},[425,163170,1165],{"class":701},[425,163172,163173],{"class":427,"line":831},[425,163174,3400],{"emptyLinePlaceholder":1084},[425,163176,163177],{"class":427,"line":841},[425,163178,3400],{"emptyLinePlaceholder":1084},[425,163180,163181,163183,163186],{"class":427,"line":852},[425,163182,32702],{"class":1155},[425,163184,163185],{"class":431}," save_money",[425,163187,32708],{"class":701},[425,163189,163190,163192],{"class":427,"line":862},[425,163191,162616],{"class":1155},[425,163193,150854],{"class":701},[425,163195,163196,163199,163201,163203,163205,163207,163209,163212],{"class":427,"line":878},[425,163197,163198],{"class":701},"    money ",[425,163200,1204],{"class":1155},[425,163202,110552],{"class":691},[425,163204,1159],{"class":701},[425,163206,54576],{"class":691},[425,163208,1159],{"class":701},[425,163210,163211],{"class":435},"\"请输入存款金额:\"",[425,163213,31252],{"class":701},[425,163215,163216,163218,163220,163222,163224],{"class":427,"line":914},[425,163217,4101],{"class":1155},[425,163219,150897],{"class":701},[425,163221,2601],{"class":1155},[425,163223,5093],{"class":691},[425,163225,4739],{"class":701},[425,163227,163228,163230,163232,163235],{"class":427,"line":943},[425,163229,33206],{"class":691},[425,163231,1159],{"class":701},[425,163233,163234],{"class":435},"\"金额必须大于0\"",[425,163236,1165],{"class":701},[425,163238,163239],{"class":427,"line":956},[425,163240,153116],{"class":1155},[425,163242,163243,163246,163248],{"class":427,"line":964},[425,163244,163245],{"class":701},"    balance ",[425,163247,10476],{"class":1155},[425,163249,150930],{"class":701},[425,163251,163252,163254,163256,163259],{"class":427,"line":2733},[425,163253,32054],{"class":691},[425,163255,1159],{"class":701},[425,163257,163258],{"class":435},"\"存款成功\"",[425,163260,1165],{"class":701},[425,163262,163263],{"class":427,"line":2750},[425,163264,163265],{"class":701},"    show_balance()\n",[425,163267,163268],{"class":427,"line":2755},[425,163269,3400],{"emptyLinePlaceholder":1084},[425,163271,163272],{"class":427,"line":2760},[425,163273,3400],{"emptyLinePlaceholder":1084},[425,163275,163276,163278,163281],{"class":427,"line":2765},[425,163277,32702],{"class":1155},[425,163279,163280],{"class":431}," withdraw_money",[425,163282,32708],{"class":701},[425,163284,163285,163287],{"class":427,"line":2779},[425,163286,162616],{"class":1155},[425,163288,150854],{"class":701},[425,163290,163291,163293,163295,163297,163299,163301,163303,163306],{"class":427,"line":2784},[425,163292,163198],{"class":701},[425,163294,1204],{"class":1155},[425,163296,110552],{"class":691},[425,163298,1159],{"class":701},[425,163300,54576],{"class":691},[425,163302,1159],{"class":701},[425,163304,163305],{"class":435},"\"请输入取款金额:\"",[425,163307,31252],{"class":701},[425,163309,163310,163312,163314,163316,163318],{"class":427,"line":3577},[425,163311,4101],{"class":1155},[425,163313,150897],{"class":701},[425,163315,2601],{"class":1155},[425,163317,5093],{"class":691},[425,163319,4739],{"class":701},[425,163321,163322,163324,163326,163328],{"class":427,"line":3591},[425,163323,33206],{"class":691},[425,163325,1159],{"class":701},[425,163327,163234],{"class":435},[425,163329,1165],{"class":701},[425,163331,163332],{"class":427,"line":3599},[425,163333,153116],{"class":1155},[425,163335,163336,163338,163340,163342],{"class":427,"line":3604},[425,163337,4101],{"class":1155},[425,163339,150897],{"class":701},[425,163341,2107],{"class":1155},[425,163343,163344],{"class":701}," balance:\n",[425,163346,163347,163349,163351,163353],{"class":427,"line":3610},[425,163348,33206],{"class":691},[425,163350,1159],{"class":701},[425,163352,150992],{"class":435},[425,163354,1165],{"class":701},[425,163356,163357],{"class":427,"line":3616},[425,163358,153116],{"class":1155},[425,163360,163361,163363,163365],{"class":427,"line":3621},[425,163362,163245],{"class":701},[425,163364,151007],{"class":1155},[425,163366,150930],{"class":701},[425,163368,163369,163371,163373,163376],{"class":427,"line":8948},[425,163370,32054],{"class":691},[425,163372,1159],{"class":701},[425,163374,163375],{"class":435},"\"取款成功\"",[425,163377,1165],{"class":701},[425,163379,163380],{"class":427,"line":8972},[425,163381,163265],{"class":701},[425,163383,163384],{"class":427,"line":8977},[425,163385,3400],{"emptyLinePlaceholder":1084},[425,163387,163388],{"class":427,"line":8983},[425,163389,3400],{"emptyLinePlaceholder":1084},[425,163391,163392,163394,163396],{"class":427,"line":9010},[425,163393,109418],{"class":1155},[425,163395,96047],{"class":691},[425,163397,4739],{"class":701},[425,163399,163400],{"class":427,"line":9015},[425,163401,163402],{"class":701},"    show_menu()\n",[425,163404,163405,163407,163409,163411,163413,163415],{"class":427,"line":9021},[425,163406,161447],{"class":701},[425,163408,1204],{"class":1155},[425,163410,61360],{"class":691},[425,163412,1159],{"class":701},[425,163414,153828],{"class":435},[425,163416,1165],{"class":701},[425,163418,163419],{"class":427,"line":9033},[425,163420,3400],{"emptyLinePlaceholder":1084},[425,163422,163423,163425,163427,163429,163431],{"class":427,"line":9045},[425,163424,4101],{"class":1155},[425,163426,153841],{"class":701},[425,163428,3949],{"class":1155},[425,163430,153846],{"class":435},[425,163432,4739],{"class":701},[425,163434,163435],{"class":427,"line":9057},[425,163436,163437],{"class":701},"        show_balance()\n",[425,163439,163440,163442,163444,163446,163448],{"class":427,"line":10715},[425,163441,40048],{"class":1155},[425,163443,153841],{"class":701},[425,163445,3949],{"class":1155},[425,163447,153865],{"class":435},[425,163449,4739],{"class":701},[425,163451,163452],{"class":427,"line":10740},[425,163453,163454],{"class":701},"        save_money()\n",[425,163456,163457,163459,163461,163463,163465],{"class":427,"line":10763},[425,163458,40048],{"class":1155},[425,163460,153841],{"class":701},[425,163462,3949],{"class":1155},[425,163464,153883],{"class":435},[425,163466,4739],{"class":701},[425,163468,163469],{"class":427,"line":10787},[425,163470,163471],{"class":701},"        withdraw_money()\n",[425,163473,163474,163476,163478,163480,163482],{"class":427,"line":10792},[425,163475,40048],{"class":1155},[425,163477,153841],{"class":701},[425,163479,3949],{"class":1155},[425,163481,153937],{"class":435},[425,163483,4739],{"class":701},[425,163485,163486,163488,163490,163492],{"class":427,"line":10797},[425,163487,33206],{"class":691},[425,163489,1159],{"class":701},[425,163491,153948],{"class":435},[425,163493,1165],{"class":701},[425,163495,163496],{"class":427,"line":10802},[425,163497,32382],{"class":1155},[425,163499,163500,163502],{"class":427,"line":10811},[425,163501,158777],{"class":1155},[425,163503,4739],{"class":701},[425,163505,163506,163508,163510,163512],{"class":427,"line":10816},[425,163507,33206],{"class":691},[425,163509,1159],{"class":701},[425,163511,153969],{"class":435},[425,163513,1165],{"class":701},[19,163515,163516],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[1099,163518,163520],{"id":163519},"_514-易错点","5.14 易错点",[972,163522,163523,163526,163529,163534,163539,163542],{},[450,163524,163525],{},"函数定义后必须调用才会执行。",[450,163527,163528],{},"函数名后面有括号才是调用。",[450,163530,163531,163533],{},[422,163532,18043],{}," 后面的代码不会执行。",[450,163535,163536,163537,998],{},"没有返回值的函数默认返回 ",[422,163538,96441],{},[450,163540,163541],{},"局部变量不能在函数外部访问。",[450,163543,163544,163545,163547],{},"不要滥用 ",[422,163546,162581],{},"，更好的方式是让函数返回新值。",[19,163549,163550,163551,163553],{},"例如不用 ",[422,163552,162581],{}," 改写存款：",[416,163555,163557],{"className":31133,"code":163556,"language":31135,"meta":395,"style":395},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[422,163558,163559,163568,163579,163583,163587,163595,163608],{"__ignoreMap":395},[425,163560,163561,163563,163565],{"class":427,"line":428},[425,163562,32702],{"class":1155},[425,163564,163185],{"class":431},[425,163566,163567],{"class":701},"(balance, money):\n",[425,163569,163570,163572,163575,163577],{"class":427,"line":698},[425,163571,5090],{"class":1155},[425,163573,163574],{"class":701}," balance ",[425,163576,1629],{"class":1155},[425,163578,150930],{"class":701},[425,163580,163581],{"class":427,"line":710},[425,163582,3400],{"emptyLinePlaceholder":1084},[425,163584,163585],{"class":427,"line":721},[425,163586,3400],{"emptyLinePlaceholder":1084},[425,163588,163589,163591,163593],{"class":427,"line":735},[425,163590,163059],{"class":701},[425,163592,1204],{"class":1155},[425,163594,163064],{"class":691},[425,163596,163597,163599,163601,163604,163606],{"class":427,"line":743},[425,163598,163059],{"class":701},[425,163600,1204],{"class":1155},[425,163602,163603],{"class":701}," save_money(balance, ",[425,163605,2724],{"class":691},[425,163607,1165],{"class":701},[425,163609,163610,163612],{"class":427,"line":751},[425,163611,31170],{"class":691},[425,163613,163614],{"class":701},"(balance)\n",[1099,163616,163618],{"id":163617},"_515-本章练习","5.15 本章练习",[972,163620,163621,163628,163634,163640,163646],{},[450,163622,163623,163624,163627],{},"定义函数 ",[422,163625,163626],{},"print_student(name, age)","，输出学生信息。",[450,163629,163623,163630,163633],{},[422,163631,163632],{},"get_max(a, b, c)","，返回三个数中的最大值。",[450,163635,163623,163636,163639],{},[422,163637,163638],{},"is_even(num)","，判断一个数是否为偶数。",[450,163641,163623,163642,163645],{},[422,163643,163644],{},"calculate_bmi(weight, height)","，返回 BMI。",[450,163647,163648],{},"把第 4 章的菜单程序拆分成多个函数。",[1074,163650,163651],{},"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":395,"searchDepth":698,"depth":698,"links":163653},[163654,163655,163656,163657,163658,163659,163660,163661,163662,163666,163667,163668,163669,163670,163671],{"id":161674,"depth":698,"text":161675},{"id":161715,"depth":698,"text":161716},{"id":161805,"depth":698,"text":161806},{"id":161886,"depth":698,"text":161887},{"id":162019,"depth":698,"text":162020},{"id":162141,"depth":698,"text":162142},{"id":162263,"depth":698,"text":162264},{"id":162340,"depth":698,"text":162341},{"id":162462,"depth":698,"text":162463,"children":163663},[163664,163665],{"id":162466,"depth":710,"text":162467},{"id":162524,"depth":710,"text":162525},{"id":162653,"depth":698,"text":162654},{"id":162779,"depth":698,"text":162780},{"id":162892,"depth":698,"text":162893},{"id":163048,"depth":698,"text":163049},{"id":163519,"depth":698,"text":163520},{"id":163617,"depth":698,"text":163618},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161666,"description":24374},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163678,"title":163679,"body":163680,"description":24374,"extension":1082,"meta":166724,"navigation":1084,"path":166725,"seo":166726,"stem":166727,"__hash__":166728},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163681,"toc":166705},[163682,163685,163689,163692,163695,163799,163802,163806,163809,163889,163892,163896,163899,163959,163962,163998,164001,164016,164020,164093,164096,164151,164154,164224,164227,164311,164321,164379,164383,164428,164431,164457,164460,164566,164570,164573,164615,164618,164682,164685,164689,164692,164753,164756,164786,164789,164827,164831,164834,164843,164846,164970,164973,165014,165018,165021,165032,165072,165075,165090,165095,165098,165165,165168,165258,165262,165265,165313,165316,165343,165345,165375,165378,165398,165401,165432,165435,165468,165472,165475,165499,165502,165526,165529,165553,165557,165560,165690,165693,165773,165776,165851,165855,165858,165908,165911,165953,165956,165980,165982,166006,166009,166064,166067,166133,166137,166140,166143,166181,166184,166237,166240,166286,166289,166322,166325,166329,166648,166652,166681,166685,166702],[10,163683,163679],{"id":163684},"_6-数据容器",[1099,163686,163688],{"id":163687},"_61-什么是数据容器","6.1 什么是数据容器",[19,163690,163691],{},"数据容器用于一次保存多个数据。",[19,163693,163694],{},"常见容器：",[35,163696,163697,163714],{},[38,163698,163699],{},[41,163700,163701,163703,163706,163709,163712],{},[44,163702,26762],{},[44,163704,163705],{},"是否有序",[44,163707,163708],{},"是否可变",[44,163710,163711],{},"是否允许重复",[44,163713,53],{},[55,163715,163716,163734,163750,163765,163782],{},[41,163717,163718,163721,163724,163727,163730],{},[60,163719,163720],{},"list列表",[60,163722,163723],{},"有序",[60,163725,163726],{},"可变",[60,163728,163729],{},"允许",[60,163731,163732],{},[422,163733,156012],{},[41,163735,163736,163739,163741,163744,163746],{},[60,163737,163738],{},"tuple元组",[60,163740,163723],{},[60,163742,163743],{},"不可变",[60,163745,163729],{},[60,163747,163748],{},[422,163749,156025],{},[41,163751,163752,163755,163757,163759,163761],{},[60,163753,163754],{},"str字符串",[60,163756,163723],{},[60,163758,163743],{},[60,163760,163729],{},[60,163762,163763],{},[422,163764,156635],{},[41,163766,163767,163770,163773,163775,163778],{},[60,163768,163769],{},"set集合",[60,163771,163772],{},"无序",[60,163774,163726],{},[60,163776,163777],{},"不允许",[60,163779,163780],{},[422,163781,156050],{},[41,163783,163784,163787,163789,163791,163794],{},[60,163785,163786],{},"dict字典",[60,163788,163723],{},[60,163790,163726],{},[60,163792,163793],{},"key不允许重复",[60,163795,163796],{},[422,163797,163798],{},"{\"name\": \"小明\"}",[19,163800,163801],{},"Python 3.7 之后，字典保持插入顺序。",[1099,163803,163805],{"id":163804},"_62-列表list","6.2 列表list",[19,163807,163808],{},"列表用于保存一组有顺序的数据。",[416,163810,163812],{"className":31133,"code":163811,"language":31135,"meta":395,"style":395},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[422,163813,163814,163834,163859,163880],{"__ignoreMap":395},[425,163815,163816,163818,163820,163822,163824,163826,163828,163830,163832],{"class":427,"line":428},[425,163817,161135],{"class":701},[425,163819,1204],{"class":1155},[425,163821,52981],{"class":701},[425,163823,150643],{"class":435},[425,163825,13434],{"class":701},[425,163827,151691],{"class":435},[425,163829,13434],{"class":701},[425,163831,160486],{"class":435},[425,163833,34001],{"class":701},[425,163835,163836,163839,163841,163843,163845,163847,163849,163851,163853,163855,163857],{"class":427,"line":698},[425,163837,163838],{"class":701},"numbers ",[425,163840,1204],{"class":1155},[425,163842,52981],{"class":701},[425,163844,1367],{"class":691},[425,163846,13434],{"class":701},[425,163848,1235],{"class":691},[425,163850,13434],{"class":701},[425,163852,1229],{"class":691},[425,163854,13434],{"class":701},[425,163856,1442],{"class":691},[425,163858,34001],{"class":701},[425,163860,163861,163864,163866,163868,163870,163872,163874,163876,163878],{"class":427,"line":710},[425,163862,163863],{"class":701},"mixed ",[425,163865,1204],{"class":1155},[425,163867,52981],{"class":701},[425,163869,150643],{"class":435},[425,163871,13434],{"class":701},[425,163873,1798],{"class":691},[425,163875,13434],{"class":701},[425,163877,32231],{"class":691},[425,163879,34001],{"class":701},[425,163881,163882,163885,163887],{"class":427,"line":721},[425,163883,163884],{"class":701},"empty ",[425,163886,1204],{"class":1155},[425,163888,52593],{"class":701},[19,163890,163891],{},"推荐一个列表中保存同类数据，代码更清晰。",[1099,163893,163895],{"id":163894},"_63-列表索引","6.3 列表索引",[19,163897,163898],{},"正向索引从 0 开始：",[416,163900,163902],{"className":31133,"code":163901,"language":31135,"meta":395,"style":395},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[422,163903,163904,163924,163928,163939,163949],{"__ignoreMap":395},[425,163905,163906,163908,163910,163912,163914,163916,163918,163920,163922],{"class":427,"line":428},[425,163907,161135],{"class":701},[425,163909,1204],{"class":1155},[425,163911,52981],{"class":701},[425,163913,150643],{"class":435},[425,163915,13434],{"class":701},[425,163917,151691],{"class":435},[425,163919,13434],{"class":701},[425,163921,160486],{"class":435},[425,163923,34001],{"class":701},[425,163925,163926],{"class":427,"line":698},[425,163927,3400],{"emptyLinePlaceholder":1084},[425,163929,163930,163932,163935,163937],{"class":427,"line":710},[425,163931,31170],{"class":691},[425,163933,163934],{"class":701},"(names[",[425,163936,1341],{"class":691},[425,163938,5657],{"class":701},[425,163940,163941,163943,163945,163947],{"class":427,"line":721},[425,163942,31170],{"class":691},[425,163944,163934],{"class":701},[425,163946,1367],{"class":691},[425,163948,5657],{"class":701},[425,163950,163951,163953,163955,163957],{"class":427,"line":735},[425,163952,31170],{"class":691},[425,163954,163934],{"class":701},[425,163956,1235],{"class":691},[425,163958,5657],{"class":701},[19,163960,163961],{},"反向索引从 -1 开始：",[416,163963,163965],{"className":31133,"code":163964,"language":31135,"meta":395,"style":395},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[422,163966,163967,163983],{"__ignoreMap":395},[425,163968,163969,163971,163973,163975,163977,163980],{"class":427,"line":428},[425,163970,31170],{"class":691},[425,163972,163934],{"class":701},[425,163974,1680],{"class":1155},[425,163976,1367],{"class":691},[425,163978,163979],{"class":701},"])  ",[425,163981,163982],{"class":1216},"# 小刚\n",[425,163984,163985,163987,163989,163991,163993,163995],{"class":427,"line":698},[425,163986,31170],{"class":691},[425,163988,163934],{"class":701},[425,163990,1680],{"class":1155},[425,163992,1235],{"class":691},[425,163994,163979],{"class":701},[425,163996,163997],{"class":1216},"# 小红\n",[19,163999,164000],{},"索引越界会报错：",[416,164002,164004],{"className":31133,"code":164003,"language":31135,"meta":395,"style":395},"print(names[3])\n",[422,164005,164006],{"__ignoreMap":395},[425,164007,164008,164010,164012,164014],{"class":427,"line":428},[425,164009,31170],{"class":691},[425,164011,163934],{"class":701},[425,164013,1229],{"class":691},[425,164015,5657],{"class":701},[1099,164017,164019],{"id":164018},"_64-列表常用方法","6.4 列表常用方法",[416,164021,164023],{"className":31133,"code":164022,"language":31135,"meta":395,"style":395},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[422,164024,164025,164041,164045,164054,164068,164082,164086],{"__ignoreMap":395},[425,164026,164027,164029,164031,164033,164035,164037,164039],{"class":427,"line":428},[425,164028,161135],{"class":701},[425,164030,1204],{"class":1155},[425,164032,52981],{"class":701},[425,164034,150643],{"class":435},[425,164036,13434],{"class":701},[425,164038,151691],{"class":435},[425,164040,34001],{"class":701},[425,164042,164043],{"class":427,"line":698},[425,164044,3400],{"emptyLinePlaceholder":1084},[425,164046,164047,164050,164052],{"class":427,"line":710},[425,164048,164049],{"class":701},"names.append(",[425,164051,160486],{"class":435},[425,164053,1165],{"class":701},[425,164055,164056,164059,164061,164063,164066],{"class":427,"line":721},[425,164057,164058],{"class":701},"names.insert(",[425,164060,1367],{"class":691},[425,164062,13434],{"class":701},[425,164064,164065],{"class":435},"\"小李\"",[425,164067,1165],{"class":701},[425,164069,164070,164073,164075,164077,164080],{"class":427,"line":735},[425,164071,164072],{"class":701},"names.extend([",[425,164074,9683],{"class":435},[425,164076,13434],{"class":701},[425,164078,164079],{"class":435},"\"小赵\"",[425,164081,5657],{"class":701},[425,164083,164084],{"class":427,"line":743},[425,164085,3400],{"emptyLinePlaceholder":1084},[425,164087,164088,164090],{"class":427,"line":751},[425,164089,31170],{"class":691},[425,164091,164092],{"class":701},"(names)\n",[19,164094,164095],{},"删除元素：",[416,164097,164099],{"className":31133,"code":164098,"language":31135,"meta":395,"style":395},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[422,164100,164101,164110,164120,164134,164146],{"__ignoreMap":395},[425,164102,164103,164106,164108],{"class":427,"line":428},[425,164104,164105],{"class":701},"names.remove(",[425,164107,151691],{"class":435},[425,164109,1165],{"class":701},[425,164111,164112,164115,164117],{"class":427,"line":698},[425,164113,164114],{"class":701},"last ",[425,164116,1204],{"class":1155},[425,164118,164119],{"class":701}," names.pop()\n",[425,164121,164122,164125,164127,164130,164132],{"class":427,"line":710},[425,164123,164124],{"class":701},"first ",[425,164126,1204],{"class":1155},[425,164128,164129],{"class":701}," names.pop(",[425,164131,1341],{"class":691},[425,164133,1165],{"class":701},[425,164135,164136,164139,164142,164144],{"class":427,"line":721},[425,164137,164138],{"class":1155},"del",[425,164140,164141],{"class":701}," names[",[425,164143,1341],{"class":691},[425,164145,34001],{"class":701},[425,164147,164148],{"class":427,"line":735},[425,164149,164150],{"class":701},"names.clear()\n",[19,164152,164153],{},"查询和统计：",[416,164155,164157],{"className":31133,"code":164156,"language":31135,"meta":395,"style":395},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[422,164158,164159,164187,164191,164202,164213],{"__ignoreMap":395},[425,164160,164161,164163,164165,164167,164169,164171,164173,164175,164177,164179,164181,164183,164185],{"class":427,"line":428},[425,164162,163838],{"class":701},[425,164164,1204],{"class":1155},[425,164166,52981],{"class":701},[425,164168,1367],{"class":691},[425,164170,13434],{"class":701},[425,164172,1235],{"class":691},[425,164174,13434],{"class":701},[425,164176,1229],{"class":691},[425,164178,13434],{"class":701},[425,164180,1235],{"class":691},[425,164182,13434],{"class":701},[425,164184,1442],{"class":691},[425,164186,34001],{"class":701},[425,164188,164189],{"class":427,"line":698},[425,164190,3400],{"emptyLinePlaceholder":1084},[425,164192,164193,164195,164198,164200],{"class":427,"line":710},[425,164194,31170],{"class":691},[425,164196,164197],{"class":701},"(numbers.index(",[425,164199,1229],{"class":691},[425,164201,31252],{"class":701},[425,164203,164204,164206,164209,164211],{"class":427,"line":721},[425,164205,31170],{"class":691},[425,164207,164208],{"class":701},"(numbers.count(",[425,164210,1235],{"class":691},[425,164212,31252],{"class":701},[425,164214,164215,164217,164219,164221],{"class":427,"line":735},[425,164216,31170],{"class":691},[425,164218,1159],{"class":701},[425,164220,8358],{"class":691},[425,164222,164223],{"class":701},"(numbers))\n",[19,164225,164226],{},"排序：",[416,164228,164230],{"className":31133,"code":164229,"language":31135,"meta":395,"style":395},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[422,164231,164232,164256,164260,164265,164272,164276,164290,164296,164300,164305],{"__ignoreMap":395},[425,164233,164234,164236,164238,164240,164242,164244,164246,164248,164250,164252,164254],{"class":427,"line":428},[425,164235,163838],{"class":701},[425,164237,1204],{"class":1155},[425,164239,52981],{"class":701},[425,164241,1229],{"class":691},[425,164243,13434],{"class":701},[425,164245,1367],{"class":691},[425,164247,13434],{"class":701},[425,164249,1468],{"class":691},[425,164251,13434],{"class":701},[425,164253,1235],{"class":691},[425,164255,34001],{"class":701},[425,164257,164258],{"class":427,"line":698},[425,164259,3400],{"emptyLinePlaceholder":1084},[425,164261,164262],{"class":427,"line":710},[425,164263,164264],{"class":701},"numbers.sort()\n",[425,164266,164267,164269],{"class":427,"line":721},[425,164268,31170],{"class":691},[425,164270,164271],{"class":701},"(numbers)\n",[425,164273,164274],{"class":427,"line":735},[425,164275,3400],{"emptyLinePlaceholder":1084},[425,164277,164278,164281,164284,164286,164288],{"class":427,"line":743},[425,164279,164280],{"class":701},"numbers.sort(",[425,164282,164283],{"class":6216},"reverse",[425,164285,1204],{"class":1155},[425,164287,32231],{"class":691},[425,164289,1165],{"class":701},[425,164291,164292,164294],{"class":427,"line":751},[425,164293,31170],{"class":691},[425,164295,164271],{"class":701},[425,164297,164298],{"class":427,"line":759},[425,164299,3400],{"emptyLinePlaceholder":1084},[425,164301,164302],{"class":427,"line":770},[425,164303,164304],{"class":701},"numbers.reverse()\n",[425,164306,164307,164309],{"class":427,"line":780},[425,164308,31170],{"class":691},[425,164310,164271],{"class":701},[19,164312,164313,164316,164317,164320],{},[422,164314,164315],{},"sort()"," 会修改原列表，",[422,164318,164319],{},"sorted()"," 返回新列表。",[416,164322,164324],{"className":31133,"code":164323,"language":31135,"meta":395,"style":395},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[422,164325,164326,164350,164362,164366,164372],{"__ignoreMap":395},[425,164327,164328,164330,164332,164334,164336,164338,164340,164342,164344,164346,164348],{"class":427,"line":428},[425,164329,163838],{"class":701},[425,164331,1204],{"class":1155},[425,164333,52981],{"class":701},[425,164335,1229],{"class":691},[425,164337,13434],{"class":701},[425,164339,1367],{"class":691},[425,164341,13434],{"class":701},[425,164343,1468],{"class":691},[425,164345,13434],{"class":701},[425,164347,1235],{"class":691},[425,164349,34001],{"class":701},[425,164351,164352,164355,164357,164360],{"class":427,"line":698},[425,164353,164354],{"class":701},"new_numbers ",[425,164356,1204],{"class":1155},[425,164358,164359],{"class":691}," sorted",[425,164361,164271],{"class":701},[425,164363,164364],{"class":427,"line":710},[425,164365,3400],{"emptyLinePlaceholder":1084},[425,164367,164368,164370],{"class":427,"line":721},[425,164369,31170],{"class":691},[425,164371,164271],{"class":701},[425,164373,164374,164376],{"class":427,"line":735},[425,164375,31170],{"class":691},[425,164377,164378],{"class":701},"(new_numbers)\n",[1099,164380,164382],{"id":164381},"_65-列表遍历","6.5 列表遍历",[416,164384,164386],{"className":31133,"code":164385,"language":31135,"meta":395,"style":395},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[422,164387,164388,164408,164412,164422],{"__ignoreMap":395},[425,164389,164390,164392,164394,164396,164398,164400,164402,164404,164406],{"class":427,"line":428},[425,164391,161135],{"class":701},[425,164393,1204],{"class":1155},[425,164395,52981],{"class":701},[425,164397,150643],{"class":435},[425,164399,13434],{"class":701},[425,164401,151691],{"class":435},[425,164403,13434],{"class":701},[425,164405,160486],{"class":435},[425,164407,34001],{"class":701},[425,164409,164410],{"class":427,"line":698},[425,164411,3400],{"emptyLinePlaceholder":1084},[425,164413,164414,164416,164418,164420],{"class":427,"line":710},[425,164415,4025],{"class":1155},[425,164417,161171],{"class":701},[425,164419,27034],{"class":1155},[425,164421,161176],{"class":701},[425,164423,164424,164426],{"class":427,"line":721},[425,164425,32054],{"class":691},[425,164427,151415],{"class":701},[19,164429,164430],{},"需要索引时：",[416,164432,164434],{"className":31133,"code":164433,"language":31135,"meta":395,"style":395},"for index, name in enumerate(names):\n    print(index, name)\n",[422,164435,164436,164450],{"__ignoreMap":395},[425,164437,164438,164440,164443,164445,164447],{"class":427,"line":428},[425,164439,4025],{"class":1155},[425,164441,164442],{"class":701}," index, name ",[425,164444,27034],{"class":1155},[425,164446,32361],{"class":691},[425,164448,164449],{"class":701},"(names):\n",[425,164451,164452,164454],{"class":427,"line":698},[425,164453,32054],{"class":691},[425,164455,164456],{"class":701},"(index, name)\n",[19,164458,164459],{},"统计总分：",[416,164461,164463],{"className":31133,"code":164462,"language":31135,"meta":395,"style":395},"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",[422,164464,164465,164490,164498,164502,164513,164521,164525,164542],{"__ignoreMap":395},[425,164466,164467,164470,164472,164474,164476,164478,164480,164482,164484,164486,164488],{"class":427,"line":428},[425,164468,164469],{"class":701},"scores ",[425,164471,1204],{"class":1155},[425,164473,52981],{"class":701},[425,164475,2009],{"class":691},[425,164477,13434],{"class":701},[425,164479,1884],{"class":691},[425,164481,13434],{"class":701},[425,164483,1403],{"class":691},[425,164485,13434],{"class":701},[425,164487,1709],{"class":691},[425,164489,34001],{"class":701},[425,164491,164492,164494,164496],{"class":427,"line":698},[425,164493,158015],{"class":701},[425,164495,1204],{"class":1155},[425,164497,48088],{"class":691},[425,164499,164500],{"class":427,"line":710},[425,164501,3400],{"emptyLinePlaceholder":1084},[425,164503,164504,164506,164508,164510],{"class":427,"line":721},[425,164505,4025],{"class":1155},[425,164507,158538],{"class":701},[425,164509,27034],{"class":1155},[425,164511,164512],{"class":701}," scores:\n",[425,164514,164515,164517,164519],{"class":427,"line":735},[425,164516,160062],{"class":701},[425,164518,10476],{"class":1155},[425,164520,2592],{"class":701},[425,164522,164523],{"class":427,"line":743},[425,164524,3400],{"emptyLinePlaceholder":1084},[425,164526,164527,164530,164532,164535,164537,164539],{"class":427,"line":751},[425,164528,164529],{"class":701},"avg ",[425,164531,1204],{"class":1155},[425,164533,164534],{"class":701}," total ",[425,164536,1732],{"class":1155},[425,164538,8331],{"class":691},[425,164540,164541],{"class":701},"(scores)\n",[425,164543,164544,164546,164548,164550,164553,164555,164558,164560,164562,164564],{"class":427,"line":759},[425,164545,31170],{"class":691},[425,164547,1159],{"class":701},[425,164549,1210],{"class":1155},[425,164551,164552],{"class":435},"\"平均分:",[425,164554,2043],{"class":691},[425,164556,164557],{"class":701},"avg",[425,164559,157914],{"class":1155},[425,164561,2093],{"class":691},[425,164563,1400],{"class":435},[425,164565,1165],{"class":701},[1099,164567,164569],{"id":164568},"_66-元组tuple","6.6 元组tuple",[19,164571,164572],{},"元组和列表类似，但不可修改。",[416,164574,164576],{"className":31133,"code":164575,"language":31135,"meta":395,"style":395},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[422,164577,164578,164595],{"__ignoreMap":395},[425,164579,164580,164583,164585,164587,164589,164591,164593],{"class":427,"line":428},[425,164581,164582],{"class":701},"point ",[425,164584,1204],{"class":1155},[425,164586,2664],{"class":701},[425,164588,1594],{"class":691},[425,164590,13434],{"class":701},[425,164592,1848],{"class":691},[425,164594,1165],{"class":701},[425,164596,164597,164599,164601,164603,164605,164607,164609,164611,164613],{"class":427,"line":698},[425,164598,117069],{"class":701},[425,164600,1204],{"class":1155},[425,164602,2664],{"class":701},[425,164604,150643],{"class":435},[425,164606,13434],{"class":701},[425,164608,1798],{"class":691},[425,164610,13434],{"class":701},[425,164612,70024],{"class":435},[425,164614,1165],{"class":701},[19,164616,164617],{},"单元素元组必须加逗号：",[416,164619,164621],{"className":31133,"code":164620,"language":31135,"meta":395,"style":395},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[422,164622,164623,164637,164650,164654,164668],{"__ignoreMap":395},[425,164624,164625,164628,164630,164632,164634],{"class":427,"line":428},[425,164626,164627],{"class":701},"t1 ",[425,164629,1204],{"class":1155},[425,164631,2664],{"class":701},[425,164633,1594],{"class":691},[425,164635,164636],{"class":701},",)\n",[425,164638,164639,164642,164644,164646,164648],{"class":427,"line":698},[425,164640,164641],{"class":701},"t2 ",[425,164643,1204],{"class":1155},[425,164645,2664],{"class":701},[425,164647,1594],{"class":691},[425,164649,1165],{"class":701},[425,164651,164652],{"class":427,"line":710},[425,164653,3400],{"emptyLinePlaceholder":1084},[425,164655,164656,164658,164660,164662,164665],{"class":427,"line":721},[425,164657,31170],{"class":691},[425,164659,1159],{"class":701},[425,164661,103862],{"class":691},[425,164663,164664],{"class":701},"(t1))  ",[425,164666,164667],{"class":1216},"# tuple\n",[425,164669,164670,164672,164674,164676,164679],{"class":427,"line":735},[425,164671,31170],{"class":691},[425,164673,1159],{"class":701},[425,164675,103862],{"class":691},[425,164677,164678],{"class":701},"(t2))  ",[425,164680,164681],{"class":1216},"# int\n",[19,164683,164684],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[1099,164686,164688],{"id":164687},"_67-字符串str","6.7 字符串str",[19,164690,164691],{},"字符串也是序列，可以索引、切片和遍历。",[416,164693,164695],{"className":31133,"code":164694,"language":31135,"meta":395,"style":395},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[422,164696,164697,164705,164709,164720,164732,164736,164747],{"__ignoreMap":395},[425,164698,164699,164701,164703],{"class":427,"line":428},[425,164700,157199],{"class":701},[425,164702,1204],{"class":1155},[425,164704,160436],{"class":435},[425,164706,164707],{"class":427,"line":698},[425,164708,3400],{"emptyLinePlaceholder":1084},[425,164710,164711,164713,164716,164718],{"class":427,"line":710},[425,164712,31170],{"class":691},[425,164714,164715],{"class":701},"(text[",[425,164717,1341],{"class":691},[425,164719,5657],{"class":701},[425,164721,164722,164724,164726,164728,164730],{"class":427,"line":721},[425,164723,31170],{"class":691},[425,164725,164715],{"class":701},[425,164727,1680],{"class":1155},[425,164729,1367],{"class":691},[425,164731,5657],{"class":701},[425,164733,164734],{"class":427,"line":735},[425,164735,3400],{"emptyLinePlaceholder":1084},[425,164737,164738,164740,164742,164744],{"class":427,"line":743},[425,164739,4025],{"class":1155},[425,164741,160447],{"class":701},[425,164743,27034],{"class":1155},[425,164745,164746],{"class":701}," text:\n",[425,164748,164749,164751],{"class":427,"line":751},[425,164750,32054],{"class":691},[425,164752,160458],{"class":701},[19,164754,164755],{},"字符串不可变：",[416,164757,164759],{"className":31133,"code":164758,"language":31135,"meta":395,"style":395},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[422,164760,164761,164769],{"__ignoreMap":395},[425,164762,164763,164765,164767],{"class":427,"line":428},[425,164764,157199],{"class":701},[425,164766,1204],{"class":1155},[425,164768,160436],{"class":435},[425,164770,164771,164774,164776,164778,164780,164783],{"class":427,"line":698},[425,164772,164773],{"class":701},"text[",[425,164775,1341],{"class":691},[425,164777,5443],{"class":701},[425,164779,1204],{"class":1155},[425,164781,164782],{"class":435}," \"P\"",[425,164784,164785],{"class":1216},"  # 报错\n",[19,164787,164788],{},"如果要得到新字符串：",[416,164790,164792],{"className":31133,"code":164791,"language":31135,"meta":395,"style":395},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[422,164793,164794,164802,164820],{"__ignoreMap":395},[425,164795,164796,164798,164800],{"class":427,"line":428},[425,164797,157199],{"class":701},[425,164799,1204],{"class":1155},[425,164801,160436],{"class":435},[425,164803,164804,164806,164808,164810,164812,164815,164817],{"class":427,"line":698},[425,164805,157199],{"class":701},[425,164807,1204],{"class":1155},[425,164809,164782],{"class":435},[425,164811,46321],{"class":1155},[425,164813,164814],{"class":701}," text[",[425,164816,1367],{"class":691},[425,164818,164819],{"class":701},":]\n",[425,164821,164822,164824],{"class":427,"line":710},[425,164823,31170],{"class":691},[425,164825,164826],{"class":701},"(text)\n",[1099,164828,164830],{"id":164829},"_68-切片","6.8 切片",[19,164832,164833],{},"切片用于从序列中取一部分。",[416,164835,164837],{"className":31133,"code":164836,"language":31135,"meta":395,"style":395},"序列[开始:结束:步长]\n",[422,164838,164839],{"__ignoreMap":395},[425,164840,164841],{"class":427,"line":428},[425,164842,164836],{"class":701},[19,164844,164845],{},"结束位置不包含。",[416,164847,164849],{"className":31133,"code":164848,"language":31135,"meta":395,"style":395},"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",[422,164850,164851,164888,164892,164911,164926,164940,164954],{"__ignoreMap":395},[425,164852,164853,164856,164858,164860,164862,164864,164866,164868,164870,164872,164874,164876,164878,164880,164882,164884,164886],{"class":427,"line":428},[425,164854,164855],{"class":701},"nums ",[425,164857,1204],{"class":1155},[425,164859,52981],{"class":701},[425,164861,1341],{"class":691},[425,164863,13434],{"class":701},[425,164865,1367],{"class":691},[425,164867,13434],{"class":701},[425,164869,1235],{"class":691},[425,164871,13434],{"class":701},[425,164873,1229],{"class":691},[425,164875,13434],{"class":701},[425,164877,1442],{"class":691},[425,164879,13434],{"class":701},[425,164881,1468],{"class":691},[425,164883,13434],{"class":701},[425,164885,1493],{"class":691},[425,164887,34001],{"class":701},[425,164889,164890],{"class":427,"line":698},[425,164891,3400],{"emptyLinePlaceholder":1084},[425,164893,164894,164896,164899,164901,164903,164905,164908],{"class":427,"line":710},[425,164895,31170],{"class":691},[425,164897,164898],{"class":701},"(nums[",[425,164900,1367],{"class":691},[425,164902,948],{"class":701},[425,164904,1442],{"class":691},[425,164906,164907],{"class":701},"])    ",[425,164909,164910],{"class":1216},"# [1, 2, 3]\n",[425,164912,164913,164915,164918,164920,164923],{"class":427,"line":721},[425,164914,31170],{"class":691},[425,164916,164917],{"class":701},"(nums[:",[425,164919,1229],{"class":691},[425,164921,164922],{"class":701},"])     ",[425,164924,164925],{"class":1216},"# [0, 1, 2]\n",[425,164927,164928,164930,164932,164934,164937],{"class":427,"line":735},[425,164929,31170],{"class":691},[425,164931,164898],{"class":701},[425,164933,1229],{"class":691},[425,164935,164936],{"class":701},":])     ",[425,164938,164939],{"class":1216},"# [3, 4, 5, 6]\n",[425,164941,164942,164944,164947,164949,164951],{"class":427,"line":743},[425,164943,31170],{"class":691},[425,164945,164946],{"class":701},"(nums[::",[425,164948,1235],{"class":691},[425,164950,164907],{"class":701},[425,164952,164953],{"class":1216},"# [0, 2, 4, 6]\n",[425,164955,164956,164958,164960,164962,164964,164967],{"class":427,"line":751},[425,164957,31170],{"class":691},[425,164959,164946],{"class":701},[425,164961,1680],{"class":1155},[425,164963,1367],{"class":691},[425,164965,164966],{"class":701},"])   ",[425,164968,164969],{"class":1216},"# 反转\n",[19,164971,164972],{},"字符串切片：",[416,164974,164976],{"className":31133,"code":164975,"language":31135,"meta":395,"style":395},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[422,164977,164978,164987,165001],{"__ignoreMap":395},[425,164979,164980,164982,164984],{"class":427,"line":428},[425,164981,157199],{"class":701},[425,164983,1204],{"class":1155},[425,164985,164986],{"class":435}," \"abcdef\"\n",[425,164988,164989,164991,164993,164995,164997,164999],{"class":427,"line":698},[425,164990,31170],{"class":691},[425,164992,164715],{"class":701},[425,164994,1367],{"class":691},[425,164996,948],{"class":701},[425,164998,1442],{"class":691},[425,165000,5657],{"class":701},[425,165002,165003,165005,165008,165010,165012],{"class":427,"line":710},[425,165004,31170],{"class":691},[425,165006,165007],{"class":701},"(text[::",[425,165009,1680],{"class":1155},[425,165011,1367],{"class":691},[425,165013,5657],{"class":701},[1099,165015,165017],{"id":165016},"_69-集合set","6.9 集合set",[19,165019,165020],{},"集合特点：",[972,165022,165023,165026,165029],{},[450,165024,165025],{},"无序。",[450,165027,165028],{},"元素不重复。",[450,165030,165031],{},"可以做交集、并集、差集。",[416,165033,165035],{"className":31133,"code":165034,"language":31135,"meta":395,"style":395},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[422,165036,165037,165065],{"__ignoreMap":395},[425,165038,165039,165041,165043,165045,165047,165049,165051,165053,165055,165057,165059,165061,165063],{"class":427,"line":428},[425,165040,164855],{"class":701},[425,165042,1204],{"class":1155},[425,165044,5448],{"class":701},[425,165046,1367],{"class":691},[425,165048,13434],{"class":701},[425,165050,1235],{"class":691},[425,165052,13434],{"class":701},[425,165054,1229],{"class":691},[425,165056,13434],{"class":701},[425,165058,1229],{"class":691},[425,165060,13434],{"class":701},[425,165062,1442],{"class":691},[425,165064,2578],{"class":701},[425,165066,165067,165069],{"class":427,"line":698},[425,165068,31170],{"class":691},[425,165070,165071],{"class":701},"(nums)\n",[19,165073,165074],{},"创建空集合：",[416,165076,165078],{"className":31133,"code":165077,"language":31135,"meta":395,"style":395},"s = set()\n",[422,165079,165080],{"__ignoreMap":395},[425,165081,165082,165084,165086,165088],{"class":427,"line":428},[425,165083,11578],{"class":701},[425,165085,1204],{"class":1155},[425,165087,120477],{"class":691},[425,165089,2976],{"class":701},[19,165091,970,165092,165094],{},[422,165093,33214],{}," 是空字典，不是空集合。",[19,165096,165097],{},"集合常用操作：",[416,165099,165101],{"className":31133,"code":165100,"language":31135,"meta":395,"style":395},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[422,165102,165103,165123,165127,165136,165145,165154],{"__ignoreMap":395},[425,165104,165105,165107,165109,165111,165113,165115,165117,165119,165121],{"class":427,"line":428},[425,165106,11578],{"class":701},[425,165108,1204],{"class":1155},[425,165110,5448],{"class":701},[425,165112,1367],{"class":691},[425,165114,13434],{"class":701},[425,165116,1235],{"class":691},[425,165118,13434],{"class":701},[425,165120,1229],{"class":691},[425,165122,2578],{"class":701},[425,165124,165125],{"class":427,"line":698},[425,165126,3400],{"emptyLinePlaceholder":1084},[425,165128,165129,165132,165134],{"class":427,"line":710},[425,165130,165131],{"class":701},"s.add(",[425,165133,1442],{"class":691},[425,165135,1165],{"class":701},[425,165137,165138,165141,165143],{"class":427,"line":721},[425,165139,165140],{"class":701},"s.remove(",[425,165142,1235],{"class":691},[425,165144,1165],{"class":701},[425,165146,165147,165150,165152],{"class":427,"line":735},[425,165148,165149],{"class":701},"s.discard(",[425,165151,1594],{"class":691},[425,165153,1165],{"class":701},[425,165155,165156,165158,165160,165162],{"class":427,"line":743},[425,165157,31170],{"class":691},[425,165159,1159],{"class":701},[425,165161,8358],{"class":691},[425,165163,165164],{"class":701},"(s))\n",[19,165166,165167],{},"交并差：",[416,165169,165171],{"className":31133,"code":165170,"language":31135,"meta":395,"style":395},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[422,165172,165173,165193,165213,165217,165232,165245],{"__ignoreMap":395},[425,165174,165175,165177,165179,165181,165183,165185,165187,165189,165191],{"class":427,"line":428},[425,165176,11918],{"class":701},[425,165178,1204],{"class":1155},[425,165180,5448],{"class":701},[425,165182,1367],{"class":691},[425,165184,13434],{"class":701},[425,165186,1235],{"class":691},[425,165188,13434],{"class":701},[425,165190,1229],{"class":691},[425,165192,2578],{"class":701},[425,165194,165195,165197,165199,165201,165203,165205,165207,165209,165211],{"class":427,"line":698},[425,165196,11944],{"class":701},[425,165198,1204],{"class":1155},[425,165200,5448],{"class":701},[425,165202,1229],{"class":691},[425,165204,13434],{"class":701},[425,165206,1442],{"class":691},[425,165208,13434],{"class":701},[425,165210,1468],{"class":691},[425,165212,2578],{"class":701},[425,165214,165215],{"class":427,"line":710},[425,165216,3400],{"emptyLinePlaceholder":1084},[425,165218,165219,165221,165224,165226,165229],{"class":427,"line":721},[425,165220,31170],{"class":691},[425,165222,165223],{"class":701},"(a ",[425,165225,1502],{"class":1155},[425,165227,165228],{"class":701}," b)  ",[425,165230,165231],{"class":1216},"# 交集\n",[425,165233,165234,165236,165238,165240,165242],{"class":427,"line":735},[425,165235,31170],{"class":691},[425,165237,165223],{"class":701},[425,165239,2068],{"class":1155},[425,165241,165228],{"class":701},[425,165243,165244],{"class":1216},"# 并集\n",[425,165246,165247,165249,165251,165253,165255],{"class":427,"line":743},[425,165248,31170],{"class":691},[425,165250,165223],{"class":701},[425,165252,1680],{"class":1155},[425,165254,165228],{"class":701},[425,165256,165257],{"class":1216},"# 差集\n",[1099,165259,165261],{"id":165260},"_610-字典dict","6.10 字典dict",[19,165263,165264],{},"字典通过 key-value 保存数据。",[416,165266,165268],{"className":31133,"code":165267,"language":31135,"meta":395,"style":395},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[422,165269,165270,165278,165288,165299,165309],{"__ignoreMap":395},[425,165271,165272,165274,165276],{"class":427,"line":428},[425,165273,150236],{"class":701},[425,165275,1204],{"class":1155},[425,165277,16569],{"class":701},[425,165279,165280,165282,165284,165286],{"class":427,"line":698},[425,165281,147775],{"class":435},[425,165283,52192],{"class":701},[425,165285,150643],{"class":435},[425,165287,32221],{"class":701},[425,165289,165290,165293,165295,165297],{"class":427,"line":710},[425,165291,165292],{"class":435},"    \"age\"",[425,165294,52192],{"class":701},[425,165296,1798],{"class":691},[425,165298,32221],{"class":701},[425,165300,165301,165304,165306],{"class":427,"line":721},[425,165302,165303],{"class":435},"    \"score\"",[425,165305,52192],{"class":701},[425,165307,165308],{"class":691},"95\n",[425,165310,165311],{"class":427,"line":735},[425,165312,2578],{"class":701},[19,165314,165315],{},"获取值：",[416,165317,165319],{"className":31133,"code":165318,"language":31135,"meta":395,"style":395},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[422,165320,165321,165332],{"__ignoreMap":395},[425,165322,165323,165325,165328,165330],{"class":427,"line":428},[425,165324,31170],{"class":691},[425,165326,165327],{"class":701},"(student[",[425,165329,63434],{"class":435},[425,165331,5657],{"class":701},[425,165333,165334,165336,165339,165341],{"class":427,"line":698},[425,165335,31170],{"class":691},[425,165337,165338],{"class":701},"(student.get(",[425,165340,63434],{"class":435},[425,165342,31252],{"class":701},[19,165344,16385],{},[416,165346,165348],{"className":31133,"code":165347,"language":31135,"meta":395,"style":395},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[422,165349,165350,165363],{"__ignoreMap":395},[425,165351,165352,165354,165357,165360],{"class":427,"line":428},[425,165353,153614],{"class":701},[425,165355,165356],{"class":435},"\"address\"",[425,165358,165359],{"class":701},"]     ",[425,165361,165362],{"class":1216},"# key不存在会报错\n",[425,165364,165365,165368,165370,165372],{"class":427,"line":698},[425,165366,165367],{"class":701},"student.get(",[425,165369,165356],{"class":435},[425,165371,938],{"class":701},[425,165373,165374],{"class":1216},"# key不存在返回None\n",[19,165376,165377],{},"设置默认值：",[416,165379,165381],{"className":31133,"code":165380,"language":31135,"meta":395,"style":395},"print(student.get(\"address\", \"未知\"))\n",[422,165382,165383],{"__ignoreMap":395},[425,165384,165385,165387,165389,165391,165393,165396],{"class":427,"line":428},[425,165386,31170],{"class":691},[425,165388,165338],{"class":701},[425,165390,165356],{"class":435},[425,165392,13434],{"class":701},[425,165394,165395],{"class":435},"\"未知\"",[425,165397,31252],{"class":701},[19,165399,165400],{},"新增和修改：",[416,165402,165404],{"className":31133,"code":165403,"language":31135,"meta":395,"style":395},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[422,165405,165406,165419],{"__ignoreMap":395},[425,165407,165408,165410,165412,165414,165416],{"class":427,"line":428},[425,165409,153614],{"class":701},[425,165411,69879],{"class":435},[425,165413,5443],{"class":701},[425,165415,1204],{"class":1155},[425,165417,165418],{"class":691}," 19\n",[425,165420,165421,165423,165425,165427,165429],{"class":427,"line":698},[425,165422,153614],{"class":701},[425,165424,165356],{"class":435},[425,165426,5443],{"class":701},[425,165428,1204],{"class":1155},[425,165430,165431],{"class":435}," \"北京\"\n",[19,165433,165434],{},"删除：",[416,165436,165438],{"className":31133,"code":165437,"language":31135,"meta":395,"style":395},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[422,165439,165440,165453,165463],{"__ignoreMap":395},[425,165441,165442,165444,165446,165449,165451],{"class":427,"line":428},[425,165443,156113],{"class":701},[425,165445,1204],{"class":1155},[425,165447,165448],{"class":701}," student.pop(",[425,165450,152227],{"class":435},[425,165452,1165],{"class":701},[425,165454,165455,165457,165459,165461],{"class":427,"line":698},[425,165456,164138],{"class":1155},[425,165458,152904],{"class":701},[425,165460,69879],{"class":435},[425,165462,34001],{"class":701},[425,165464,165465],{"class":427,"line":710},[425,165466,165467],{"class":701},"student.clear()\n",[1099,165469,165471],{"id":165470},"_611-字典遍历","6.11 字典遍历",[19,165473,165474],{},"遍历 key：",[416,165476,165478],{"className":31133,"code":165477,"language":31135,"meta":395,"style":395},"for key in student:\n    print(key, student[key])\n",[422,165479,165480,165492],{"__ignoreMap":395},[425,165481,165482,165484,165487,165489],{"class":427,"line":428},[425,165483,4025],{"class":1155},[425,165485,165486],{"class":701}," key ",[425,165488,27034],{"class":1155},[425,165490,165491],{"class":701}," student:\n",[425,165493,165494,165496],{"class":427,"line":698},[425,165495,32054],{"class":691},[425,165497,165498],{"class":701},"(key, student[key])\n",[19,165500,165501],{},"遍历 value：",[416,165503,165505],{"className":31133,"code":165504,"language":31135,"meta":395,"style":395},"for value in student.values():\n    print(value)\n",[422,165506,165507,165519],{"__ignoreMap":395},[425,165508,165509,165511,165514,165516],{"class":427,"line":428},[425,165510,4025],{"class":1155},[425,165512,165513],{"class":701}," value ",[425,165515,27034],{"class":1155},[425,165517,165518],{"class":701}," student.values():\n",[425,165520,165521,165523],{"class":427,"line":698},[425,165522,32054],{"class":691},[425,165524,165525],{"class":701},"(value)\n",[19,165527,165528],{},"遍历 key 和 value：",[416,165530,165532],{"className":31133,"code":165531,"language":31135,"meta":395,"style":395},"for key, value in student.items():\n    print(key, value)\n",[422,165533,165534,165546],{"__ignoreMap":395},[425,165535,165536,165538,165541,165543],{"class":427,"line":428},[425,165537,4025],{"class":1155},[425,165539,165540],{"class":701}," key, value ",[425,165542,27034],{"class":1155},[425,165544,165545],{"class":701}," student.items():\n",[425,165547,165548,165550],{"class":427,"line":698},[425,165549,32054],{"class":691},[425,165551,165552],{"class":701},"(key, value)\n",[1099,165554,165556],{"id":165555},"_612-嵌套容器","6.12 嵌套容器",[19,165558,165559],{},"列表中保存字典，是项目中最常见的结构之一。",[416,165561,165563],{"className":31133,"code":165562,"language":31135,"meta":395,"style":395},"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",[422,165564,165565,165573,165601,165629,165657,165661,165665,165675],{"__ignoreMap":395},[425,165566,165567,165569,165571],{"class":427,"line":428},[425,165568,160471],{"class":701},[425,165570,1204],{"class":1155},[425,165572,56202],{"class":701},[425,165574,165575,165577,165579,165581,165583,165585,165587,165589,165591,165593,165595,165597,165599],{"class":427,"line":698},[425,165576,149140],{"class":701},[425,165578,63434],{"class":435},[425,165580,52192],{"class":701},[425,165582,150643],{"class":435},[425,165584,13434],{"class":701},[425,165586,69879],{"class":435},[425,165588,52192],{"class":701},[425,165590,1798],{"class":691},[425,165592,13434],{"class":701},[425,165594,152227],{"class":435},[425,165596,52192],{"class":701},[425,165598,2136],{"class":691},[425,165600,5930],{"class":701},[425,165602,165603,165605,165607,165609,165611,165613,165615,165617,165619,165621,165623,165625,165627],{"class":427,"line":710},[425,165604,149140],{"class":701},[425,165606,63434],{"class":435},[425,165608,52192],{"class":701},[425,165610,151691],{"class":435},[425,165612,13434],{"class":701},[425,165614,69879],{"class":435},[425,165616,52192],{"class":701},[425,165618,1773],{"class":691},[425,165620,13434],{"class":701},[425,165622,152227],{"class":435},[425,165624,52192],{"class":701},[425,165626,1959],{"class":691},[425,165628,5930],{"class":701},[425,165630,165631,165633,165635,165637,165639,165641,165643,165645,165647,165649,165651,165653,165655],{"class":427,"line":721},[425,165632,149140],{"class":701},[425,165634,63434],{"class":435},[425,165636,52192],{"class":701},[425,165638,160486],{"class":435},[425,165640,13434],{"class":701},[425,165642,69879],{"class":435},[425,165644,52192],{"class":701},[425,165646,1823],{"class":691},[425,165648,13434],{"class":701},[425,165650,152227],{"class":435},[425,165652,52192],{"class":701},[425,165654,1555],{"class":691},[425,165656,5930],{"class":701},[425,165658,165659],{"class":427,"line":735},[425,165660,34001],{"class":701},[425,165662,165663],{"class":427,"line":743},[425,165664,3400],{"emptyLinePlaceholder":1084},[425,165666,165667,165669,165671,165673],{"class":427,"line":751},[425,165668,4025],{"class":1155},[425,165670,152892],{"class":701},[425,165672,27034],{"class":1155},[425,165674,152897],{"class":701},[425,165676,165677,165679,165681,165683,165686,165688],{"class":427,"line":759},[425,165678,32054],{"class":691},[425,165680,165327],{"class":701},[425,165682,63434],{"class":435},[425,165684,165685],{"class":701},"], student[",[425,165687,152227],{"class":435},[425,165689,5657],{"class":701},[19,165691,165692],{},"统计平均分：",[416,165694,165696],{"className":31133,"code":165695,"language":31135,"meta":395,"style":395},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[422,165697,165698,165706,165710,165720,165732,165736,165751],{"__ignoreMap":395},[425,165699,165700,165702,165704],{"class":427,"line":428},[425,165701,158015],{"class":701},[425,165703,1204],{"class":1155},[425,165705,48088],{"class":691},[425,165707,165708],{"class":427,"line":698},[425,165709,3400],{"emptyLinePlaceholder":1084},[425,165711,165712,165714,165716,165718],{"class":427,"line":710},[425,165713,4025],{"class":1155},[425,165715,152892],{"class":701},[425,165717,27034],{"class":1155},[425,165719,152897],{"class":701},[425,165721,165722,165724,165726,165728,165730],{"class":427,"line":721},[425,165723,160062],{"class":701},[425,165725,10476],{"class":1155},[425,165727,152904],{"class":701},[425,165729,152227],{"class":435},[425,165731,34001],{"class":701},[425,165733,165734],{"class":427,"line":735},[425,165735,3400],{"emptyLinePlaceholder":1084},[425,165737,165738,165740,165742,165744,165746,165748],{"class":427,"line":743},[425,165739,164529],{"class":701},[425,165741,1204],{"class":1155},[425,165743,164534],{"class":701},[425,165745,1732],{"class":1155},[425,165747,8331],{"class":691},[425,165749,165750],{"class":701},"(students)\n",[425,165752,165753,165755,165757,165759,165761,165763,165765,165767,165769,165771],{"class":427,"line":751},[425,165754,31170],{"class":691},[425,165756,1159],{"class":701},[425,165758,1210],{"class":1155},[425,165760,164552],{"class":435},[425,165762,2043],{"class":691},[425,165764,164557],{"class":701},[425,165766,157914],{"class":1155},[425,165768,2093],{"class":691},[425,165770,1400],{"class":435},[425,165772,1165],{"class":701},[19,165774,165775],{},"查找学生：",[416,165777,165779],{"className":31133,"code":165778,"language":31135,"meta":395,"style":395},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[422,165780,165781,165796,165800,165810,165824,165830,165834,165840],{"__ignoreMap":395},[425,165782,165783,165785,165787,165789,165791,165794],{"class":427,"line":428},[425,165784,112333],{"class":701},[425,165786,1204],{"class":1155},[425,165788,61360],{"class":691},[425,165790,1159],{"class":701},[425,165792,165793],{"class":435},"\"请输入学生姓名:\"",[425,165795,1165],{"class":701},[425,165797,165798],{"class":427,"line":698},[425,165799,3400],{"emptyLinePlaceholder":1084},[425,165801,165802,165804,165806,165808],{"class":427,"line":710},[425,165803,4025],{"class":1155},[425,165805,152892],{"class":701},[425,165807,27034],{"class":1155},[425,165809,152897],{"class":701},[425,165811,165812,165814,165816,165818,165820,165822],{"class":427,"line":721},[425,165813,4101],{"class":1155},[425,165815,152904],{"class":701},[425,165817,63434],{"class":435},[425,165819,5443],{"class":701},[425,165821,3949],{"class":1155},[425,165823,161187],{"class":701},[425,165825,165826,165828],{"class":427,"line":735},[425,165827,33206],{"class":691},[425,165829,150797],{"class":701},[425,165831,165832],{"class":427,"line":743},[425,165833,32382],{"class":1155},[425,165835,165836,165838],{"class":427,"line":751},[425,165837,2703],{"class":1155},[425,165839,4739],{"class":701},[425,165841,165842,165844,165846,165849],{"class":427,"line":759},[425,165843,32054],{"class":691},[425,165845,1159],{"class":701},[425,165847,165848],{"class":435},"\"没有找到\"",[425,165850,1165],{"class":701},[1099,165852,165854],{"id":165853},"_613-容器通用操作","6.13 容器通用操作",[19,165856,165857],{},"长度：",[416,165859,165861],{"className":31133,"code":165860,"language":31135,"meta":395,"style":395},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[422,165862,165863,165882,165892],{"__ignoreMap":395},[425,165864,165865,165867,165870,165872,165874,165876,165878,165880],{"class":427,"line":428},[425,165866,8358],{"class":691},[425,165868,165869],{"class":701},"([",[425,165871,1367],{"class":691},[425,165873,13434],{"class":701},[425,165875,1235],{"class":691},[425,165877,13434],{"class":701},[425,165879,1229],{"class":691},[425,165881,5657],{"class":701},[425,165883,165884,165886,165888,165890],{"class":427,"line":698},[425,165885,8358],{"class":691},[425,165887,1159],{"class":701},[425,165889,156635],{"class":435},[425,165891,1165],{"class":701},[425,165893,165894,165896,165899,165901,165903,165905],{"class":427,"line":710},[425,165895,8358],{"class":691},[425,165897,165898],{"class":701},"({",[425,165900,63434],{"class":435},[425,165902,52192],{"class":701},[425,165904,150643],{"class":435},[425,165906,165907],{"class":701},"})\n",[19,165909,165910],{},"最大最小：",[416,165912,165914],{"className":31133,"code":165913,"language":31135,"meta":395,"style":395},"max([1, 2, 3])\nmin([1, 2, 3])\n",[422,165915,165916,165934],{"__ignoreMap":395},[425,165917,165918,165920,165922,165924,165926,165928,165930,165932],{"class":427,"line":428},[425,165919,7015],{"class":691},[425,165921,165869],{"class":701},[425,165923,1367],{"class":691},[425,165925,13434],{"class":701},[425,165927,1235],{"class":691},[425,165929,13434],{"class":701},[425,165931,1229],{"class":691},[425,165933,5657],{"class":701},[425,165935,165936,165939,165941,165943,165945,165947,165949,165951],{"class":427,"line":698},[425,165937,165938],{"class":691},"min",[425,165940,165869],{"class":701},[425,165942,1367],{"class":691},[425,165944,13434],{"class":701},[425,165946,1235],{"class":691},[425,165948,13434],{"class":701},[425,165950,1229],{"class":691},[425,165952,5657],{"class":701},[19,165954,165955],{},"求和：",[416,165957,165959],{"className":31133,"code":165958,"language":31135,"meta":395,"style":395},"sum([1, 2, 3])\n",[422,165960,165961],{"__ignoreMap":395},[425,165962,165963,165966,165968,165970,165972,165974,165976,165978],{"class":427,"line":428},[425,165964,165965],{"class":691},"sum",[425,165967,165869],{"class":701},[425,165969,1367],{"class":691},[425,165971,13434],{"class":701},[425,165973,1235],{"class":691},[425,165975,13434],{"class":701},[425,165977,1229],{"class":691},[425,165979,5657],{"class":701},[19,165981,164226],{},[416,165983,165985],{"className":31133,"code":165984,"language":31135,"meta":395,"style":395},"sorted([3, 1, 2])\n",[422,165986,165987],{"__ignoreMap":395},[425,165988,165989,165992,165994,165996,165998,166000,166002,166004],{"class":427,"line":428},[425,165990,165991],{"class":691},"sorted",[425,165993,165869],{"class":701},[425,165995,1229],{"class":691},[425,165997,13434],{"class":701},[425,165999,1367],{"class":691},[425,166001,13434],{"class":701},[425,166003,1235],{"class":691},[425,166005,5657],{"class":701},[19,166007,166008],{},"类型转换：",[416,166010,166012],{"className":31133,"code":166011,"language":31135,"meta":395,"style":395},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[422,166013,166014,166024,166042],{"__ignoreMap":395},[425,166015,166016,166018,166020,166022],{"class":427,"line":428},[425,166017,154825],{"class":691},[425,166019,1159],{"class":701},[425,166021,156635],{"class":435},[425,166023,1165],{"class":701},[425,166025,166026,166028,166030,166032,166034,166036,166038,166040],{"class":427,"line":698},[425,166027,156020],{"class":691},[425,166029,165869],{"class":701},[425,166031,1367],{"class":691},[425,166033,13434],{"class":701},[425,166035,1235],{"class":691},[425,166037,13434],{"class":701},[425,166039,1229],{"class":691},[425,166041,5657],{"class":701},[425,166043,166044,166046,166048,166050,166052,166054,166056,166058,166060,166062],{"class":427,"line":710},[425,166045,156045],{"class":691},[425,166047,165869],{"class":701},[425,166049,1367],{"class":691},[425,166051,13434],{"class":701},[425,166053,1367],{"class":691},[425,166055,13434],{"class":701},[425,166057,1235],{"class":691},[425,166059,13434],{"class":701},[425,166061,1229],{"class":691},[425,166063,5657],{"class":701},[19,166065,166066],{},"成员判断：",[416,166068,166070],{"className":31133,"code":166069,"language":31135,"meta":395,"style":395},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[422,166071,166072,166089,166113],{"__ignoreMap":395},[425,166073,166074,166076,166078,166081,166084,166087],{"class":427,"line":428},[425,166075,31170],{"class":691},[425,166077,1159],{"class":701},[425,166079,166080],{"class":435},"\"a\"",[425,166082,166083],{"class":1155}," in",[425,166085,166086],{"class":435}," \"abc\"",[425,166088,1165],{"class":701},[425,166090,166091,166093,166095,166097,166099,166101,166103,166105,166107,166109,166111],{"class":427,"line":698},[425,166092,31170],{"class":691},[425,166094,1159],{"class":701},[425,166096,1367],{"class":691},[425,166098,166083],{"class":1155},[425,166100,52981],{"class":701},[425,166102,1367],{"class":691},[425,166104,13434],{"class":701},[425,166106,1235],{"class":691},[425,166108,13434],{"class":701},[425,166110,1229],{"class":691},[425,166112,5657],{"class":701},[425,166114,166115,166117,166119,166121,166123,166125,166127,166129,166131],{"class":427,"line":710},[425,166116,31170],{"class":691},[425,166118,1159],{"class":701},[425,166120,63434],{"class":435},[425,166122,166083],{"class":1155},[425,166124,5448],{"class":701},[425,166126,63434],{"class":435},[425,166128,52192],{"class":701},[425,166130,150643],{"class":435},[425,166132,165907],{"class":701},[1099,166134,166136],{"id":166135},"_614-推导式","6.14 推导式",[19,166138,166139],{},"推导式用于快速生成容器。",[19,166141,166142],{},"列表推导式：",[416,166144,166146],{"className":31133,"code":166145,"language":31135,"meta":395,"style":395},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[422,166147,166148,166175],{"__ignoreMap":395},[425,166149,166150,166152,166154,166157,166159,166161,166163,166165,166167,166169,166171,166173],{"class":427,"line":428},[425,166151,164855],{"class":701},[425,166153,1204],{"class":1155},[425,166155,166156],{"class":701}," [i ",[425,166158,4025],{"class":1155},[425,166160,10437],{"class":701},[425,166162,27034],{"class":1155},[425,166164,33198],{"class":691},[425,166166,1159],{"class":701},[425,166168,1367],{"class":691},[425,166170,13434],{"class":701},[425,166172,1493],{"class":691},[425,166174,98055],{"class":701},[425,166176,166177,166179],{"class":427,"line":698},[425,166178,31170],{"class":691},[425,166180,165071],{"class":701},[19,166182,166183],{},"带条件：",[416,166185,166187],{"className":31133,"code":166186,"language":31135,"meta":395,"style":395},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[422,166188,166189,166230],{"__ignoreMap":395},[425,166190,166191,166194,166196,166198,166200,166202,166204,166206,166208,166210,166212,166214,166216,166218,166220,166222,166224,166226,166228],{"class":427,"line":428},[425,166192,166193],{"class":701},"even_nums ",[425,166195,1204],{"class":1155},[425,166197,166156],{"class":701},[425,166199,4025],{"class":1155},[425,166201,10437],{"class":701},[425,166203,27034],{"class":1155},[425,166205,33198],{"class":691},[425,166207,1159],{"class":701},[425,166209,1367],{"class":691},[425,166211,13434],{"class":701},[425,166213,1486],{"class":691},[425,166215,938],{"class":701},[425,166217,2544],{"class":1155},[425,166219,10437],{"class":701},[425,166221,1477],{"class":1155},[425,166223,15752],{"class":691},[425,166225,102314],{"class":1155},[425,166227,5093],{"class":691},[425,166229,34001],{"class":701},[425,166231,166232,166234],{"class":427,"line":698},[425,166233,31170],{"class":691},[425,166235,166236],{"class":701},"(even_nums)\n",[19,166238,166239],{},"字典推导式：",[416,166241,166243],{"className":31133,"code":166242,"language":31135,"meta":395,"style":395},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[422,166244,166245,166279],{"__ignoreMap":395},[425,166246,166247,166250,166252,166255,166257,166259,166262,166264,166266,166268,166270,166272,166274,166276],{"class":427,"line":428},[425,166248,166249],{"class":701},"squares ",[425,166251,1204],{"class":1155},[425,166253,166254],{"class":701}," {i: i ",[425,166256,11660],{"class":1155},[425,166258,15752],{"class":691},[425,166260,166261],{"class":1155}," for",[425,166263,10437],{"class":701},[425,166265,27034],{"class":1155},[425,166267,33198],{"class":691},[425,166269,1159],{"class":701},[425,166271,1367],{"class":691},[425,166273,13434],{"class":701},[425,166275,1493],{"class":691},[425,166277,166278],{"class":701},")}\n",[425,166280,166281,166283],{"class":427,"line":698},[425,166282,31170],{"class":691},[425,166284,166285],{"class":701},"(squares)\n",[19,166287,166288],{},"集合推导式：",[416,166290,166292],{"className":31133,"code":166291,"language":31135,"meta":395,"style":395},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[422,166293,166294,166315],{"__ignoreMap":395},[425,166295,166296,166299,166301,166304,166306,166308,166310,166313],{"class":427,"line":428},[425,166297,166298],{"class":701},"chars ",[425,166300,1204],{"class":1155},[425,166302,166303],{"class":701}," {ch ",[425,166305,4025],{"class":1155},[425,166307,160447],{"class":701},[425,166309,27034],{"class":1155},[425,166311,166312],{"class":435}," \"hello\"",[425,166314,2578],{"class":701},[425,166316,166317,166319],{"class":427,"line":698},[425,166318,31170],{"class":691},[425,166320,166321],{"class":701},"(chars)\n",[19,166323,166324],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[1099,166326,166328],{"id":166327},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[416,166330,166332],{"className":31133,"code":166331,"language":31135,"meta":395,"style":395},"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",[422,166333,166334,166342,166362,166382,166402,166422,166426,166430,166438,166452,166461,166465,166475,166487,166491,166511,166520,166524,166540,166545,166549,166563,166567,166589,166625],{"__ignoreMap":395},[425,166335,166336,166338,166340],{"class":427,"line":428},[425,166337,160471],{"class":701},[425,166339,1204],{"class":1155},[425,166341,56202],{"class":701},[425,166343,166344,166346,166348,166350,166352,166354,166356,166358,166360],{"class":427,"line":698},[425,166345,149140],{"class":701},[425,166347,63434],{"class":435},[425,166349,52192],{"class":701},[425,166351,150643],{"class":435},[425,166353,13434],{"class":701},[425,166355,152227],{"class":435},[425,166357,52192],{"class":701},[425,166359,2136],{"class":691},[425,166361,5930],{"class":701},[425,166363,166364,166366,166368,166370,166372,166374,166376,166378,166380],{"class":427,"line":710},[425,166365,149140],{"class":701},[425,166367,63434],{"class":435},[425,166369,52192],{"class":701},[425,166371,151691],{"class":435},[425,166373,13434],{"class":701},[425,166375,152227],{"class":435},[425,166377,52192],{"class":701},[425,166379,1959],{"class":691},[425,166381,5930],{"class":701},[425,166383,166384,166386,166388,166390,166392,166394,166396,166398,166400],{"class":427,"line":721},[425,166385,149140],{"class":701},[425,166387,63434],{"class":435},[425,166389,52192],{"class":701},[425,166391,160486],{"class":435},[425,166393,13434],{"class":701},[425,166395,152227],{"class":435},[425,166397,52192],{"class":701},[425,166399,1555],{"class":691},[425,166401,5930],{"class":701},[425,166403,166404,166406,166408,166410,166412,166414,166416,166418,166420],{"class":427,"line":735},[425,166405,149140],{"class":701},[425,166407,63434],{"class":435},[425,166409,52192],{"class":701},[425,166411,164065],{"class":435},[425,166413,13434],{"class":701},[425,166415,152227],{"class":435},[425,166417,52192],{"class":701},[425,166419,2029],{"class":691},[425,166421,5930],{"class":701},[425,166423,166424],{"class":427,"line":743},[425,166425,34001],{"class":701},[425,166427,166428],{"class":427,"line":751},[425,166429,3400],{"emptyLinePlaceholder":1084},[425,166431,166432,166434,166436],{"class":427,"line":759},[425,166433,158015],{"class":701},[425,166435,1204],{"class":1155},[425,166437,48088],{"class":691},[425,166439,166440,166443,166445,166448,166450],{"class":427,"line":770},[425,166441,166442],{"class":701},"max_student ",[425,166444,1204],{"class":1155},[425,166446,166447],{"class":701}," students[",[425,166449,1341],{"class":691},[425,166451,34001],{"class":701},[425,166453,166454,166457,166459],{"class":427,"line":780},[425,166455,166456],{"class":701},"passed ",[425,166458,1204],{"class":1155},[425,166460,52593],{"class":701},[425,166462,166463],{"class":427,"line":790},[425,166464,3400],{"emptyLinePlaceholder":1084},[425,166466,166467,166469,166471,166473],{"class":427,"line":805},[425,166468,4025],{"class":1155},[425,166470,152892],{"class":701},[425,166472,27034],{"class":1155},[425,166474,152897],{"class":701},[425,166476,166477,166479,166481,166483,166485],{"class":427,"line":818},[425,166478,160062],{"class":701},[425,166480,10476],{"class":1155},[425,166482,152904],{"class":701},[425,166484,152227],{"class":435},[425,166486,34001],{"class":701},[425,166488,166489],{"class":427,"line":831},[425,166490,3400],{"emptyLinePlaceholder":1084},[425,166492,166493,166495,166497,166499,166501,166503,166506,166508],{"class":427,"line":841},[425,166494,4101],{"class":1155},[425,166496,152904],{"class":701},[425,166498,152227],{"class":435},[425,166500,5443],{"class":701},[425,166502,2107],{"class":1155},[425,166504,166505],{"class":701}," max_student[",[425,166507,152227],{"class":435},[425,166509,166510],{"class":701},"]:\n",[425,166512,166513,166516,166518],{"class":427,"line":852},[425,166514,166515],{"class":701},"        max_student ",[425,166517,1204],{"class":1155},[425,166519,152920],{"class":701},[425,166521,166522],{"class":427,"line":862},[425,166523,3400],{"emptyLinePlaceholder":1084},[425,166525,166526,166528,166530,166532,166534,166536,166538],{"class":427,"line":878},[425,166527,4101],{"class":1155},[425,166529,152904],{"class":701},[425,166531,152227],{"class":435},[425,166533,5443],{"class":701},[425,166535,2712],{"class":1155},[425,166537,158592],{"class":691},[425,166539,4739],{"class":701},[425,166541,166542],{"class":427,"line":914},[425,166543,166544],{"class":701},"        passed.append(student)\n",[425,166546,166547],{"class":427,"line":943},[425,166548,3400],{"emptyLinePlaceholder":1084},[425,166550,166551,166553,166555,166557,166559,166561],{"class":427,"line":956},[425,166552,164529],{"class":701},[425,166554,1204],{"class":1155},[425,166556,164534],{"class":701},[425,166558,1732],{"class":1155},[425,166560,8331],{"class":691},[425,166562,165750],{"class":701},[425,166564,166565],{"class":427,"line":964},[425,166566,3400],{"emptyLinePlaceholder":1084},[425,166568,166569,166571,166573,166575,166577,166579,166581,166583,166585,166587],{"class":427,"line":2733},[425,166570,31170],{"class":691},[425,166572,1159],{"class":701},[425,166574,1210],{"class":1155},[425,166576,164552],{"class":435},[425,166578,2043],{"class":691},[425,166580,164557],{"class":701},[425,166582,157914],{"class":1155},[425,166584,2093],{"class":691},[425,166586,1400],{"class":435},[425,166588,1165],{"class":701},[425,166590,166591,166593,166595,166597,166600,166602,166605,166607,166609,166611,166613,166615,166617,166619,166621,166623],{"class":427,"line":2750},[425,166592,31170],{"class":691},[425,166594,1159],{"class":701},[425,166596,1210],{"class":1155},[425,166598,166599],{"class":435},"\"最高分学生:",[425,166601,2043],{"class":691},[425,166603,166604],{"class":701},"max_student[",[425,166606,153637],{"class":435},[425,166608,2087],{"class":701},[425,166610,2093],{"class":691},[425,166612,5448],{"class":691},[425,166614,166604],{"class":701},[425,166616,153675],{"class":435},[425,166618,2087],{"class":701},[425,166620,2093],{"class":691},[425,166622,1400],{"class":435},[425,166624,1165],{"class":701},[425,166626,166627,166629,166631,166633,166636,166639,166642,166644,166646],{"class":427,"line":2755},[425,166628,31170],{"class":691},[425,166630,1159],{"class":701},[425,166632,1210],{"class":1155},[425,166634,166635],{"class":435},"\"及格人数:",[425,166637,166638],{"class":691},"{len",[425,166640,166641],{"class":701},"(passed)",[425,166643,2093],{"class":691},[425,166645,1400],{"class":435},[425,166647,1165],{"class":701},[1099,166649,166651],{"id":166650},"_616-易错点","6.16 易错点",[972,166653,166654,166657,166660,166663,166669,166678],{},[450,166655,166656],{},"列表可变，元组和字符串不可变。",[450,166658,166659],{},"切片结束位置不包含。",[450,166661,166662],{},"字典通过 key 取值，不是通过索引。",[450,166664,166665,166666,998],{},"空集合要用 ",[422,166667,166668],{},"set()",[450,166670,105121,166671,166674,166675,998],{},[422,166672,166673],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[422,166676,166677],{},"get()",[450,166679,166680],{},"嵌套容器要先看清楚每一层是什么类型。",[1099,166682,166684],{"id":166683},"_617-本章练习","6.17 本章练习",[972,166686,166687,166690,166693,166696,166699],{},[450,166688,166689],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[450,166691,166692],{},"输入一句话，统计每个字符出现次数。",[450,166694,166695],{},"使用集合去除列表中的重复元素。",[450,166697,166698],{},"使用字典保存一个学生的信息，并实现修改成绩。",[450,166700,166701],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[1074,166703,166704],{},"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":395,"searchDepth":698,"depth":698,"links":166706},[166707,166708,166709,166710,166711,166712,166713,166714,166715,166716,166717,166718,166719,166720,166721,166722,166723],{"id":163687,"depth":698,"text":163688},{"id":163804,"depth":698,"text":163805},{"id":163894,"depth":698,"text":163895},{"id":164018,"depth":698,"text":164019},{"id":164381,"depth":698,"text":164382},{"id":164568,"depth":698,"text":164569},{"id":164687,"depth":698,"text":164688},{"id":164829,"depth":698,"text":164830},{"id":165016,"depth":698,"text":165017},{"id":165260,"depth":698,"text":165261},{"id":165470,"depth":698,"text":165471},{"id":165555,"depth":698,"text":165556},{"id":165853,"depth":698,"text":165854},{"id":166135,"depth":698,"text":166136},{"id":166327,"depth":698,"text":166328},{"id":166650,"depth":698,"text":166651},{"id":166683,"depth":698,"text":166684},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163679,"description":24374},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166730,"title":166731,"body":166732,"description":24374,"extension":1082,"meta":168904,"navigation":1084,"path":168905,"seo":168906,"stem":168907,"__hash__":168908},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166733,"toc":168879},[166734,166737,166741,166744,166824,166827,166848,166851,166855,166858,166920,166923,166940,166944,166947,166992,166994,167002,167006,167009,167091,167094,167097,167122,167125,167148,167152,167155,167157,167219,167222,167224,167275,167279,167283,167289,167394,167398,167404,167475,167479,167482,167550,167553,167633,167637,167643,167679,167682,167685,167795,167801,167805,167808,167880,167883,167887,167891,167896,167958,167962,167967,168035,168039,168044,168160,168164,168167,168247,168250,168254,168257,168361,168363,168378,168381,168385,168523,168531,168535,168537,168548,168550,168808,168812,168844,168848,168876],[10,166735,166731],{"id":166736},"_7-函数进阶",[1099,166738,166740],{"id":166739},"_71-多返回值","7.1 多返回值",[19,166742,166743],{},"Python 函数可以返回多个值，本质上返回的是元组。",[416,166745,166747],{"className":31133,"code":166746,"language":31135,"meta":395,"style":395},"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",[422,166748,166749,166758,166766,166774,166783,166790,166794,166798,166807,166813],{"__ignoreMap":395},[425,166750,166751,166753,166756],{"class":427,"line":428},[425,166752,32702],{"class":1155},[425,166754,166755],{"class":431}," get_info",[425,166757,32708],{"class":701},[425,166759,166760,166762,166764],{"class":427,"line":698},[425,166761,153125],{"class":701},[425,166763,1204],{"class":1155},[425,166765,150108],{"class":435},[425,166767,166768,166770,166772],{"class":427,"line":710},[425,166769,153141],{"class":701},[425,166771,1204],{"class":1155},[425,166773,147306],{"class":691},[425,166775,166776,166778,166780],{"class":427,"line":721},[425,166777,153156],{"class":701},[425,166779,1204],{"class":1155},[425,166781,166782],{"class":691}," 95\n",[425,166784,166785,166787],{"class":427,"line":735},[425,166786,5090],{"class":1155},[425,166788,166789],{"class":701}," name, age, score\n",[425,166791,166792],{"class":427,"line":743},[425,166793,3400],{"emptyLinePlaceholder":1084},[425,166795,166796],{"class":427,"line":751},[425,166797,3400],{"emptyLinePlaceholder":1084},[425,166799,166800,166802,166804],{"class":427,"line":759},[425,166801,162061],{"class":701},[425,166803,1204],{"class":1155},[425,166805,166806],{"class":701}," get_info()\n",[425,166808,166809,166811],{"class":427,"line":770},[425,166810,31170],{"class":691},[425,166812,77340],{"class":701},[425,166814,166815,166817,166819,166821],{"class":427,"line":780},[425,166816,31170],{"class":691},[425,166818,1159],{"class":701},[425,166820,103862],{"class":691},[425,166822,166823],{"class":701},"(result))\n",[19,166825,166826],{},"可以直接解包：",[416,166828,166830],{"className":31133,"code":166829,"language":31135,"meta":395,"style":395},"name, age, score = get_info()\nprint(name, age, score)\n",[422,166831,166832,166841],{"__ignoreMap":395},[425,166833,166834,166837,166839],{"class":427,"line":428},[425,166835,166836],{"class":701},"name, age, score ",[425,166838,1204],{"class":1155},[425,166840,166806],{"class":701},[425,166842,166843,166845],{"class":427,"line":698},[425,166844,31170],{"class":691},[425,166846,166847],{"class":701},"(name, age, score)\n",[19,166849,166850],{},"返回多个值适合函数需要同时给出多个结果时使用。",[1099,166852,166854],{"id":166853},"_72-位置参数","7.2 位置参数",[19,166856,166857],{},"位置参数按顺序传递。",[416,166859,166861],{"className":31133,"code":166860,"language":31135,"meta":395,"style":395},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[422,166862,166863,166871,166899,166903,166907],{"__ignoreMap":395},[425,166864,166865,166867,166869],{"class":427,"line":428},[425,166866,32702],{"class":1155},[425,166868,150127],{"class":431},[425,166870,150130],{"class":701},[425,166872,166873,166875,166877,166879,166881,166883,166885,166887,166889,166891,166893,166895,166897],{"class":427,"line":698},[425,166874,32054],{"class":691},[425,166876,1159],{"class":701},[425,166878,1210],{"class":1155},[425,166880,150141],{"class":435},[425,166882,2043],{"class":691},[425,166884,80565],{"class":701},[425,166886,2093],{"class":691},[425,166888,150150],{"class":435},[425,166890,2043],{"class":691},[425,166892,70976],{"class":701},[425,166894,2093],{"class":691},[425,166896,150159],{"class":435},[425,166898,1165],{"class":701},[425,166900,166901],{"class":427,"line":710},[425,166902,3400],{"emptyLinePlaceholder":1084},[425,166904,166905],{"class":427,"line":721},[425,166906,3400],{"emptyLinePlaceholder":1084},[425,166908,166909,166912,166914,166916,166918],{"class":427,"line":735},[425,166910,166911],{"class":701},"introduce(",[425,166913,150643],{"class":435},[425,166915,13434],{"class":701},[425,166917,1798],{"class":691},[425,166919,1165],{"class":701},[19,166921,166922],{},"顺序错了就会得到错误含义：",[416,166924,166926],{"className":31133,"code":166925,"language":31135,"meta":395,"style":395},"introduce(18, \"小明\")\n",[422,166927,166928],{"__ignoreMap":395},[425,166929,166930,166932,166934,166936,166938],{"class":427,"line":428},[425,166931,166911],{"class":701},[425,166933,1798],{"class":691},[425,166935,13434],{"class":701},[425,166937,150643],{"class":435},[425,166939,1165],{"class":701},[1099,166941,166943],{"id":166942},"_73-关键字参数","7.3 关键字参数",[19,166945,166946],{},"关键字参数按参数名传递。",[416,166948,166950],{"className":31133,"code":166949,"language":31135,"meta":395,"style":395},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[422,166951,166952,166972],{"__ignoreMap":395},[425,166953,166954,166956,166958,166960,166962,166964,166966,166968,166970],{"class":427,"line":428},[425,166955,166911],{"class":701},[425,166957,80565],{"class":6216},[425,166959,1204],{"class":1155},[425,166961,150643],{"class":435},[425,166963,13434],{"class":701},[425,166965,70976],{"class":6216},[425,166967,1204],{"class":1155},[425,166969,1798],{"class":691},[425,166971,1165],{"class":701},[425,166973,166974,166976,166978,166980,166982,166984,166986,166988,166990],{"class":427,"line":698},[425,166975,166911],{"class":701},[425,166977,70976],{"class":6216},[425,166979,1204],{"class":1155},[425,166981,1798],{"class":691},[425,166983,13434],{"class":701},[425,166985,80565],{"class":6216},[425,166987,1204],{"class":1155},[425,166989,150643],{"class":435},[425,166991,1165],{"class":701},[19,166993,118689],{},[972,166995,166996,166999],{},[450,166997,166998],{},"顺序不容易错。",[450,167000,167001],{},"调用时可读性更强。",[1099,167003,167005],{"id":167004},"_74-默认参数","7.4 默认参数",[19,167007,167008],{},"默认参数给参数设置默认值。",[416,167010,167012],{"className":31133,"code":167011,"language":31135,"meta":395,"style":395},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[422,167013,167014,167030,167060,167064,167068,167078],{"__ignoreMap":395},[425,167015,167016,167018,167020,167023,167025,167028],{"class":427,"line":428},[425,167017,32702],{"class":1155},[425,167019,122848],{"class":431},[425,167021,167022],{"class":701},"(host, port",[425,167024,1204],{"class":1155},[425,167026,167027],{"class":691},"3306",[425,167029,31541],{"class":701},[425,167031,167032,167034,167036,167038,167041,167043,167045,167047,167049,167051,167054,167056,167058],{"class":427,"line":698},[425,167033,32054],{"class":691},[425,167035,1159],{"class":701},[425,167037,1210],{"class":1155},[425,167039,167040],{"class":435},"\"连接",[425,167042,2043],{"class":691},[425,167044,28383],{"class":701},[425,167046,2093],{"class":691},[425,167048,948],{"class":435},[425,167050,2043],{"class":691},[425,167052,167053],{"class":701},"port",[425,167055,2093],{"class":691},[425,167057,1400],{"class":435},[425,167059,1165],{"class":701},[425,167061,167062],{"class":427,"line":710},[425,167063,3400],{"emptyLinePlaceholder":1084},[425,167065,167066],{"class":427,"line":721},[425,167067,3400],{"emptyLinePlaceholder":1084},[425,167069,167070,167073,167076],{"class":427,"line":735},[425,167071,167072],{"class":701},"connect(",[425,167074,167075],{"class":435},"\"localhost\"",[425,167077,1165],{"class":701},[425,167079,167080,167082,167084,167086,167089],{"class":427,"line":743},[425,167081,167072],{"class":701},[425,167083,167075],{"class":435},[425,167085,13434],{"class":701},[425,167087,167088],{"class":691},"6379",[425,167090,1165],{"class":701},[19,167092,167093],{},"注意：默认参数必须放在非默认参数后面。",[19,167095,167096],{},"错误：",[416,167098,167100],{"className":31133,"code":167099,"language":31135,"meta":395,"style":395},"def connect(port=3306, host):\n    pass\n",[422,167101,167102,167118],{"__ignoreMap":395},[425,167103,167104,167106,167108,167111,167113,167115],{"class":427,"line":428},[425,167105,32702],{"class":1155},[425,167107,122848],{"class":431},[425,167109,167110],{"class":701},"(port",[425,167112,1204],{"class":1155},[425,167114,167027],{"class":691},[425,167116,167117],{"class":701},", host):\n",[425,167119,167120],{"class":427,"line":698},[425,167121,150292],{"class":1155},[19,167123,167124],{},"正确：",[416,167126,167128],{"className":31133,"code":167127,"language":31135,"meta":395,"style":395},"def connect(host, port=3306):\n    pass\n",[422,167129,167130,167144],{"__ignoreMap":395},[425,167131,167132,167134,167136,167138,167140,167142],{"class":427,"line":428},[425,167133,32702],{"class":1155},[425,167135,122848],{"class":431},[425,167137,167022],{"class":701},[425,167139,1204],{"class":1155},[425,167141,167027],{"class":691},[425,167143,31541],{"class":701},[425,167145,167146],{"class":427,"line":698},[425,167147,150292],{"class":1155},[1099,167149,167151],{"id":167150},"_75-默认参数的坑","7.5 默认参数的坑",[19,167153,167154],{},"不要使用可变对象作为默认参数。",[19,167156,158378],{},[416,167158,167160],{"className":31133,"code":167159,"language":31135,"meta":395,"style":395},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[422,167161,167162,167177,167182,167189,167193,167197,167208],{"__ignoreMap":395},[425,167163,167164,167166,167169,167172,167174],{"class":427,"line":428},[425,167165,32702],{"class":1155},[425,167167,167168],{"class":431}," add_item",[425,167170,167171],{"class":701},"(item, items",[425,167173,1204],{"class":1155},[425,167175,167176],{"class":701},"[]):\n",[425,167178,167179],{"class":427,"line":698},[425,167180,167181],{"class":701},"    items.append(item)\n",[425,167183,167184,167186],{"class":427,"line":710},[425,167185,5090],{"class":1155},[425,167187,167188],{"class":701}," items\n",[425,167190,167191],{"class":427,"line":721},[425,167192,3400],{"emptyLinePlaceholder":1084},[425,167194,167195],{"class":427,"line":735},[425,167196,3400],{"emptyLinePlaceholder":1084},[425,167198,167199,167201,167204,167206],{"class":427,"line":743},[425,167200,31170],{"class":691},[425,167202,167203],{"class":701},"(add_item(",[425,167205,166080],{"class":435},[425,167207,31252],{"class":701},[425,167209,167210,167212,167214,167217],{"class":427,"line":751},[425,167211,31170],{"class":691},[425,167213,167203],{"class":701},[425,167215,167216],{"class":435},"\"b\"",[425,167218,31252],{"class":701},[19,167220,167221],{},"第二次调用会复用第一次的列表。",[19,167223,156643],{},[416,167225,167227],{"className":31133,"code":167226,"language":31135,"meta":395,"style":395},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[422,167228,167229,167243,167256,167265,167269],{"__ignoreMap":395},[425,167230,167231,167233,167235,167237,167239,167241],{"class":427,"line":428},[425,167232,32702],{"class":1155},[425,167234,167168],{"class":431},[425,167236,167171],{"class":701},[425,167238,1204],{"class":1155},[425,167240,96441],{"class":691},[425,167242,31541],{"class":701},[425,167244,167245,167247,167250,167252,167254],{"class":427,"line":698},[425,167246,4101],{"class":1155},[425,167248,167249],{"class":701}," items ",[425,167251,39682],{"class":1155},[425,167253,39688],{"class":691},[425,167255,4739],{"class":701},[425,167257,167258,167261,167263],{"class":427,"line":710},[425,167259,167260],{"class":701},"        items ",[425,167262,1204],{"class":1155},[425,167264,52593],{"class":701},[425,167266,167267],{"class":427,"line":721},[425,167268,167181],{"class":701},[425,167270,167271,167273],{"class":427,"line":735},[425,167272,5090],{"class":1155},[425,167274,167188],{"class":701},[1099,167276,167278],{"id":167277},"_76-不定长参数","7.6 不定长参数",[14,167280,167282],{"id":167281},"_761-args","7.6.1 *args",[19,167284,167285,167288],{},[422,167286,167287],{},"*args"," 接收任意数量的位置参数，得到元组。",[416,167290,167292],{"className":31133,"code":167291,"language":31135,"meta":395,"style":395},"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",[422,167293,167294,167307,167315,167326,167335,167341,167345,167349,167368],{"__ignoreMap":395},[425,167295,167296,167298,167300,167302,167304],{"class":427,"line":428},[425,167297,32702],{"class":1155},[425,167299,6209],{"class":431},[425,167301,1159],{"class":701},[425,167303,1603],{"class":1155},[425,167305,167306],{"class":701},"args):\n",[425,167308,167309,167311,167313],{"class":427,"line":698},[425,167310,160062],{"class":701},[425,167312,1204],{"class":1155},[425,167314,48088],{"class":691},[425,167316,167317,167319,167321,167323],{"class":427,"line":710},[425,167318,4201],{"class":1155},[425,167320,156935],{"class":701},[425,167322,27034],{"class":1155},[425,167324,167325],{"class":701}," args:\n",[425,167327,167328,167330,167332],{"class":427,"line":721},[425,167329,160737],{"class":701},[425,167331,10476],{"class":1155},[425,167333,167334],{"class":701}," num\n",[425,167336,167337,167339],{"class":427,"line":735},[425,167338,5090],{"class":1155},[425,167340,163042],{"class":701},[425,167342,167343],{"class":427,"line":743},[425,167344,3400],{"emptyLinePlaceholder":1084},[425,167346,167347],{"class":427,"line":751},[425,167348,3400],{"emptyLinePlaceholder":1084},[425,167350,167351,167353,167356,167358,167360,167362,167364,167366],{"class":427,"line":759},[425,167352,31170],{"class":691},[425,167354,167355],{"class":701},"(add(",[425,167357,1367],{"class":691},[425,167359,13434],{"class":701},[425,167361,1235],{"class":691},[425,167363,13434],{"class":701},[425,167365,1229],{"class":691},[425,167367,31252],{"class":701},[425,167369,167370,167372,167374,167376,167378,167380,167382,167384,167386,167388,167390,167392],{"class":427,"line":770},[425,167371,31170],{"class":691},[425,167373,167355],{"class":701},[425,167375,1367],{"class":691},[425,167377,13434],{"class":701},[425,167379,1235],{"class":691},[425,167381,13434],{"class":701},[425,167383,1229],{"class":691},[425,167385,13434],{"class":701},[425,167387,1442],{"class":691},[425,167389,13434],{"class":701},[425,167391,1468],{"class":691},[425,167393,31252],{"class":701},[14,167395,167397],{"id":167396},"_762-kwargs","7.6.2 **kwargs",[19,167399,167400,167403],{},[422,167401,167402],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[416,167405,167407],{"className":31133,"code":167406,"language":31135,"meta":395,"style":395},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[422,167408,167409,167422,167433,167439,167443,167447],{"__ignoreMap":395},[425,167410,167411,167413,167415,167417,167419],{"class":427,"line":428},[425,167412,32702],{"class":1155},[425,167414,162700],{"class":431},[425,167416,1159],{"class":701},[425,167418,11660],{"class":1155},[425,167420,167421],{"class":701},"kwargs):\n",[425,167423,167424,167426,167428,167430],{"class":427,"line":698},[425,167425,4201],{"class":1155},[425,167427,165540],{"class":701},[425,167429,27034],{"class":1155},[425,167431,167432],{"class":701}," kwargs.items():\n",[425,167434,167435,167437],{"class":427,"line":710},[425,167436,33206],{"class":691},[425,167438,165552],{"class":701},[425,167440,167441],{"class":427,"line":721},[425,167442,3400],{"emptyLinePlaceholder":1084},[425,167444,167445],{"class":427,"line":735},[425,167446,3400],{"emptyLinePlaceholder":1084},[425,167448,167449,167451,167453,167455,167457,167459,167461,167463,167465,167467,167469,167471,167473],{"class":427,"line":743},[425,167450,162765],{"class":701},[425,167452,80565],{"class":6216},[425,167454,1204],{"class":1155},[425,167456,150643],{"class":435},[425,167458,13434],{"class":701},[425,167460,70976],{"class":6216},[425,167462,1204],{"class":1155},[425,167464,1798],{"class":691},[425,167466,13434],{"class":701},[425,167468,71027],{"class":6216},[425,167470,1204],{"class":1155},[425,167472,70024],{"class":435},[425,167474,1165],{"class":701},[1099,167476,167478],{"id":167477},"_77-参数解包","7.7 参数解包",[19,167480,167481],{},"列表或元组解包为位置参数：",[416,167483,167485],{"className":31133,"code":167484,"language":31135,"meta":395,"style":395},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[422,167486,167487,167496,167511,167515,167519,167539],{"__ignoreMap":395},[425,167488,167489,167491,167493],{"class":427,"line":428},[425,167490,32702],{"class":1155},[425,167492,6209],{"class":431},[425,167494,167495],{"class":701},"(a, b, c):\n",[425,167497,167498,167500,167502,167504,167506,167508],{"class":427,"line":698},[425,167499,5090],{"class":1155},[425,167501,11868],{"class":701},[425,167503,1629],{"class":1155},[425,167505,11881],{"class":701},[425,167507,1629],{"class":1155},[425,167509,167510],{"class":701}," c\n",[425,167512,167513],{"class":427,"line":710},[425,167514,3400],{"emptyLinePlaceholder":1084},[425,167516,167517],{"class":427,"line":721},[425,167518,3400],{"emptyLinePlaceholder":1084},[425,167520,167521,167523,167525,167527,167529,167531,167533,167535,167537],{"class":427,"line":735},[425,167522,164855],{"class":701},[425,167524,1204],{"class":1155},[425,167526,52981],{"class":701},[425,167528,1367],{"class":691},[425,167530,13434],{"class":701},[425,167532,1235],{"class":691},[425,167534,13434],{"class":701},[425,167536,1229],{"class":691},[425,167538,34001],{"class":701},[425,167540,167541,167543,167545,167547],{"class":427,"line":743},[425,167542,31170],{"class":691},[425,167544,167355],{"class":701},[425,167546,1603],{"class":1155},[425,167548,167549],{"class":701},"nums))\n",[19,167551,167552],{},"字典解包为关键字参数：",[416,167554,167556],{"className":31133,"code":167555,"language":31135,"meta":395,"style":395},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[422,167557,167558,167566,167592,167596,167600,167624],{"__ignoreMap":395},[425,167559,167560,167562,167564],{"class":427,"line":428},[425,167561,32702],{"class":1155},[425,167563,150127],{"class":431},[425,167565,150130],{"class":701},[425,167567,167568,167570,167572,167574,167576,167578,167580,167582,167584,167586,167588,167590],{"class":427,"line":698},[425,167569,32054],{"class":691},[425,167571,1159],{"class":701},[425,167573,1210],{"class":1155},[425,167575,1400],{"class":435},[425,167577,2043],{"class":691},[425,167579,80565],{"class":701},[425,167581,2093],{"class":691},[425,167583,5448],{"class":691},[425,167585,70976],{"class":701},[425,167587,2093],{"class":691},[425,167589,1400],{"class":435},[425,167591,1165],{"class":701},[425,167593,167594],{"class":427,"line":710},[425,167595,3400],{"emptyLinePlaceholder":1084},[425,167597,167598],{"class":427,"line":721},[425,167599,3400],{"emptyLinePlaceholder":1084},[425,167601,167602,167604,167606,167608,167610,167612,167614,167616,167618,167620,167622],{"class":427,"line":735},[425,167603,117069],{"class":701},[425,167605,1204],{"class":1155},[425,167607,5448],{"class":701},[425,167609,63434],{"class":435},[425,167611,52192],{"class":701},[425,167613,150643],{"class":435},[425,167615,13434],{"class":701},[425,167617,69879],{"class":435},[425,167619,52192],{"class":701},[425,167621,1798],{"class":691},[425,167623,2578],{"class":701},[425,167625,167626,167628,167630],{"class":427,"line":743},[425,167627,166911],{"class":701},[425,167629,11660],{"class":1155},[425,167631,167632],{"class":701},"info)\n",[1099,167634,167636],{"id":167635},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,167638,167639,167642],{},[422,167640,167641],{},"lambda"," 用于定义简单匿名函数。",[416,167644,167646],{"className":31133,"code":167645,"language":31135,"meta":395,"style":395},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[422,167647,167648,167665],{"__ignoreMap":395},[425,167649,167650,167653,167655,167658,167661,167663],{"class":427,"line":428},[425,167651,167652],{"class":701},"add ",[425,167654,1204],{"class":1155},[425,167656,167657],{"class":1155}," lambda",[425,167659,167660],{"class":701}," a, b: a ",[425,167662,1629],{"class":1155},[425,167664,151859],{"class":701},[425,167666,167667,167669,167671,167673,167675,167677],{"class":427,"line":698},[425,167668,31170],{"class":691},[425,167670,167355],{"class":701},[425,167672,1367],{"class":691},[425,167674,13434],{"class":701},[425,167676,1235],{"class":691},[425,167678,31252],{"class":701},[19,167680,167681],{},"常和排序、过滤等函数一起使用。",[19,167683,167684],{},"按分数排序：",[416,167686,167688],{"className":31133,"code":167687,"language":31135,"meta":395,"style":395},"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",[422,167689,167690,167698,167718,167738,167758,167762,167766,167789],{"__ignoreMap":395},[425,167691,167692,167694,167696],{"class":427,"line":428},[425,167693,160471],{"class":701},[425,167695,1204],{"class":1155},[425,167697,56202],{"class":701},[425,167699,167700,167702,167704,167706,167708,167710,167712,167714,167716],{"class":427,"line":698},[425,167701,149140],{"class":701},[425,167703,63434],{"class":435},[425,167705,52192],{"class":701},[425,167707,150643],{"class":435},[425,167709,13434],{"class":701},[425,167711,152227],{"class":435},[425,167713,52192],{"class":701},[425,167715,2136],{"class":691},[425,167717,5930],{"class":701},[425,167719,167720,167722,167724,167726,167728,167730,167732,167734,167736],{"class":427,"line":710},[425,167721,149140],{"class":701},[425,167723,63434],{"class":435},[425,167725,52192],{"class":701},[425,167727,151691],{"class":435},[425,167729,13434],{"class":701},[425,167731,152227],{"class":435},[425,167733,52192],{"class":701},[425,167735,1959],{"class":691},[425,167737,5930],{"class":701},[425,167739,167740,167742,167744,167746,167748,167750,167752,167754,167756],{"class":427,"line":721},[425,167741,149140],{"class":701},[425,167743,63434],{"class":435},[425,167745,52192],{"class":701},[425,167747,160486],{"class":435},[425,167749,13434],{"class":701},[425,167751,152227],{"class":435},[425,167753,52192],{"class":701},[425,167755,1555],{"class":691},[425,167757,5930],{"class":701},[425,167759,167760],{"class":427,"line":735},[425,167761,34001],{"class":701},[425,167763,167764],{"class":427,"line":743},[425,167765,3400],{"emptyLinePlaceholder":1084},[425,167767,167768,167771,167773,167775,167777,167779,167781,167783,167785,167787],{"class":427,"line":751},[425,167769,167770],{"class":701},"students.sort(",[425,167772,154701],{"class":6216},[425,167774,154704],{"class":1155},[425,167776,154707],{"class":701},[425,167778,152227],{"class":435},[425,167780,112957],{"class":701},[425,167782,164283],{"class":6216},[425,167784,1204],{"class":1155},[425,167786,32231],{"class":691},[425,167788,1165],{"class":701},[425,167790,167791,167793],{"class":427,"line":759},[425,167792,31170],{"class":691},[425,167794,165750],{"class":701},[19,167796,167797,167798,167800],{},"如果逻辑复杂，不要硬写 ",[422,167799,167641],{},"，定义普通函数更清晰。",[1099,167802,167804],{"id":167803},"_79-函数作为参数","7.9 函数作为参数",[19,167806,167807],{},"函数可以作为参数传给另一个函数。",[416,167809,167811],{"className":31133,"code":167810,"language":31135,"meta":395,"style":395},"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",[422,167812,167813,167821,167831,167835,167839,167849,167856,167860,167864],{"__ignoreMap":395},[425,167814,167815,167817,167819],{"class":427,"line":428},[425,167816,32702],{"class":1155},[425,167818,6209],{"class":431},[425,167820,151848],{"class":701},[425,167822,167823,167825,167827,167829],{"class":427,"line":698},[425,167824,5090],{"class":1155},[425,167826,11868],{"class":701},[425,167828,1629],{"class":1155},[425,167830,151859],{"class":701},[425,167832,167833],{"class":427,"line":710},[425,167834,3400],{"emptyLinePlaceholder":1084},[425,167836,167837],{"class":427,"line":721},[425,167838,3400],{"emptyLinePlaceholder":1084},[425,167840,167841,167843,167846],{"class":427,"line":735},[425,167842,32702],{"class":1155},[425,167844,167845],{"class":431}," calculate",[425,167847,167848],{"class":701},"(a, b, func):\n",[425,167850,167851,167853],{"class":427,"line":743},[425,167852,5090],{"class":1155},[425,167854,167855],{"class":701}," func(a, b)\n",[425,167857,167858],{"class":427,"line":751},[425,167859,3400],{"emptyLinePlaceholder":1084},[425,167861,167862],{"class":427,"line":759},[425,167863,3400],{"emptyLinePlaceholder":1084},[425,167865,167866,167868,167871,167873,167875,167877],{"class":427,"line":770},[425,167867,31170],{"class":691},[425,167869,167870],{"class":701},"(calculate(",[425,167872,1594],{"class":691},[425,167874,13434],{"class":701},[425,167876,1848],{"class":691},[425,167878,167879],{"class":701},", add))\n",[19,167881,167882],{},"这种思想在排序、回调、框架中经常出现。",[1099,167884,167886],{"id":167885},"_710-mapfiltersorted","7.10 map、filter、sorted",[14,167888,167890],{"id":167889},"_7101-map","7.10.1 map",[19,167892,167893,167895],{},[422,167894,74799],{}," 对每个元素执行函数。",[416,167897,167899],{"className":31133,"code":167898,"language":31135,"meta":395,"style":395},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[422,167900,167901,167925,167948],{"__ignoreMap":395},[425,167902,167903,167905,167907,167909,167911,167913,167915,167917,167919,167921,167923],{"class":427,"line":428},[425,167904,164855],{"class":701},[425,167906,1204],{"class":1155},[425,167908,52981],{"class":701},[425,167910,1367],{"class":691},[425,167912,13434],{"class":701},[425,167914,1235],{"class":691},[425,167916,13434],{"class":701},[425,167918,1229],{"class":691},[425,167920,13434],{"class":701},[425,167922,1442],{"class":691},[425,167924,34001],{"class":701},[425,167926,167927,167929,167931,167934,167936,167938,167941,167943,167945],{"class":427,"line":698},[425,167928,162061],{"class":701},[425,167930,1204],{"class":1155},[425,167932,167933],{"class":691}," map",[425,167935,1159],{"class":701},[425,167937,167641],{"class":1155},[425,167939,167940],{"class":701}," x: x ",[425,167942,1603],{"class":1155},[425,167944,15752],{"class":691},[425,167946,167947],{"class":701},", nums)\n",[425,167949,167950,167952,167954,167956],{"class":427,"line":710},[425,167951,31170],{"class":691},[425,167953,1159],{"class":701},[425,167955,154825],{"class":691},[425,167957,166823],{"class":701},[14,167959,167961],{"id":167960},"_7102-filter","7.10.2 filter",[19,167963,167964,167966],{},[422,167965,80806],{}," 保留满足条件的元素。",[416,167968,167970],{"className":31133,"code":167969,"language":31135,"meta":395,"style":395},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[422,167971,167972,168000,168025],{"__ignoreMap":395},[425,167973,167974,167976,167978,167980,167982,167984,167986,167988,167990,167992,167994,167996,167998],{"class":427,"line":428},[425,167975,164855],{"class":701},[425,167977,1204],{"class":1155},[425,167979,52981],{"class":701},[425,167981,1367],{"class":691},[425,167983,13434],{"class":701},[425,167985,1235],{"class":691},[425,167987,13434],{"class":701},[425,167989,1229],{"class":691},[425,167991,13434],{"class":701},[425,167993,1442],{"class":691},[425,167995,13434],{"class":701},[425,167997,1468],{"class":691},[425,167999,34001],{"class":701},[425,168001,168002,168004,168006,168009,168011,168013,168015,168017,168019,168021,168023],{"class":427,"line":698},[425,168003,162061],{"class":701},[425,168005,1204],{"class":1155},[425,168007,168008],{"class":691}," filter",[425,168010,1159],{"class":701},[425,168012,167641],{"class":1155},[425,168014,167940],{"class":701},[425,168016,1477],{"class":1155},[425,168018,15752],{"class":691},[425,168020,102314],{"class":1155},[425,168022,5093],{"class":691},[425,168024,167947],{"class":701},[425,168026,168027,168029,168031,168033],{"class":427,"line":710},[425,168028,31170],{"class":691},[425,168030,1159],{"class":701},[425,168032,154825],{"class":691},[425,168034,166823],{"class":701},[14,168036,168038],{"id":168037},"_7103-sorted","7.10.3 sorted",[19,168040,168041,168043],{},[422,168042,165991],{}," 返回排序后的新列表。",[416,168045,168047],{"className":31133,"code":168046,"language":31135,"meta":395,"style":395},"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",[422,168048,168049,168057,168077,168097,168117,168121,168125,168154],{"__ignoreMap":395},[425,168050,168051,168053,168055],{"class":427,"line":428},[425,168052,160471],{"class":701},[425,168054,1204],{"class":1155},[425,168056,56202],{"class":701},[425,168058,168059,168061,168063,168065,168067,168069,168071,168073,168075],{"class":427,"line":698},[425,168060,149140],{"class":701},[425,168062,63434],{"class":435},[425,168064,52192],{"class":701},[425,168066,150643],{"class":435},[425,168068,13434],{"class":701},[425,168070,152227],{"class":435},[425,168072,52192],{"class":701},[425,168074,2136],{"class":691},[425,168076,5930],{"class":701},[425,168078,168079,168081,168083,168085,168087,168089,168091,168093,168095],{"class":427,"line":710},[425,168080,149140],{"class":701},[425,168082,63434],{"class":435},[425,168084,52192],{"class":701},[425,168086,151691],{"class":435},[425,168088,13434],{"class":701},[425,168090,152227],{"class":435},[425,168092,52192],{"class":701},[425,168094,1959],{"class":691},[425,168096,5930],{"class":701},[425,168098,168099,168101,168103,168105,168107,168109,168111,168113,168115],{"class":427,"line":721},[425,168100,149140],{"class":701},[425,168102,63434],{"class":435},[425,168104,52192],{"class":701},[425,168106,160486],{"class":435},[425,168108,13434],{"class":701},[425,168110,152227],{"class":435},[425,168112,52192],{"class":701},[425,168114,1555],{"class":691},[425,168116,5930],{"class":701},[425,168118,168119],{"class":427,"line":735},[425,168120,34001],{"class":701},[425,168122,168123],{"class":427,"line":743},[425,168124,3400],{"emptyLinePlaceholder":1084},[425,168126,168127,168129,168131,168133,168136,168138,168140,168142,168144,168146,168148,168150,168152],{"class":427,"line":751},[425,168128,162061],{"class":701},[425,168130,1204],{"class":1155},[425,168132,164359],{"class":691},[425,168134,168135],{"class":701},"(students, ",[425,168137,154701],{"class":6216},[425,168139,154704],{"class":1155},[425,168141,154707],{"class":701},[425,168143,152227],{"class":435},[425,168145,112957],{"class":701},[425,168147,164283],{"class":6216},[425,168149,1204],{"class":1155},[425,168151,32231],{"class":691},[425,168153,1165],{"class":701},[425,168155,168156,168158],{"class":427,"line":759},[425,168157,31170],{"class":691},[425,168159,77340],{"class":701},[1099,168161,168163],{"id":168162},"_711-闭包入门","7.11 闭包入门",[19,168165,168166],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[416,168168,168170],{"className":31133,"code":168169,"language":31135,"meta":395,"style":395},"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",[422,168171,168172,168182,168192,168203,168207,168214,168218,168222,168236],{"__ignoreMap":395},[425,168173,168174,168176,168179],{"class":427,"line":428},[425,168175,32702],{"class":1155},[425,168177,168178],{"class":431}," outer",[425,168180,168181],{"class":701},"(base):\n",[425,168183,168184,168186,168189],{"class":427,"line":698},[425,168185,31556],{"class":1155},[425,168187,168188],{"class":431}," inner",[425,168190,168191],{"class":701},"(num):\n",[425,168193,168194,168196,168199,168201],{"class":427,"line":710},[425,168195,15749],{"class":1155},[425,168197,168198],{"class":701}," base ",[425,168200,1629],{"class":1155},[425,168202,167334],{"class":701},[425,168204,168205],{"class":427,"line":721},[425,168206,3400],{"emptyLinePlaceholder":1084},[425,168208,168209,168211],{"class":427,"line":735},[425,168210,5090],{"class":1155},[425,168212,168213],{"class":701}," inner\n",[425,168215,168216],{"class":427,"line":743},[425,168217,3400],{"emptyLinePlaceholder":1084},[425,168219,168220],{"class":427,"line":751},[425,168221,3400],{"emptyLinePlaceholder":1084},[425,168223,168224,168227,168229,168232,168234],{"class":427,"line":759},[425,168225,168226],{"class":701},"add_10 ",[425,168228,1204],{"class":1155},[425,168230,168231],{"class":701}," outer(",[425,168233,1594],{"class":691},[425,168235,1165],{"class":701},[425,168237,168238,168240,168243,168245],{"class":427,"line":770},[425,168239,31170],{"class":691},[425,168241,168242],{"class":701},"(add_10(",[425,168244,1468],{"class":691},[425,168246,31252],{"class":701},[19,168248,168249],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[1099,168251,168253],{"id":168252},"_712-装饰器入门","7.12 装饰器入门",[19,168255,168256],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[416,168258,168260],{"className":31133,"code":168259,"language":31135,"meta":395,"style":395},"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",[422,168261,168262,168271,168280,168291,168296,168307,168311,168318,168322,168326,168331,168339,168349,168353,168357],{"__ignoreMap":395},[425,168263,168264,168266,168268],{"class":427,"line":428},[425,168265,32702],{"class":1155},[425,168267,87946],{"class":431},[425,168269,168270],{"class":701},"(func):\n",[425,168272,168273,168275,168278],{"class":427,"line":698},[425,168274,31556],{"class":1155},[425,168276,168277],{"class":431}," wrapper",[425,168279,32708],{"class":701},[425,168281,168282,168284,168286,168289],{"class":427,"line":710},[425,168283,33206],{"class":691},[425,168285,1159],{"class":701},[425,168287,168288],{"class":435},"\"函数开始执行\"",[425,168290,1165],{"class":701},[425,168292,168293],{"class":427,"line":721},[425,168294,168295],{"class":701},"        func()\n",[425,168297,168298,168300,168302,168305],{"class":427,"line":735},[425,168299,33206],{"class":691},[425,168301,1159],{"class":701},[425,168303,168304],{"class":435},"\"函数执行结束\"",[425,168306,1165],{"class":701},[425,168308,168309],{"class":427,"line":743},[425,168310,3400],{"emptyLinePlaceholder":1084},[425,168312,168313,168315],{"class":427,"line":751},[425,168314,5090],{"class":1155},[425,168316,168317],{"class":701}," wrapper\n",[425,168319,168320],{"class":427,"line":759},[425,168321,3400],{"emptyLinePlaceholder":1084},[425,168323,168324],{"class":427,"line":770},[425,168325,3400],{"emptyLinePlaceholder":1084},[425,168327,168328],{"class":427,"line":780},[425,168329,168330],{"class":431},"@log\n",[425,168332,168333,168335,168337],{"class":427,"line":790},[425,168334,32702],{"class":1155},[425,168336,161751],{"class":431},[425,168338,32708],{"class":701},[425,168340,168341,168343,168345,168347],{"class":427,"line":805},[425,168342,32054],{"class":691},[425,168344,1159],{"class":701},[425,168346,6844],{"class":435},[425,168348,1165],{"class":701},[425,168350,168351],{"class":427,"line":818},[425,168352,3400],{"emptyLinePlaceholder":1084},[425,168354,168355],{"class":427,"line":831},[425,168356,3400],{"emptyLinePlaceholder":1084},[425,168358,168359],{"class":427,"line":841},[425,168360,161786],{"class":701},[19,168362,159029],{},[416,168364,168366],{"className":31133,"code":168365,"language":31135,"meta":395,"style":395},"say_hello = log(say_hello)\n",[422,168367,168368],{"__ignoreMap":395},[425,168369,168370,168373,168375],{"class":427,"line":428},[425,168371,168372],{"class":701},"say_hello ",[425,168374,1204],{"class":1155},[425,168376,168377],{"class":701}," log(say_hello)\n",[19,168379,168380],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[1099,168382,168384],{"id":168383},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[416,168386,168388],{"className":31133,"code":168387,"language":31135,"meta":395,"style":395},"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",[422,168389,168390,168398,168415,168425,168444,168454,168461,168465,168471,168475,168479,168483,168491,168501,168505,168509],{"__ignoreMap":395},[425,168391,168392,168394,168396],{"class":427,"line":428},[425,168393,32702],{"class":1155},[425,168395,87946],{"class":431},[425,168397,168270],{"class":701},[425,168399,168400,168402,168404,168406,168408,168411,168413],{"class":427,"line":698},[425,168401,31556],{"class":1155},[425,168403,168277],{"class":431},[425,168405,1159],{"class":701},[425,168407,1603],{"class":1155},[425,168409,168410],{"class":701},"args, ",[425,168412,11660],{"class":1155},[425,168414,167421],{"class":701},[425,168416,168417,168419,168421,168423],{"class":427,"line":710},[425,168418,33206],{"class":691},[425,168420,1159],{"class":701},[425,168422,168288],{"class":435},[425,168424,1165],{"class":701},[425,168426,168427,168430,168432,168435,168437,168439,168441],{"class":427,"line":721},[425,168428,168429],{"class":701},"        result ",[425,168431,1204],{"class":1155},[425,168433,168434],{"class":701}," func(",[425,168436,1603],{"class":1155},[425,168438,168410],{"class":701},[425,168440,11660],{"class":1155},[425,168442,168443],{"class":701},"kwargs)\n",[425,168445,168446,168448,168450,168452],{"class":427,"line":735},[425,168447,33206],{"class":691},[425,168449,1159],{"class":701},[425,168451,168304],{"class":435},[425,168453,1165],{"class":701},[425,168455,168456,168458],{"class":427,"line":743},[425,168457,15749],{"class":1155},[425,168459,168460],{"class":701}," result\n",[425,168462,168463],{"class":427,"line":751},[425,168464,3400],{"emptyLinePlaceholder":1084},[425,168466,168467,168469],{"class":427,"line":759},[425,168468,5090],{"class":1155},[425,168470,168317],{"class":701},[425,168472,168473],{"class":427,"line":770},[425,168474,3400],{"emptyLinePlaceholder":1084},[425,168476,168477],{"class":427,"line":780},[425,168478,3400],{"emptyLinePlaceholder":1084},[425,168480,168481],{"class":427,"line":790},[425,168482,168330],{"class":431},[425,168484,168485,168487,168489],{"class":427,"line":805},[425,168486,32702],{"class":1155},[425,168488,6209],{"class":431},[425,168490,151848],{"class":701},[425,168492,168493,168495,168497,168499],{"class":427,"line":818},[425,168494,5090],{"class":1155},[425,168496,11868],{"class":701},[425,168498,1629],{"class":1155},[425,168500,151859],{"class":701},[425,168502,168503],{"class":427,"line":831},[425,168504,3400],{"emptyLinePlaceholder":1084},[425,168506,168507],{"class":427,"line":841},[425,168508,3400],{"emptyLinePlaceholder":1084},[425,168510,168511,168513,168515,168517,168519,168521],{"class":427,"line":852},[425,168512,31170],{"class":691},[425,168514,167355],{"class":701},[425,168516,1594],{"class":691},[425,168518,13434],{"class":701},[425,168520,1848],{"class":691},[425,168522,31252],{"class":701},[19,168524,168525,168526,101773,168528,168530],{},"这个写法使用 ",[422,168527,167287],{},[422,168529,167402],{}," 接收原函数的所有参数。",[1099,168532,168534],{"id":168533},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,168536,124047],{},[972,168538,168539,168542,168545],{},[450,168540,168541],{},"给定一组学生数据。",[450,168543,168544],{},"封装函数，根据传入规则筛选学生。",[450,168546,168547],{},"筛选及格、优秀、未成年学生。",[19,168549,11034],{},[416,168551,168553],{"className":31133,"code":168552,"language":31135,"meta":395,"style":395},"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",[422,168554,168555,168563,168591,168619,168647,168651,168655,168659,168669,168677,168687,168694,168699,168705,168709,168713,168737,168760,168783,168787,168794,168801],{"__ignoreMap":395},[425,168556,168557,168559,168561],{"class":427,"line":428},[425,168558,160471],{"class":701},[425,168560,1204],{"class":1155},[425,168562,56202],{"class":701},[425,168564,168565,168567,168569,168571,168573,168575,168577,168579,168581,168583,168585,168587,168589],{"class":427,"line":698},[425,168566,149140],{"class":701},[425,168568,63434],{"class":435},[425,168570,52192],{"class":701},[425,168572,150643],{"class":435},[425,168574,13434],{"class":701},[425,168576,69879],{"class":435},[425,168578,52192],{"class":701},[425,168580,1798],{"class":691},[425,168582,13434],{"class":701},[425,168584,152227],{"class":435},[425,168586,52192],{"class":701},[425,168588,2136],{"class":691},[425,168590,5930],{"class":701},[425,168592,168593,168595,168597,168599,168601,168603,168605,168607,168609,168611,168613,168615,168617],{"class":427,"line":710},[425,168594,149140],{"class":701},[425,168596,63434],{"class":435},[425,168598,52192],{"class":701},[425,168600,151691],{"class":435},[425,168602,13434],{"class":701},[425,168604,69879],{"class":435},[425,168606,52192],{"class":701},[425,168608,1773],{"class":691},[425,168610,13434],{"class":701},[425,168612,152227],{"class":435},[425,168614,52192],{"class":701},[425,168616,1959],{"class":691},[425,168618,5930],{"class":701},[425,168620,168621,168623,168625,168627,168629,168631,168633,168635,168637,168639,168641,168643,168645],{"class":427,"line":721},[425,168622,149140],{"class":701},[425,168624,63434],{"class":435},[425,168626,52192],{"class":701},[425,168628,160486],{"class":435},[425,168630,13434],{"class":701},[425,168632,69879],{"class":435},[425,168634,52192],{"class":701},[425,168636,1823],{"class":691},[425,168638,13434],{"class":701},[425,168640,152227],{"class":435},[425,168642,52192],{"class":701},[425,168644,2029],{"class":691},[425,168646,5930],{"class":701},[425,168648,168649],{"class":427,"line":735},[425,168650,34001],{"class":701},[425,168652,168653],{"class":427,"line":743},[425,168654,3400],{"emptyLinePlaceholder":1084},[425,168656,168657],{"class":427,"line":751},[425,168658,3400],{"emptyLinePlaceholder":1084},[425,168660,168661,168663,168666],{"class":427,"line":759},[425,168662,32702],{"class":1155},[425,168664,168665],{"class":431}," filter_students",[425,168667,168668],{"class":701},"(students, condition):\n",[425,168670,168671,168673,168675],{"class":427,"line":770},[425,168672,161978],{"class":701},[425,168674,1204],{"class":1155},[425,168676,52593],{"class":701},[425,168678,168679,168681,168683,168685],{"class":427,"line":780},[425,168680,4201],{"class":1155},[425,168682,152892],{"class":701},[425,168684,27034],{"class":1155},[425,168686,152897],{"class":701},[425,168688,168689,168691],{"class":427,"line":790},[425,168690,3497],{"class":1155},[425,168692,168693],{"class":701}," condition(student):\n",[425,168695,168696],{"class":427,"line":805},[425,168697,168698],{"class":701},"            result.append(student)\n",[425,168700,168701,168703],{"class":427,"line":818},[425,168702,5090],{"class":1155},[425,168704,168460],{"class":701},[425,168706,168707],{"class":427,"line":831},[425,168708,3400],{"emptyLinePlaceholder":1084},[425,168710,168711],{"class":427,"line":841},[425,168712,3400],{"emptyLinePlaceholder":1084},[425,168714,168715,168717,168719,168722,168724,168727,168729,168731,168733,168735],{"class":427,"line":852},[425,168716,166456],{"class":701},[425,168718,1204],{"class":1155},[425,168720,168721],{"class":701}," filter_students(students, ",[425,168723,167641],{"class":1155},[425,168725,168726],{"class":701}," s: s[",[425,168728,152227],{"class":435},[425,168730,5443],{"class":701},[425,168732,2712],{"class":1155},[425,168734,158592],{"class":691},[425,168736,1165],{"class":701},[425,168738,168739,168742,168744,168746,168748,168750,168752,168754,168756,168758],{"class":427,"line":862},[425,168740,168741],{"class":701},"excellent ",[425,168743,1204],{"class":1155},[425,168745,168721],{"class":701},[425,168747,167641],{"class":1155},[425,168749,168726],{"class":701},[425,168751,152227],{"class":435},[425,168753,5443],{"class":701},[425,168755,2712],{"class":1155},[425,168757,158543],{"class":691},[425,168759,1165],{"class":701},[425,168761,168762,168765,168767,168769,168771,168773,168775,168777,168779,168781],{"class":427,"line":878},[425,168763,168764],{"class":701},"under_age ",[425,168766,1204],{"class":1155},[425,168768,168721],{"class":701},[425,168770,167641],{"class":1155},[425,168772,168726],{"class":701},[425,168774,69879],{"class":435},[425,168776,5443],{"class":701},[425,168778,2057],{"class":1155},[425,168780,157040],{"class":691},[425,168782,1165],{"class":701},[425,168784,168785],{"class":427,"line":914},[425,168786,3400],{"emptyLinePlaceholder":1084},[425,168788,168789,168791],{"class":427,"line":943},[425,168790,31170],{"class":691},[425,168792,168793],{"class":701},"(passed)\n",[425,168795,168796,168798],{"class":427,"line":956},[425,168797,31170],{"class":691},[425,168799,168800],{"class":701},"(excellent)\n",[425,168802,168803,168805],{"class":427,"line":964},[425,168804,31170],{"class":691},[425,168806,168807],{"class":701},"(under_age)\n",[1099,168809,168811],{"id":168810},"_715-易错点","7.15 易错点",[972,168813,168814,168817,168825,168830,168841],{},[450,168815,168816],{},"默认参数不要写可变对象。",[450,168818,168819,168821,168822,168824],{},[422,168820,167287],{}," 是元组，",[422,168823,167402],{}," 是字典。",[450,168826,168827,168829],{},[422,168828,167641],{}," 只适合简单表达式。",[450,168831,168832,101773,168834,168836,168837,168840],{},[422,168833,74799],{},[422,168835,80806],{}," 的结果是迭代器，常用 ",[422,168838,168839],{},"list()"," 转换查看。",[450,168842,168843],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[1099,168845,168847],{"id":168846},"_716-本章练习","7.16 本章练习",[972,168849,168850,168857,168863,168868,168873],{},[450,168851,168852,168853,168856],{},"写函数 ",[422,168854,168855],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[450,168858,168852,168859,168862],{},[422,168860,168861],{},"print_user(**kwargs)","，输出用户所有字段。",[450,168864,105121,168865,168867],{},[422,168866,167641],{}," 对学生列表按年龄排序。",[450,168869,105121,168870,168872],{},[422,168871,80806],{}," 找出成绩不及格的学生。",[450,168874,168875],{},"写一个装饰器，统计函数执行前后的提示信息。",[1074,168877,168878],{},"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":395,"searchDepth":698,"depth":698,"links":168880},[168881,168882,168883,168884,168885,168886,168890,168891,168892,168893,168898,168899,168900,168901,168902,168903],{"id":166739,"depth":698,"text":166740},{"id":166853,"depth":698,"text":166854},{"id":166942,"depth":698,"text":166943},{"id":167004,"depth":698,"text":167005},{"id":167150,"depth":698,"text":167151},{"id":167277,"depth":698,"text":167278,"children":168887},[168888,168889],{"id":167281,"depth":710,"text":167282},{"id":167396,"depth":710,"text":167397},{"id":167477,"depth":698,"text":167478},{"id":167635,"depth":698,"text":167636},{"id":167803,"depth":698,"text":167804},{"id":167885,"depth":698,"text":167886,"children":168894},[168895,168896,168897],{"id":167889,"depth":710,"text":167890},{"id":167960,"depth":710,"text":167961},{"id":168037,"depth":710,"text":168038},{"id":168162,"depth":698,"text":168163},{"id":168252,"depth":698,"text":168253},{"id":168383,"depth":698,"text":168384},{"id":168533,"depth":698,"text":168534},{"id":168810,"depth":698,"text":168811},{"id":168846,"depth":698,"text":168847},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166731,"description":24374},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168910,"title":168911,"body":168912,"description":24374,"extension":1082,"meta":171431,"navigation":1084,"path":171432,"seo":171433,"stem":171434,"__hash__":171435},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168913,"toc":171406},[168914,168917,168921,168924,168927,168958,168962,168966,168969,168996,169000,169003,169054,169057,169072,169075,169110,169114,169116,169140,169143,169203,169207,169211,169214,169271,169274,169294,169298,169301,169364,169368,169371,169427,169434,169458,169462,169465,169528,169532,169537,169588,169591,169595,169600,169667,169670,169752,169756,169761,169812,169815,169819,169822,169825,169833,169836,169882,169885,169931,169935,169941,169985,169988,170034,170037,170077,170080,170141,170145,170148,170238,170241,170383,170386,170453,170457,170460,170463,170604,170607,170685,170688,170864,170868,170870,170881,170883,171082,171086,171330,171334,171368,171372,171403],[10,168915,168911],{"id":168916},"_8-文件操作",[1099,168918,168920],{"id":168919},"_81-文件操作的意义","8.1 文件操作的意义",[19,168922,168923],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,168925,168926],{},"常见文件类型：",[972,168928,168929,168935,168941,168947,168953],{},[450,168930,168931,168934],{},[422,168932,168933],{},".txt","：普通文本。",[450,168936,168937,168940],{},[422,168938,168939],{},".csv","：表格文本。",[450,168942,168943,168946],{},[422,168944,168945],{},".json","：结构化数据。",[450,168948,168949,168952],{},[422,168950,168951],{},".log","：日志文件。",[450,168954,168955,168957],{},[422,168956,147107],{},"：Python 源代码。",[1099,168959,168961],{"id":168960},"_82-路径","8.2 路径",[14,168963,168965],{"id":168964},"_821-相对路径","8.2.1 相对路径",[19,168967,168968],{},"相对当前运行目录：",[416,168970,168972],{"className":31133,"code":168971,"language":31135,"meta":395,"style":395},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[422,168973,168974],{"__ignoreMap":395},[425,168975,168976,168978,168980,168982,168984,168986,168988,168990,168992,168994],{"class":427,"line":428},[425,168977,87670],{"class":691},[425,168979,1159],{"class":701},[425,168981,147551],{"class":435},[425,168983,13434],{"class":701},[425,168985,147556],{"class":435},[425,168987,13434],{"class":701},[425,168989,147561],{"class":6216},[425,168991,1204],{"class":1155},[425,168993,147566],{"class":435},[425,168995,1165],{"class":701},[14,168997,168999],{"id":168998},"_822-绝对路径","8.2.2 绝对路径",[19,169001,169002],{},"从根目录或盘符开始：",[416,169004,169006],{"className":31133,"code":169005,"language":31135,"meta":395,"style":395},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[422,169007,169008,169031],{"__ignoreMap":395},[425,169009,169010,169012,169014,169017,169019,169021,169023,169025,169027,169029],{"class":427,"line":428},[425,169011,87670],{"class":691},[425,169013,1159],{"class":701},[425,169015,169016],{"class":435},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[425,169018,13434],{"class":701},[425,169020,147556],{"class":435},[425,169022,13434],{"class":701},[425,169024,147561],{"class":6216},[425,169026,1204],{"class":1155},[425,169028,147566],{"class":435},[425,169030,1165],{"class":701},[425,169032,169033,169035,169037,169040,169042,169044,169046,169048,169050,169052],{"class":427,"line":698},[425,169034,87670],{"class":691},[425,169036,1159],{"class":701},[425,169038,169039],{"class":435},"\"D:\u002Fdata\u002Fdata.txt\"",[425,169041,13434],{"class":701},[425,169043,147556],{"class":435},[425,169045,13434],{"class":701},[425,169047,147561],{"class":6216},[425,169049,1204],{"class":1155},[425,169051,147566],{"class":435},[425,169053,1165],{"class":701},[19,169055,169056],{},"Windows 路径建议写成：",[416,169058,169060],{"className":31133,"code":169059,"language":31135,"meta":395,"style":395},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[422,169061,169062],{"__ignoreMap":395},[425,169063,169064,169067,169069],{"class":427,"line":428},[425,169065,169066],{"class":701},"path ",[425,169068,1204],{"class":1155},[425,169070,169071],{"class":435}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,169073,169074],{},"或原始字符串：",[416,169076,169078],{"className":31133,"code":169077,"language":31135,"meta":395,"style":395},"path = r\"D:\\data\\data.txt\"\n",[422,169079,169080],{"__ignoreMap":395},[425,169081,169082,169084,169086,169088,169090,169093,169096,169099,169101,169103,169105,169108],{"class":427,"line":428},[425,169083,169066],{"class":701},[425,169085,1204],{"class":1155},[425,169087,18118],{"class":1155},[425,169089,1400],{"class":435},[425,169091,169092],{"class":48732},"D:",[425,169094,169095],{"class":691},"\\d",[425,169097,169098],{"class":48732},"ata",[425,169100,169095],{"class":691},[425,169102,169098],{"class":48732},[425,169104,1706],{"class":691},[425,169106,169107],{"class":48732},"txt",[425,169109,26124],{"class":435},[1099,169111,169113],{"id":169112},"_83-open函数","8.3 open函数",[19,169115,6181],{},[416,169117,169119],{"className":31133,"code":169118,"language":31135,"meta":395,"style":395},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[422,169120,169121],{"__ignoreMap":395},[425,169122,169123,169125,169127,169129,169132,169134,169136,169138],{"class":427,"line":428},[425,169124,46109],{"class":6216},[425,169126,14563],{"class":1155},[425,169128,147546],{"class":691},[425,169130,169131],{"class":701},"(文件路径, 打开模式, ",[425,169133,147561],{"class":6216},[425,169135,1204],{"class":1155},[425,169137,147566],{"class":435},[425,169139,1165],{"class":701},[19,169141,169142],{},"常见模式：",[35,169144,169145,169154],{},[38,169146,169147],{},[41,169148,169149,169152],{},[44,169150,169151],{},"模式",[44,169153,26860],{},[55,169155,169156,169165,169174,169183,169193],{},[41,169157,169158,169162],{},[60,169159,169160],{},[422,169161,1818],{},[60,169163,169164],{},"只读，文件不存在会报错",[41,169166,169167,169171],{},[60,169168,169169],{},[422,169170,1943],{},[60,169172,169173],{},"只写，文件不存在会创建，存在会清空",[41,169175,169176,169180],{},[60,169177,169178],{},[422,169179,22],{},[60,169181,169182],{},"追加，文件不存在会创建",[41,169184,169185,169190],{},[60,169186,169187],{},[422,169188,169189],{},"rb",[60,169191,169192],{},"二进制只读",[41,169194,169195,169200],{},[60,169196,169197],{},[422,169198,169199],{},"wb",[60,169201,169202],{},"二进制只写",[1099,169204,169206],{"id":169205},"_84-读取文件","8.4 读取文件",[14,169208,169210],{"id":169209},"_841-read","8.4.1 read",[19,169212,169213],{},"一次读取全部内容：",[416,169215,169217],{"className":31133,"code":169216,"language":31135,"meta":395,"style":395},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[422,169218,169219,169245,169257,169264],{"__ignoreMap":395},[425,169220,169221,169223,169225,169227,169229,169231,169233,169235,169237,169239,169241,169243],{"class":427,"line":428},[425,169222,46109],{"class":6216},[425,169224,14563],{"class":1155},[425,169226,147546],{"class":691},[425,169228,1159],{"class":701},[425,169230,147551],{"class":435},[425,169232,13434],{"class":701},[425,169234,147556],{"class":435},[425,169236,13434],{"class":701},[425,169238,147561],{"class":6216},[425,169240,1204],{"class":1155},[425,169242,147566],{"class":435},[425,169244,1165],{"class":701},[425,169246,169247,169250,169252,169254],{"class":427,"line":698},[425,169248,169249],{"class":701},"content ",[425,169251,1204],{"class":1155},[425,169253,148908],{"class":6216},[425,169255,169256],{"class":701},".read()\n",[425,169258,169259,169261],{"class":427,"line":710},[425,169260,31170],{"class":691},[425,169262,169263],{"class":701},"(content)\n",[425,169265,169266,169268],{"class":427,"line":721},[425,169267,46109],{"class":6216},[425,169269,169270],{"class":701},".close()\n",[19,169272,169273],{},"可以指定读取字符数：",[416,169275,169277],{"className":31133,"code":169276,"language":31135,"meta":395,"style":395},"content = file.read(10)\n",[422,169278,169279],{"__ignoreMap":395},[425,169280,169281,169283,169285,169287,169290,169292],{"class":427,"line":428},[425,169282,169249],{"class":701},[425,169284,1204],{"class":1155},[425,169286,148908],{"class":6216},[425,169288,169289],{"class":701},".read(",[425,169291,1594],{"class":691},[425,169293,1165],{"class":701},[14,169295,169297],{"id":169296},"_842-readline","8.4.2 readline",[19,169299,169300],{},"一次读取一行：",[416,169302,169304],{"className":31133,"code":169303,"language":31135,"meta":395,"style":395},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[422,169305,169306,169332,169336,169347,169354,169358],{"__ignoreMap":395},[425,169307,169308,169310,169312,169314,169316,169318,169320,169322,169324,169326,169328,169330],{"class":427,"line":428},[425,169309,46109],{"class":6216},[425,169311,14563],{"class":1155},[425,169313,147546],{"class":691},[425,169315,1159],{"class":701},[425,169317,147551],{"class":435},[425,169319,13434],{"class":701},[425,169321,147556],{"class":435},[425,169323,13434],{"class":701},[425,169325,147561],{"class":6216},[425,169327,1204],{"class":1155},[425,169329,147566],{"class":435},[425,169331,1165],{"class":701},[425,169333,169334],{"class":427,"line":698},[425,169335,3400],{"emptyLinePlaceholder":1084},[425,169337,169338,169340,169342,169344],{"class":427,"line":710},[425,169339,148007],{"class":701},[425,169341,1204],{"class":1155},[425,169343,148908],{"class":6216},[425,169345,169346],{"class":701},".readline()\n",[425,169348,169349,169351],{"class":427,"line":721},[425,169350,31170],{"class":691},[425,169352,169353],{"class":701},"(line)\n",[425,169355,169356],{"class":427,"line":735},[425,169357,3400],{"emptyLinePlaceholder":1084},[425,169359,169360,169362],{"class":427,"line":743},[425,169361,46109],{"class":6216},[425,169363,169270],{"class":701},[14,169365,169367],{"id":169366},"_843-readlines","8.4.3 readlines",[19,169369,169370],{},"读取所有行，返回列表：",[416,169372,169374],{"className":31133,"code":169373,"language":31135,"meta":395,"style":395},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[422,169375,169376,169402,169414,169421],{"__ignoreMap":395},[425,169377,169378,169380,169382,169384,169386,169388,169390,169392,169394,169396,169398,169400],{"class":427,"line":428},[425,169379,46109],{"class":6216},[425,169381,14563],{"class":1155},[425,169383,147546],{"class":691},[425,169385,1159],{"class":701},[425,169387,147551],{"class":435},[425,169389,13434],{"class":701},[425,169391,147556],{"class":435},[425,169393,13434],{"class":701},[425,169395,147561],{"class":6216},[425,169397,1204],{"class":1155},[425,169399,147566],{"class":435},[425,169401,1165],{"class":701},[425,169403,169404,169407,169409,169411],{"class":427,"line":698},[425,169405,169406],{"class":701},"lines ",[425,169408,1204],{"class":1155},[425,169410,148908],{"class":6216},[425,169412,169413],{"class":701},".readlines()\n",[425,169415,169416,169418],{"class":427,"line":710},[425,169417,31170],{"class":691},[425,169419,169420],{"class":701},"(lines)\n",[425,169422,169423,169425],{"class":427,"line":721},[425,169424,46109],{"class":6216},[425,169426,169270],{"class":701},[19,169428,169429,169430,169433],{},"每一行通常带有换行符，可以用 ",[422,169431,169432],{},"strip()"," 去掉：",[416,169435,169437],{"className":31133,"code":169436,"language":31135,"meta":395,"style":395},"for line in lines:\n    print(line.strip())\n",[422,169438,169439,169451],{"__ignoreMap":395},[425,169440,169441,169443,169446,169448],{"class":427,"line":428},[425,169442,4025],{"class":1155},[425,169444,169445],{"class":701}," line ",[425,169447,27034],{"class":1155},[425,169449,169450],{"class":701}," lines:\n",[425,169452,169453,169455],{"class":427,"line":698},[425,169454,32054],{"class":691},[425,169456,169457],{"class":701},"(line.strip())\n",[14,169459,169461],{"id":169460},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,169463,169464],{},"推荐读取大文件时使用：",[416,169466,169468],{"className":31133,"code":169467,"language":31135,"meta":395,"style":395},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[422,169469,169470,169496,169500,169512,169518,169522],{"__ignoreMap":395},[425,169471,169472,169474,169476,169478,169480,169482,169484,169486,169488,169490,169492,169494],{"class":427,"line":428},[425,169473,46109],{"class":6216},[425,169475,14563],{"class":1155},[425,169477,147546],{"class":691},[425,169479,1159],{"class":701},[425,169481,147551],{"class":435},[425,169483,13434],{"class":701},[425,169485,147556],{"class":435},[425,169487,13434],{"class":701},[425,169489,147561],{"class":6216},[425,169491,1204],{"class":1155},[425,169493,147566],{"class":435},[425,169495,1165],{"class":701},[425,169497,169498],{"class":427,"line":698},[425,169499,3400],{"emptyLinePlaceholder":1084},[425,169501,169502,169504,169506,169508,169510],{"class":427,"line":710},[425,169503,4025],{"class":1155},[425,169505,169445],{"class":701},[425,169507,27034],{"class":1155},[425,169509,148908],{"class":6216},[425,169511,4739],{"class":701},[425,169513,169514,169516],{"class":427,"line":721},[425,169515,32054],{"class":691},[425,169517,169457],{"class":701},[425,169519,169520],{"class":427,"line":735},[425,169521,3400],{"emptyLinePlaceholder":1084},[425,169523,169524,169526],{"class":427,"line":743},[425,169525,46109],{"class":6216},[425,169527,169270],{"class":701},[1099,169529,169531],{"id":169530},"_85-with语句","8.5 with语句",[19,169533,169534,169536],{},[422,169535,108588],{}," 会自动关闭文件，推荐使用。",[416,169538,169540],{"className":31133,"code":169539,"language":31135,"meta":395,"style":395},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[422,169541,169542,169572,169582],{"__ignoreMap":395},[425,169543,169544,169546,169548,169550,169552,169554,169556,169558,169560,169562,169564,169566,169568,169570],{"class":427,"line":428},[425,169545,108588],{"class":1155},[425,169547,147546],{"class":691},[425,169549,1159],{"class":701},[425,169551,147551],{"class":435},[425,169553,13434],{"class":701},[425,169555,147556],{"class":435},[425,169557,13434],{"class":701},[425,169559,147561],{"class":6216},[425,169561,1204],{"class":1155},[425,169563,147566],{"class":435},[425,169565,938],{"class":701},[425,169567,32138],{"class":1155},[425,169569,148908],{"class":6216},[425,169571,4739],{"class":701},[425,169573,169574,169576,169578,169580],{"class":427,"line":698},[425,169575,147578],{"class":701},[425,169577,1204],{"class":1155},[425,169579,148908],{"class":6216},[425,169581,169256],{"class":701},[425,169583,169584,169586],{"class":427,"line":710},[425,169585,32054],{"class":691},[425,169587,169263],{"class":701},[19,169589,169590],{},"等价于打开文件、读取、最后关闭，但更安全。",[1099,169592,169594],{"id":169593},"_86-写入文件","8.6 写入文件",[19,169596,169597,169599],{},[422,169598,1943],{}," 模式会清空原文件。",[416,169601,169603],{"className":31133,"code":169602,"language":31135,"meta":395,"style":395},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[422,169604,169605,169635,169652],{"__ignoreMap":395},[425,169606,169607,169609,169611,169613,169615,169617,169619,169621,169623,169625,169627,169629,169631,169633],{"class":427,"line":428},[425,169608,108588],{"class":1155},[425,169610,147546],{"class":691},[425,169612,1159],{"class":701},[425,169614,147551],{"class":435},[425,169616,13434],{"class":701},[425,169618,152731],{"class":435},[425,169620,13434],{"class":701},[425,169622,147561],{"class":6216},[425,169624,1204],{"class":1155},[425,169626,147566],{"class":435},[425,169628,938],{"class":701},[425,169630,32138],{"class":1155},[425,169632,148908],{"class":6216},[425,169634,4739],{"class":701},[425,169636,169637,169640,169643,169646,169648,169650],{"class":427,"line":698},[425,169638,169639],{"class":6216},"    file",[425,169641,169642],{"class":701},".write(",[425,169644,169645],{"class":435},"\"hello",[425,169647,157280],{"class":691},[425,169649,1400],{"class":435},[425,169651,1165],{"class":701},[425,169653,169654,169656,169658,169661,169663,169665],{"class":427,"line":710},[425,169655,169639],{"class":6216},[425,169657,169642],{"class":701},[425,169659,169660],{"class":435},"\"python",[425,169662,157280],{"class":691},[425,169664,1400],{"class":435},[425,169666,1165],{"class":701},[19,169668,169669],{},"写入多行：",[416,169671,169673],{"className":31133,"code":169672,"language":31135,"meta":395,"style":395},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[422,169674,169675,169710,169714,169745],{"__ignoreMap":395},[425,169676,169677,169679,169681,169683,169686,169688,169690,169692,169695,169697,169699,169701,169704,169706,169708],{"class":427,"line":428},[425,169678,169406],{"class":701},[425,169680,1204],{"class":1155},[425,169682,52981],{"class":701},[425,169684,169685],{"class":435},"\"小明,18",[425,169687,157280],{"class":691},[425,169689,1400],{"class":435},[425,169691,13434],{"class":701},[425,169693,169694],{"class":435},"\"小红,17",[425,169696,157280],{"class":691},[425,169698,1400],{"class":435},[425,169700,13434],{"class":701},[425,169702,169703],{"class":435},"\"小刚,19",[425,169705,157280],{"class":691},[425,169707,1400],{"class":435},[425,169709,34001],{"class":701},[425,169711,169712],{"class":427,"line":698},[425,169713,3400],{"emptyLinePlaceholder":1084},[425,169715,169716,169718,169720,169722,169725,169727,169729,169731,169733,169735,169737,169739,169741,169743],{"class":427,"line":710},[425,169717,108588],{"class":1155},[425,169719,147546],{"class":691},[425,169721,1159],{"class":701},[425,169723,169724],{"class":435},"\"students.txt\"",[425,169726,13434],{"class":701},[425,169728,152731],{"class":435},[425,169730,13434],{"class":701},[425,169732,147561],{"class":6216},[425,169734,1204],{"class":1155},[425,169736,147566],{"class":435},[425,169738,938],{"class":701},[425,169740,32138],{"class":1155},[425,169742,148908],{"class":6216},[425,169744,4739],{"class":701},[425,169746,169747,169749],{"class":427,"line":721},[425,169748,169639],{"class":6216},[425,169750,169751],{"class":701},".writelines(lines)\n",[1099,169753,169755],{"id":169754},"_87-追加文件","8.7 追加文件",[19,169757,169758,169760],{},[422,169759,22],{}," 模式不会清空原内容，而是在末尾追加。",[416,169762,169764],{"className":31133,"code":169763,"language":31135,"meta":395,"style":395},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[422,169765,169766,169797],{"__ignoreMap":395},[425,169767,169768,169770,169772,169774,169777,169779,169781,169783,169785,169787,169789,169791,169793,169795],{"class":427,"line":428},[425,169769,108588],{"class":1155},[425,169771,147546],{"class":691},[425,169773,1159],{"class":701},[425,169775,169776],{"class":435},"\"log.txt\"",[425,169778,13434],{"class":701},[425,169780,166080],{"class":435},[425,169782,13434],{"class":701},[425,169784,147561],{"class":6216},[425,169786,1204],{"class":1155},[425,169788,147566],{"class":435},[425,169790,938],{"class":701},[425,169792,32138],{"class":1155},[425,169794,148908],{"class":6216},[425,169796,4739],{"class":701},[425,169798,169799,169801,169803,169806,169808,169810],{"class":427,"line":698},[425,169800,169639],{"class":6216},[425,169802,169642],{"class":701},[425,169804,169805],{"class":435},"\"程序启动",[425,169807,157280],{"class":691},[425,169809,1400],{"class":435},[425,169811,1165],{"class":701},[19,169813,169814],{},"日志类文件常用追加模式。",[1099,169816,169818],{"id":169817},"_88-文件编码","8.8 文件编码",[19,169820,169821],{},"编码决定文字如何保存为字节。",[19,169823,169824],{},"常见编码：",[972,169826,169827,169830],{},[450,169828,169829],{},"UTF-8：推荐。",[450,169831,169832],{},"GBK：部分 Windows 中文文件常见。",[19,169834,169835],{},"读取文件乱码时，可以尝试：",[416,169837,169839],{"className":31133,"code":169838,"language":31135,"meta":395,"style":395},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[422,169840,169841,169872],{"__ignoreMap":395},[425,169842,169843,169845,169847,169849,169851,169853,169855,169857,169859,169861,169864,169866,169868,169870],{"class":427,"line":428},[425,169844,108588],{"class":1155},[425,169846,147546],{"class":691},[425,169848,1159],{"class":701},[425,169850,147551],{"class":435},[425,169852,13434],{"class":701},[425,169854,147556],{"class":435},[425,169856,13434],{"class":701},[425,169858,147561],{"class":6216},[425,169860,1204],{"class":1155},[425,169862,169863],{"class":435},"\"gbk\"",[425,169865,938],{"class":701},[425,169867,32138],{"class":1155},[425,169869,148908],{"class":6216},[425,169871,4739],{"class":701},[425,169873,169874,169876,169878,169880],{"class":427,"line":698},[425,169875,147578],{"class":701},[425,169877,1204],{"class":1155},[425,169879,148908],{"class":6216},[425,169881,169256],{"class":701},[19,169883,169884],{},"写文件时建议统一 UTF-8：",[416,169886,169888],{"className":31133,"code":169887,"language":31135,"meta":395,"style":395},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[422,169889,169890,169920],{"__ignoreMap":395},[425,169891,169892,169894,169896,169898,169900,169902,169904,169906,169908,169910,169912,169914,169916,169918],{"class":427,"line":428},[425,169893,108588],{"class":1155},[425,169895,147546],{"class":691},[425,169897,1159],{"class":701},[425,169899,147551],{"class":435},[425,169901,13434],{"class":701},[425,169903,152731],{"class":435},[425,169905,13434],{"class":701},[425,169907,147561],{"class":6216},[425,169909,1204],{"class":1155},[425,169911,147566],{"class":435},[425,169913,938],{"class":701},[425,169915,32138],{"class":1155},[425,169917,148908],{"class":6216},[425,169919,4739],{"class":701},[425,169921,169922,169924,169926,169929],{"class":427,"line":698},[425,169923,169639],{"class":6216},[425,169925,169642],{"class":701},[425,169927,169928],{"class":435},"\"中文内容\"",[425,169930,1165],{"class":701},[1099,169932,169934],{"id":169933},"_89-pathlib","8.9 pathlib",[19,169936,169937,169940],{},[422,169938,169939],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[416,169942,169944],{"className":31133,"code":169943,"language":31135,"meta":395,"style":395},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[422,169945,169946,169956,169960,169978],{"__ignoreMap":395},[425,169947,169948,169950,169952,169954],{"class":427,"line":428},[425,169949,31492],{"class":1155},[425,169951,109066],{"class":701},[425,169953,31147],{"class":1155},[425,169955,109071],{"class":701},[425,169957,169958],{"class":427,"line":698},[425,169959,3400],{"emptyLinePlaceholder":1084},[425,169961,169962,169964,169966,169968,169971,169973,169975],{"class":427,"line":710},[425,169963,169066],{"class":701},[425,169965,1204],{"class":1155},[425,169967,109300],{"class":701},[425,169969,169970],{"class":435},"\"data\"",[425,169972,938],{"class":701},[425,169974,1732],{"class":1155},[425,169976,169977],{"class":435}," \"students.txt\"\n",[425,169979,169980,169982],{"class":427,"line":721},[425,169981,31170],{"class":691},[425,169983,169984],{"class":701},"(path)\n",[19,169986,169987],{},"创建目录：",[416,169989,169991],{"className":31133,"code":169990,"language":31135,"meta":395,"style":395},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[422,169992,169993,170003,170007,170020],{"__ignoreMap":395},[425,169994,169995,169997,169999,170001],{"class":427,"line":428},[425,169996,31492],{"class":1155},[425,169998,109066],{"class":701},[425,170000,31147],{"class":1155},[425,170002,109071],{"class":701},[425,170004,170005],{"class":427,"line":698},[425,170006,3400],{"emptyLinePlaceholder":1084},[425,170008,170009,170012,170014,170016,170018],{"class":427,"line":710},[425,170010,170011],{"class":701},"data_dir ",[425,170013,1204],{"class":1155},[425,170015,109300],{"class":701},[425,170017,169970],{"class":435},[425,170019,1165],{"class":701},[425,170021,170022,170025,170028,170030,170032],{"class":427,"line":721},[425,170023,170024],{"class":701},"data_dir.mkdir(",[425,170026,170027],{"class":6216},"exist_ok",[425,170029,1204],{"class":1155},[425,170031,32231],{"class":691},[425,170033,1165],{"class":701},[19,170035,170036],{},"判断文件是否存在：",[416,170038,170040],{"className":31133,"code":170039,"language":31135,"meta":395,"style":395},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[422,170041,170042,170055,170059,170066],{"__ignoreMap":395},[425,170043,170044,170046,170048,170050,170053],{"class":427,"line":428},[425,170045,169066],{"class":701},[425,170047,1204],{"class":1155},[425,170049,109300],{"class":701},[425,170051,170052],{"class":435},"\"data\u002Fstudents.txt\"",[425,170054,1165],{"class":701},[425,170056,170057],{"class":427,"line":698},[425,170058,3400],{"emptyLinePlaceholder":1084},[425,170060,170061,170063],{"class":427,"line":710},[425,170062,2544],{"class":1155},[425,170064,170065],{"class":701}," path.exists():\n",[425,170067,170068,170070,170072,170075],{"class":427,"line":721},[425,170069,32054],{"class":691},[425,170071,1159],{"class":701},[425,170073,170074],{"class":435},"\"文件存在\"",[425,170076,1165],{"class":701},[19,170078,170079],{},"读写文本：",[416,170081,170083],{"className":31133,"code":170082,"language":31135,"meta":395,"style":395},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[422,170084,170085,170097,170101,170118,170135],{"__ignoreMap":395},[425,170086,170087,170089,170091,170093,170095],{"class":427,"line":428},[425,170088,169066],{"class":701},[425,170090,1204],{"class":1155},[425,170092,109300],{"class":701},[425,170094,147551],{"class":435},[425,170096,1165],{"class":701},[425,170098,170099],{"class":427,"line":698},[425,170100,3400],{"emptyLinePlaceholder":1084},[425,170102,170103,170106,170108,170110,170112,170114,170116],{"class":427,"line":710},[425,170104,170105],{"class":701},"path.write_text(",[425,170107,146631],{"class":435},[425,170109,13434],{"class":701},[425,170111,147561],{"class":6216},[425,170113,1204],{"class":1155},[425,170115,147566],{"class":435},[425,170117,1165],{"class":701},[425,170119,170120,170122,170124,170127,170129,170131,170133],{"class":427,"line":721},[425,170121,169249],{"class":701},[425,170123,1204],{"class":1155},[425,170125,170126],{"class":701}," path.read_text(",[425,170128,147561],{"class":6216},[425,170130,1204],{"class":1155},[425,170132,147566],{"class":435},[425,170134,1165],{"class":701},[425,170136,170137,170139],{"class":427,"line":735},[425,170138,31170],{"class":691},[425,170140,169263],{"class":701},[1099,170142,170144],{"id":170143},"_810-json文件","8.10 JSON文件",[19,170146,170147],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[416,170149,170151],{"className":31133,"code":170150,"language":31135,"meta":395,"style":395},"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",[422,170152,170153,170159,170163,170171,170181,170191,170199,170203,170207,170232],{"__ignoreMap":395},[425,170154,170155,170157],{"class":427,"line":428},[425,170156,31147],{"class":1155},[425,170158,147846],{"class":701},[425,170160,170161],{"class":427,"line":698},[425,170162,3400],{"emptyLinePlaceholder":1084},[425,170164,170165,170167,170169],{"class":427,"line":710},[425,170166,150236],{"class":701},[425,170168,1204],{"class":1155},[425,170170,16569],{"class":701},[425,170172,170173,170175,170177,170179],{"class":427,"line":721},[425,170174,147775],{"class":435},[425,170176,52192],{"class":701},[425,170178,150643],{"class":435},[425,170180,32221],{"class":701},[425,170182,170183,170185,170187,170189],{"class":427,"line":735},[425,170184,165292],{"class":435},[425,170186,52192],{"class":701},[425,170188,1798],{"class":691},[425,170190,32221],{"class":701},[425,170192,170193,170195,170197],{"class":427,"line":743},[425,170194,165303],{"class":435},[425,170196,52192],{"class":701},[425,170198,165308],{"class":691},[425,170200,170201],{"class":427,"line":751},[425,170202,2578],{"class":701},[425,170204,170205],{"class":427,"line":759},[425,170206,3400],{"emptyLinePlaceholder":1084},[425,170208,170209,170211,170213,170216,170218,170220,170222,170224,170226,170228,170230],{"class":427,"line":770},[425,170210,157199],{"class":701},[425,170212,1204],{"class":1155},[425,170214,170215],{"class":701}," json.dumps(student, ",[425,170217,147892],{"class":6216},[425,170219,1204],{"class":1155},[425,170221,34742],{"class":691},[425,170223,13434],{"class":701},[425,170225,152767],{"class":6216},[425,170227,1204],{"class":1155},[425,170229,1235],{"class":691},[425,170231,1165],{"class":701},[425,170233,170234,170236],{"class":427,"line":780},[425,170235,31170],{"class":691},[425,170237,164826],{"class":701},[19,170239,170240],{},"写入 JSON 文件：",[416,170242,170244],{"className":31133,"code":170243,"language":31135,"meta":395,"style":395},"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",[422,170245,170246,170252,170256,170264,170292,170320,170324,170328,170358],{"__ignoreMap":395},[425,170247,170248,170250],{"class":427,"line":428},[425,170249,31147],{"class":1155},[425,170251,147846],{"class":701},[425,170253,170254],{"class":427,"line":698},[425,170255,3400],{"emptyLinePlaceholder":1084},[425,170257,170258,170260,170262],{"class":427,"line":710},[425,170259,160471],{"class":701},[425,170261,1204],{"class":1155},[425,170263,56202],{"class":701},[425,170265,170266,170268,170270,170272,170274,170276,170278,170280,170282,170284,170286,170288,170290],{"class":427,"line":721},[425,170267,149140],{"class":701},[425,170269,63434],{"class":435},[425,170271,52192],{"class":701},[425,170273,150643],{"class":435},[425,170275,13434],{"class":701},[425,170277,69879],{"class":435},[425,170279,52192],{"class":701},[425,170281,1798],{"class":691},[425,170283,13434],{"class":701},[425,170285,152227],{"class":435},[425,170287,52192],{"class":701},[425,170289,2136],{"class":691},[425,170291,5930],{"class":701},[425,170293,170294,170296,170298,170300,170302,170304,170306,170308,170310,170312,170314,170316,170318],{"class":427,"line":735},[425,170295,149140],{"class":701},[425,170297,63434],{"class":435},[425,170299,52192],{"class":701},[425,170301,151691],{"class":435},[425,170303,13434],{"class":701},[425,170305,69879],{"class":435},[425,170307,52192],{"class":701},[425,170309,1773],{"class":691},[425,170311,13434],{"class":701},[425,170313,152227],{"class":435},[425,170315,52192],{"class":701},[425,170317,1959],{"class":691},[425,170319,5930],{"class":701},[425,170321,170322],{"class":427,"line":743},[425,170323,34001],{"class":701},[425,170325,170326],{"class":427,"line":751},[425,170327,3400],{"emptyLinePlaceholder":1084},[425,170329,170330,170332,170334,170336,170338,170340,170342,170344,170346,170348,170350,170352,170354,170356],{"class":427,"line":759},[425,170331,108588],{"class":1155},[425,170333,147546],{"class":691},[425,170335,1159],{"class":701},[425,170337,152586],{"class":435},[425,170339,13434],{"class":701},[425,170341,152731],{"class":435},[425,170343,13434],{"class":701},[425,170345,147561],{"class":6216},[425,170347,1204],{"class":1155},[425,170349,147566],{"class":435},[425,170351,938],{"class":701},[425,170353,32138],{"class":1155},[425,170355,148908],{"class":6216},[425,170357,4739],{"class":701},[425,170359,170360,170363,170365,170367,170369,170371,170373,170375,170377,170379,170381],{"class":427,"line":770},[425,170361,170362],{"class":701},"    json.dump(students, ",[425,170364,46109],{"class":6216},[425,170366,13434],{"class":701},[425,170368,147892],{"class":6216},[425,170370,1204],{"class":1155},[425,170372,34742],{"class":691},[425,170374,13434],{"class":701},[425,170376,152767],{"class":6216},[425,170378,1204],{"class":1155},[425,170380,1235],{"class":691},[425,170382,1165],{"class":701},[19,170384,170385],{},"读取 JSON 文件：",[416,170387,170389],{"className":31133,"code":170388,"language":31135,"meta":395,"style":395},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[422,170390,170391,170397,170401,170431,170443,170447],{"__ignoreMap":395},[425,170392,170393,170395],{"class":427,"line":428},[425,170394,31147],{"class":1155},[425,170396,147846],{"class":701},[425,170398,170399],{"class":427,"line":698},[425,170400,3400],{"emptyLinePlaceholder":1084},[425,170402,170403,170405,170407,170409,170411,170413,170415,170417,170419,170421,170423,170425,170427,170429],{"class":427,"line":710},[425,170404,108588],{"class":1155},[425,170406,147546],{"class":691},[425,170408,1159],{"class":701},[425,170410,152586],{"class":435},[425,170412,13434],{"class":701},[425,170414,147556],{"class":435},[425,170416,13434],{"class":701},[425,170418,147561],{"class":6216},[425,170420,1204],{"class":1155},[425,170422,147566],{"class":435},[425,170424,938],{"class":701},[425,170426,32138],{"class":1155},[425,170428,148908],{"class":6216},[425,170430,4739],{"class":701},[425,170432,170433,170435,170437,170439,170441],{"class":427,"line":721},[425,170434,153792],{"class":701},[425,170436,1204],{"class":1155},[425,170438,148919],{"class":701},[425,170440,46109],{"class":6216},[425,170442,1165],{"class":701},[425,170444,170445],{"class":427,"line":735},[425,170446,3400],{"emptyLinePlaceholder":1084},[425,170448,170449,170451],{"class":427,"line":743},[425,170450,31170],{"class":691},[425,170452,165750],{"class":701},[1099,170454,170456],{"id":170455},"_811-csv文件","8.11 CSV文件",[19,170458,170459],{},"CSV 是逗号分隔值，常用于表格数据。",[19,170461,170462],{},"写入 CSV：",[416,170464,170466],{"className":31133,"code":170465,"language":31135,"meta":395,"style":395},"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",[422,170467,170468,170475,170479,170487,170505,170521,170537,170541,170545,170585,170599],{"__ignoreMap":395},[425,170469,170470,170472],{"class":427,"line":428},[425,170471,31147],{"class":1155},[425,170473,170474],{"class":701}," csv\n",[425,170476,170477],{"class":427,"line":698},[425,170478,3400],{"emptyLinePlaceholder":1084},[425,170480,170481,170483,170485],{"class":427,"line":710},[425,170482,160471],{"class":701},[425,170484,1204],{"class":1155},[425,170486,56202],{"class":701},[425,170488,170489,170492,170494,170496,170498,170500,170503],{"class":427,"line":721},[425,170490,170491],{"class":701},"    [",[425,170493,73854],{"class":435},[425,170495,13434],{"class":701},[425,170497,73887],{"class":435},[425,170499,13434],{"class":701},[425,170501,170502],{"class":435},"\"成绩\"",[425,170504,88591],{"class":701},[425,170506,170507,170509,170511,170513,170515,170517,170519],{"class":427,"line":735},[425,170508,170491],{"class":701},[425,170510,150643],{"class":435},[425,170512,13434],{"class":701},[425,170514,1798],{"class":691},[425,170516,13434],{"class":701},[425,170518,2136],{"class":691},[425,170520,88591],{"class":701},[425,170522,170523,170525,170527,170529,170531,170533,170535],{"class":427,"line":743},[425,170524,170491],{"class":701},[425,170526,151691],{"class":435},[425,170528,13434],{"class":701},[425,170530,1773],{"class":691},[425,170532,13434],{"class":701},[425,170534,1959],{"class":691},[425,170536,88591],{"class":701},[425,170538,170539],{"class":427,"line":751},[425,170540,34001],{"class":701},[425,170542,170543],{"class":427,"line":759},[425,170544,3400],{"emptyLinePlaceholder":1084},[425,170546,170547,170549,170551,170553,170556,170558,170560,170562,170564,170566,170568,170570,170573,170575,170577,170579,170581,170583],{"class":427,"line":770},[425,170548,108588],{"class":1155},[425,170550,147546],{"class":691},[425,170552,1159],{"class":701},[425,170554,170555],{"class":435},"\"students.csv\"",[425,170557,13434],{"class":701},[425,170559,152731],{"class":435},[425,170561,13434],{"class":701},[425,170563,147561],{"class":6216},[425,170565,1204],{"class":1155},[425,170567,147566],{"class":435},[425,170569,13434],{"class":701},[425,170571,170572],{"class":6216},"newline",[425,170574,1204],{"class":1155},[425,170576,8652],{"class":435},[425,170578,938],{"class":701},[425,170580,32138],{"class":1155},[425,170582,148908],{"class":6216},[425,170584,4739],{"class":701},[425,170586,170587,170590,170592,170595,170597],{"class":427,"line":780},[425,170588,170589],{"class":701},"    writer ",[425,170591,1204],{"class":1155},[425,170593,170594],{"class":701}," csv.writer(",[425,170596,46109],{"class":6216},[425,170598,1165],{"class":701},[425,170600,170601],{"class":427,"line":790},[425,170602,170603],{"class":701},"    writer.writerows(students)\n",[19,170605,170606],{},"读取 CSV：",[416,170608,170610],{"className":31133,"code":170609,"language":31135,"meta":395,"style":395},"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",[422,170611,170612,170618,170622,170652,170666,170678],{"__ignoreMap":395},[425,170613,170614,170616],{"class":427,"line":428},[425,170615,31147],{"class":1155},[425,170617,170474],{"class":701},[425,170619,170620],{"class":427,"line":698},[425,170621,3400],{"emptyLinePlaceholder":1084},[425,170623,170624,170626,170628,170630,170632,170634,170636,170638,170640,170642,170644,170646,170648,170650],{"class":427,"line":710},[425,170625,108588],{"class":1155},[425,170627,147546],{"class":691},[425,170629,1159],{"class":701},[425,170631,170555],{"class":435},[425,170633,13434],{"class":701},[425,170635,147556],{"class":435},[425,170637,13434],{"class":701},[425,170639,147561],{"class":6216},[425,170641,1204],{"class":1155},[425,170643,147566],{"class":435},[425,170645,938],{"class":701},[425,170647,32138],{"class":1155},[425,170649,148908],{"class":6216},[425,170651,4739],{"class":701},[425,170653,170654,170657,170659,170662,170664],{"class":427,"line":721},[425,170655,170656],{"class":701},"    reader ",[425,170658,1204],{"class":1155},[425,170660,170661],{"class":701}," csv.reader(",[425,170663,46109],{"class":6216},[425,170665,1165],{"class":701},[425,170667,170668,170670,170673,170675],{"class":427,"line":735},[425,170669,4201],{"class":1155},[425,170671,170672],{"class":701}," row ",[425,170674,27034],{"class":1155},[425,170676,170677],{"class":701}," reader:\n",[425,170679,170680,170682],{"class":427,"line":743},[425,170681,33206],{"class":691},[425,170683,170684],{"class":701},"(row)\n",[19,170686,170687],{},"使用字典写入：",[416,170689,170691],{"className":31133,"code":170690,"language":31135,"meta":395,"style":395},"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",[422,170692,170693,170699,170703,170711,170739,170767,170771,170775,170813,170834,170855,170860],{"__ignoreMap":395},[425,170694,170695,170697],{"class":427,"line":428},[425,170696,31147],{"class":1155},[425,170698,170474],{"class":701},[425,170700,170701],{"class":427,"line":698},[425,170702,3400],{"emptyLinePlaceholder":1084},[425,170704,170705,170707,170709],{"class":427,"line":710},[425,170706,160471],{"class":701},[425,170708,1204],{"class":1155},[425,170710,56202],{"class":701},[425,170712,170713,170715,170717,170719,170721,170723,170725,170727,170729,170731,170733,170735,170737],{"class":427,"line":721},[425,170714,149140],{"class":701},[425,170716,63434],{"class":435},[425,170718,52192],{"class":701},[425,170720,150643],{"class":435},[425,170722,13434],{"class":701},[425,170724,69879],{"class":435},[425,170726,52192],{"class":701},[425,170728,1798],{"class":691},[425,170730,13434],{"class":701},[425,170732,152227],{"class":435},[425,170734,52192],{"class":701},[425,170736,2136],{"class":691},[425,170738,5930],{"class":701},[425,170740,170741,170743,170745,170747,170749,170751,170753,170755,170757,170759,170761,170763,170765],{"class":427,"line":735},[425,170742,149140],{"class":701},[425,170744,63434],{"class":435},[425,170746,52192],{"class":701},[425,170748,151691],{"class":435},[425,170750,13434],{"class":701},[425,170752,69879],{"class":435},[425,170754,52192],{"class":701},[425,170756,1773],{"class":691},[425,170758,13434],{"class":701},[425,170760,152227],{"class":435},[425,170762,52192],{"class":701},[425,170764,1959],{"class":691},[425,170766,5930],{"class":701},[425,170768,170769],{"class":427,"line":743},[425,170770,34001],{"class":701},[425,170772,170773],{"class":427,"line":751},[425,170774,3400],{"emptyLinePlaceholder":1084},[425,170776,170777,170779,170781,170783,170785,170787,170789,170791,170793,170795,170797,170799,170801,170803,170805,170807,170809,170811],{"class":427,"line":759},[425,170778,108588],{"class":1155},[425,170780,147546],{"class":691},[425,170782,1159],{"class":701},[425,170784,170555],{"class":435},[425,170786,13434],{"class":701},[425,170788,152731],{"class":435},[425,170790,13434],{"class":701},[425,170792,147561],{"class":6216},[425,170794,1204],{"class":1155},[425,170796,147566],{"class":435},[425,170798,13434],{"class":701},[425,170800,170572],{"class":6216},[425,170802,1204],{"class":1155},[425,170804,8652],{"class":435},[425,170806,938],{"class":701},[425,170808,32138],{"class":1155},[425,170810,148908],{"class":6216},[425,170812,4739],{"class":701},[425,170814,170815,170818,170820,170822,170824,170826,170828,170830,170832],{"class":427,"line":770},[425,170816,170817],{"class":701},"    fieldnames ",[425,170819,1204],{"class":1155},[425,170821,52981],{"class":701},[425,170823,63434],{"class":435},[425,170825,13434],{"class":701},[425,170827,69879],{"class":435},[425,170829,13434],{"class":701},[425,170831,152227],{"class":435},[425,170833,34001],{"class":701},[425,170835,170836,170838,170840,170843,170845,170847,170850,170852],{"class":427,"line":780},[425,170837,170589],{"class":701},[425,170839,1204],{"class":1155},[425,170841,170842],{"class":701}," csv.DictWriter(",[425,170844,46109],{"class":6216},[425,170846,13434],{"class":701},[425,170848,170849],{"class":6216},"fieldnames",[425,170851,1204],{"class":1155},[425,170853,170854],{"class":701},"fieldnames)\n",[425,170856,170857],{"class":427,"line":790},[425,170858,170859],{"class":701},"    writer.writeheader()\n",[425,170861,170862],{"class":427,"line":805},[425,170863,170603],{"class":701},[1099,170865,170867],{"id":170866},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,170869,124047],{},[972,170871,170872,170875,170878],{},[450,170873,170874],{},"读取文本文件。",[450,170876,170877],{},"统计每个单词出现次数。",[450,170879,170880],{},"输出出现次数最多的前 10 个单词。",[19,170882,11034],{},[416,170884,170886],{"className":31133,"code":170885,"language":31135,"meta":395,"style":395},"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",[422,170887,170888,170898,170902,170915,170931,170935,170945,170954,170958,170970,170990,170999,171003,171021,171025,171055,171059,171075],{"__ignoreMap":395},[425,170889,170890,170892,170894,170896],{"class":427,"line":428},[425,170891,31492],{"class":1155},[425,170893,109066],{"class":701},[425,170895,31147],{"class":1155},[425,170897,109071],{"class":701},[425,170899,170900],{"class":427,"line":698},[425,170901,3400],{"emptyLinePlaceholder":1084},[425,170903,170904,170906,170908,170910,170913],{"class":427,"line":710},[425,170905,169066],{"class":701},[425,170907,1204],{"class":1155},[425,170909,109300],{"class":701},[425,170911,170912],{"class":435},"\"article.txt\"",[425,170914,1165],{"class":701},[425,170916,170917,170919,170921,170923,170925,170927,170929],{"class":427,"line":721},[425,170918,169249],{"class":701},[425,170920,1204],{"class":1155},[425,170922,170126],{"class":701},[425,170924,147561],{"class":6216},[425,170926,1204],{"class":1155},[425,170928,147566],{"class":435},[425,170930,1165],{"class":701},[425,170932,170933],{"class":427,"line":735},[425,170934,3400],{"emptyLinePlaceholder":1084},[425,170936,170937,170940,170942],{"class":427,"line":743},[425,170938,170939],{"class":701},"words ",[425,170941,1204],{"class":1155},[425,170943,170944],{"class":701}," content.lower().split()\n",[425,170946,170947,170950,170952],{"class":427,"line":751},[425,170948,170949],{"class":701},"counter ",[425,170951,1204],{"class":1155},[425,170953,88623],{"class":701},[425,170955,170956],{"class":427,"line":759},[425,170957,3400],{"emptyLinePlaceholder":1084},[425,170959,170960,170962,170965,170967],{"class":427,"line":770},[425,170961,4025],{"class":1155},[425,170963,170964],{"class":701}," word ",[425,170966,27034],{"class":1155},[425,170968,170969],{"class":701}," words:\n",[425,170971,170972,170975,170977,170980,170983,170985,170988],{"class":427,"line":780},[425,170973,170974],{"class":701},"    word ",[425,170976,1204],{"class":1155},[425,170978,170979],{"class":701}," word.strip(",[425,170981,170982],{"class":435},"\".,!?;:",[425,170984,157250],{"class":691},[425,170986,170987],{"class":435},"'()[]\"",[425,170989,1165],{"class":701},[425,170991,170992,170994,170996],{"class":427,"line":790},[425,170993,4101],{"class":1155},[425,170995,39685],{"class":1155},[425,170997,170998],{"class":701}," word:\n",[425,171000,171001],{"class":427,"line":805},[425,171002,149267],{"class":1155},[425,171004,171005,171008,171010,171013,171015,171017,171019],{"class":427,"line":818},[425,171006,171007],{"class":701},"    counter[word] ",[425,171009,1204],{"class":1155},[425,171011,171012],{"class":701}," counter.get(word, ",[425,171014,1341],{"class":691},[425,171016,938],{"class":701},[425,171018,1629],{"class":1155},[425,171020,56454],{"class":691},[425,171022,171023],{"class":427,"line":831},[425,171024,3400],{"emptyLinePlaceholder":1084},[425,171026,171027,171030,171032,171034,171037,171039,171041,171043,171045,171047,171049,171051,171053],{"class":427,"line":841},[425,171028,171029],{"class":701},"items ",[425,171031,1204],{"class":1155},[425,171033,164359],{"class":691},[425,171035,171036],{"class":701},"(counter.items(), ",[425,171038,154701],{"class":6216},[425,171040,154704],{"class":1155},[425,171042,154707],{"class":701},[425,171044,1367],{"class":691},[425,171046,112957],{"class":701},[425,171048,164283],{"class":6216},[425,171050,1204],{"class":1155},[425,171052,32231],{"class":691},[425,171054,1165],{"class":701},[425,171056,171057],{"class":427,"line":852},[425,171058,3400],{"emptyLinePlaceholder":1084},[425,171060,171061,171063,171066,171068,171071,171073],{"class":427,"line":862},[425,171062,4025],{"class":1155},[425,171064,171065],{"class":701}," word, count ",[425,171067,27034],{"class":1155},[425,171069,171070],{"class":701}," items[:",[425,171072,1594],{"class":691},[425,171074,166510],{"class":701},[425,171076,171077,171079],{"class":427,"line":878},[425,171078,32054],{"class":691},[425,171080,171081],{"class":701},"(word, count)\n",[1099,171083,171085],{"id":171084},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[416,171087,171089],{"className":31133,"code":171088,"language":31135,"meta":395,"style":395},"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",[422,171090,171091,171097,171107,171111,171123,171127,171131,171139,171149,171155,171159,171189,171199,171203,171207,171215,171245,171269,171273,171277,171285,171314,171319],{"__ignoreMap":395},[425,171092,171093,171095],{"class":427,"line":428},[425,171094,31147],{"class":1155},[425,171096,147846],{"class":701},[425,171098,171099,171101,171103,171105],{"class":427,"line":698},[425,171100,31492],{"class":1155},[425,171102,109066],{"class":701},[425,171104,31147],{"class":1155},[425,171106,109071],{"class":701},[425,171108,171109],{"class":427,"line":710},[425,171110,3400],{"emptyLinePlaceholder":1084},[425,171112,171113,171115,171117,171119,171121],{"class":427,"line":721},[425,171114,152579],{"class":691},[425,171116,14563],{"class":1155},[425,171118,109300],{"class":701},[425,171120,152586],{"class":435},[425,171122,1165],{"class":701},[425,171124,171125],{"class":427,"line":735},[425,171126,3400],{"emptyLinePlaceholder":1084},[425,171128,171129],{"class":427,"line":743},[425,171130,3400],{"emptyLinePlaceholder":1084},[425,171132,171133,171135,171137],{"class":427,"line":751},[425,171134,32702],{"class":1155},[425,171136,152603],{"class":431},[425,171138,32708],{"class":701},[425,171140,171141,171143,171145,171147],{"class":427,"line":759},[425,171142,4101],{"class":1155},[425,171144,39685],{"class":1155},[425,171146,152614],{"class":691},[425,171148,152617],{"class":701},[425,171150,171151,171153],{"class":427,"line":770},[425,171152,15749],{"class":1155},[425,171154,52593],{"class":701},[425,171156,171157],{"class":427,"line":780},[425,171158,3400],{"emptyLinePlaceholder":1084},[425,171160,171161,171163,171165,171167,171169,171171,171173,171175,171177,171179,171181,171183,171185,171187],{"class":427,"line":790},[425,171162,34933],{"class":1155},[425,171164,147546],{"class":691},[425,171166,1159],{"class":701},[425,171168,152579],{"class":691},[425,171170,13434],{"class":701},[425,171172,147556],{"class":435},[425,171174,13434],{"class":701},[425,171176,147561],{"class":6216},[425,171178,1204],{"class":1155},[425,171180,147566],{"class":435},[425,171182,938],{"class":701},[425,171184,32138],{"class":1155},[425,171186,148908],{"class":6216},[425,171188,4739],{"class":701},[425,171190,171191,171193,171195,171197],{"class":427,"line":805},[425,171192,15749],{"class":1155},[425,171194,148919],{"class":701},[425,171196,46109],{"class":6216},[425,171198,1165],{"class":701},[425,171200,171201],{"class":427,"line":818},[425,171202,3400],{"emptyLinePlaceholder":1084},[425,171204,171205],{"class":427,"line":831},[425,171206,3400],{"emptyLinePlaceholder":1084},[425,171208,171209,171211,171213],{"class":427,"line":841},[425,171210,32702],{"class":1155},[425,171212,152713],{"class":431},[425,171214,152716],{"class":701},[425,171216,171217,171219,171221,171223,171225,171227,171229,171231,171233,171235,171237,171239,171241,171243],{"class":427,"line":852},[425,171218,34933],{"class":1155},[425,171220,147546],{"class":691},[425,171222,1159],{"class":701},[425,171224,152579],{"class":691},[425,171226,13434],{"class":701},[425,171228,152731],{"class":435},[425,171230,13434],{"class":701},[425,171232,147561],{"class":6216},[425,171234,1204],{"class":1155},[425,171236,147566],{"class":435},[425,171238,938],{"class":701},[425,171240,32138],{"class":1155},[425,171242,148908],{"class":6216},[425,171244,4739],{"class":701},[425,171246,171247,171249,171251,171253,171255,171257,171259,171261,171263,171265,171267],{"class":427,"line":862},[425,171248,152752],{"class":701},[425,171250,46109],{"class":6216},[425,171252,13434],{"class":701},[425,171254,147892],{"class":6216},[425,171256,1204],{"class":1155},[425,171258,34742],{"class":691},[425,171260,13434],{"class":701},[425,171262,152767],{"class":6216},[425,171264,1204],{"class":1155},[425,171266,1235],{"class":691},[425,171268,1165],{"class":701},[425,171270,171271],{"class":427,"line":878},[425,171272,3400],{"emptyLinePlaceholder":1084},[425,171274,171275],{"class":427,"line":914},[425,171276,3400],{"emptyLinePlaceholder":1084},[425,171278,171279,171281,171283],{"class":427,"line":943},[425,171280,160471],{"class":701},[425,171282,1204],{"class":1155},[425,171284,153797],{"class":701},[425,171286,171287,171290,171292,171294,171296,171298,171300,171302,171304,171306,171308,171310,171312],{"class":427,"line":956},[425,171288,171289],{"class":701},"students.append({",[425,171291,63434],{"class":435},[425,171293,52192],{"class":701},[425,171295,150643],{"class":435},[425,171297,13434],{"class":701},[425,171299,69879],{"class":435},[425,171301,52192],{"class":701},[425,171303,1798],{"class":691},[425,171305,13434],{"class":701},[425,171307,152227],{"class":435},[425,171309,52192],{"class":701},[425,171311,2136],{"class":691},[425,171313,165907],{"class":701},[425,171315,171316],{"class":427,"line":964},[425,171317,171318],{"class":701},"save_students(students)\n",[425,171320,171321,171323,171325,171328],{"class":427,"line":2733},[425,171322,31170],{"class":691},[425,171324,1159],{"class":701},[425,171326,171327],{"class":435},"\"保存成功\"",[425,171329,1165],{"class":701},[1099,171331,171333],{"id":171332},"_814-易错点","8.14 易错点",[972,171335,171336,171340,171346,171351,171358,171365],{},[450,171337,171338,169599],{},[422,171339,1943],{},[450,171341,171342,171343,998],{},"读写中文要指定 ",[422,171344,171345],{},"encoding=\"utf-8\"",[450,171347,171348,171349,998],{},"打开文件后要关闭，推荐使用 ",[422,171350,108588],{},[450,171352,171353,171354,171357],{},"读取大文件不要直接 ",[422,171355,171356],{},"read()"," 全部内容。",[450,171359,171360,171361,171364],{},"Windows 写 CSV 时建议加 ",[422,171362,171363],{},"newline=\"\"","，避免空行。",[450,171366,171367],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[1099,171369,171371],{"id":171370},"_815-本章练习","8.15 本章练习",[972,171373,171374,171381,171386,171389,171392],{},[450,171375,171376,171377,171380],{},"写入一个 ",[422,171378,171379],{},"students.txt","，每行保存一个学生姓名。",[450,171382,105110,171383,171385],{},[422,171384,171379],{}," 并输出所有学生。",[450,171387,171388],{},"把学生列表保存为 JSON 文件。",[450,171390,171391],{},"从 JSON 文件读取学生数据，计算平均分。",[450,171393,171394,171395,171398,171399,171402],{},"写一个日志函数 ",[422,171396,171397],{},"write_log(message)","，每次调用向 ",[422,171400,171401],{},"app.log"," 追加一行。",[1074,171404,171405],{},"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":395,"searchDepth":698,"depth":698,"links":171407},[171408,171409,171413,171414,171420,171421,171422,171423,171424,171425,171426,171427,171428,171429,171430],{"id":168919,"depth":698,"text":168920},{"id":168960,"depth":698,"text":168961,"children":171410},[171411,171412],{"id":168964,"depth":710,"text":168965},{"id":168998,"depth":710,"text":168999},{"id":169112,"depth":698,"text":169113},{"id":169205,"depth":698,"text":169206,"children":171415},[171416,171417,171418,171419],{"id":169209,"depth":710,"text":169210},{"id":169296,"depth":710,"text":169297},{"id":169366,"depth":710,"text":169367},{"id":169460,"depth":710,"text":169461},{"id":169530,"depth":698,"text":169531},{"id":169593,"depth":698,"text":169594},{"id":169754,"depth":698,"text":169755},{"id":169817,"depth":698,"text":169818},{"id":169933,"depth":698,"text":169934},{"id":170143,"depth":698,"text":170144},{"id":170455,"depth":698,"text":170456},{"id":170866,"depth":698,"text":170867},{"id":171084,"depth":698,"text":171085},{"id":171332,"depth":698,"text":171333},{"id":171370,"depth":698,"text":171371},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168911,"description":24374},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171437,"title":171438,"body":171439,"description":24374,"extension":1082,"meta":173625,"navigation":1084,"path":173626,"seo":173627,"stem":173628,"__hash__":173629},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171440,"toc":173592},[171441,171444,171448,171451,171454,171546,171548,171567,171572,171576,171579,171582,171611,171618,171621,171625,171628,171657,171659,171711,171717,171770,171774,171872,171875,171942,171946,172003,172005,172011,172015,172020,172026,172117,172122,172126,172129,172207,172210,172248,172252,172370,172373,172377,172380,172425,172428,172432,172437,172443,172493,172496,172527,172531,172535,172565,172569,172604,172608,172643,172683,172687,172703,172706,172710,172714,172793,172797,172838,172842,172897,172901,172935,172939,172969,172978,172985,172991,173048,173051,173059,173062,173066,173073,173076,173082,173085,173102,173107,173111,173117,173130,173133,173170,173173,173184,173187,173201,173204,173218,173222,173229,173262,173265,173267,173273,173276,173280,173282,173288,173293,173466,173470,173533,173537,173561,173565,173589],[10,171442,171438],{"id":171443},"_9-异常模块与包",[1099,171445,171447],{"id":171446},"_91-什么是异常","9.1 什么是异常",[19,171449,171450],{},"异常是程序运行过程中出现的错误。",[19,171452,171453],{},"常见异常：",[35,171455,171456,171465],{},[38,171457,171458],{},[41,171459,171460,171463],{},[44,171461,171462],{},"异常",[44,171464,26860],{},[55,171466,171467,171477,171487,171496,171506,171516,171526,171536],{},[41,171468,171469,171474],{},[60,171470,171471],{},[422,171472,171473],{},"NameError",[60,171475,171476],{},"使用了未定义变量",[41,171478,171479,171484],{},[60,171480,171481],{},[422,171482,171483],{},"TypeError",[60,171485,171486],{},"类型不匹配",[41,171488,171489,171493],{},[60,171490,171491],{},[422,171492,155589],{},[60,171494,171495],{},"值不合法",[41,171497,171498,171503],{},[60,171499,171500],{},[422,171501,171502],{},"IndexError",[60,171504,171505],{},"列表索引越界",[41,171507,171508,171513],{},[60,171509,171510],{},[422,171511,171512],{},"KeyError",[60,171514,171515],{},"字典 key 不存在",[41,171517,171518,171523],{},[60,171519,171520],{},[422,171521,171522],{},"FileNotFoundError",[60,171524,171525],{},"文件不存在",[41,171527,171528,171533],{},[60,171529,171530],{},[422,171531,171532],{},"ZeroDivisionError",[60,171534,171535],{},"除数为 0",[41,171537,171538,171543],{},[60,171539,171540],{},[422,171541,171542],{},"ImportError",[60,171544,171545],{},"导入失败",[19,171547,16132],{},[416,171549,171551],{"className":31133,"code":171550,"language":31135,"meta":395,"style":395},"num = int(\"abc\")\n",[422,171552,171553],{"__ignoreMap":395},[425,171554,171555,171557,171559,171561,171563,171565],{"class":427,"line":428},[425,171556,156542],{"class":701},[425,171558,1204],{"class":1155},[425,171560,3382],{"class":691},[425,171562,1159],{"class":701},[425,171564,156635],{"class":435},[425,171566,1165],{"class":701},[19,171568,171569,171570,998],{},"会触发 ",[422,171571,155589],{},[1099,171573,171575],{"id":171574},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,171577,171578],{},"如果不处理异常，程序会直接终止。",[19,171580,171581],{},"例如用户输入年龄：",[416,171583,171585],{"className":31133,"code":171584,"language":31135,"meta":395,"style":395},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[422,171586,171587,171605],{"__ignoreMap":395},[425,171588,171589,171591,171593,171595,171597,171599,171601,171603],{"class":427,"line":428},[425,171590,147301],{"class":701},[425,171592,1204],{"class":1155},[425,171594,3382],{"class":691},[425,171596,1159],{"class":701},[425,171598,54576],{"class":691},[425,171600,1159],{"class":701},[425,171602,153149],{"class":435},[425,171604,31252],{"class":701},[425,171606,171607,171609],{"class":427,"line":698},[425,171608,31170],{"class":691},[425,171610,156516],{"class":701},[19,171612,171613,171614,171617],{},"用户输入 ",[422,171615,171616],{},"abc","，程序就会报错退出。",[19,171619,171620],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[1099,171622,171624],{"id":171623},"_93-try-except","9.3 try except",[19,171626,171627],{},"基础语法：",[416,171629,171631],{"className":31133,"code":171630,"language":31135,"meta":395,"style":395},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[422,171632,171633,171640,171645,171652],{"__ignoreMap":395},[425,171634,171635,171638],{"class":427,"line":428},[425,171636,171637],{"class":1155},"try",[425,171639,4739],{"class":701},[425,171641,171642],{"class":427,"line":698},[425,171643,171644],{"class":701},"    可能出错的代码\n",[425,171646,171647,171650],{"class":427,"line":710},[425,171648,171649],{"class":1155},"except",[425,171651,4739],{"class":701},[425,171653,171654],{"class":427,"line":721},[425,171655,171656],{"class":701},"    出错后的处理代码\n",[19,171658,16132],{},[416,171660,171662],{"className":31133,"code":171661,"language":31135,"meta":395,"style":395},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[422,171663,171664,171670,171688,171694,171700],{"__ignoreMap":395},[425,171665,171666,171668],{"class":427,"line":428},[425,171667,171637],{"class":1155},[425,171669,4739],{"class":701},[425,171671,171672,171674,171676,171678,171680,171682,171684,171686],{"class":427,"line":698},[425,171673,153141],{"class":701},[425,171675,1204],{"class":1155},[425,171677,3382],{"class":691},[425,171679,1159],{"class":701},[425,171681,54576],{"class":691},[425,171683,1159],{"class":701},[425,171685,153149],{"class":435},[425,171687,31252],{"class":701},[425,171689,171690,171692],{"class":427,"line":710},[425,171691,32054],{"class":691},[425,171693,156516],{"class":701},[425,171695,171696,171698],{"class":427,"line":721},[425,171697,171649],{"class":1155},[425,171699,4739],{"class":701},[425,171701,171702,171704,171706,171709],{"class":427,"line":735},[425,171703,32054],{"class":691},[425,171705,1159],{"class":701},[425,171707,171708],{"class":435},"\"年龄必须是数字\"",[425,171710,1165],{"class":701},[19,171712,171713,171714,171716],{},"不建议裸写 ",[422,171715,171649],{},"，最好指定异常类型。",[416,171718,171720],{"className":31133,"code":171719,"language":31135,"meta":395,"style":395},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[422,171721,171722,171728,171746,171752,171760],{"__ignoreMap":395},[425,171723,171724,171726],{"class":427,"line":428},[425,171725,171637],{"class":1155},[425,171727,4739],{"class":701},[425,171729,171730,171732,171734,171736,171738,171740,171742,171744],{"class":427,"line":698},[425,171731,153141],{"class":701},[425,171733,1204],{"class":1155},[425,171735,3382],{"class":691},[425,171737,1159],{"class":701},[425,171739,54576],{"class":691},[425,171741,1159],{"class":701},[425,171743,153149],{"class":435},[425,171745,31252],{"class":701},[425,171747,171748,171750],{"class":427,"line":710},[425,171749,32054],{"class":691},[425,171751,156516],{"class":701},[425,171753,171754,171756,171758],{"class":427,"line":721},[425,171755,171649],{"class":1155},[425,171757,152981],{"class":691},[425,171759,4739],{"class":701},[425,171761,171762,171764,171766,171768],{"class":427,"line":735},[425,171763,32054],{"class":691},[425,171765,1159],{"class":701},[425,171767,171708],{"class":435},[425,171769,1165],{"class":701},[1099,171771,171773],{"id":171772},"_94-捕获多个异常","9.4 捕获多个异常",[416,171775,171777],{"className":31133,"code":171776,"language":31135,"meta":395,"style":395},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[422,171778,171779,171785,171806,171826,171833,171841,171852,171861],{"__ignoreMap":395},[425,171780,171781,171783],{"class":427,"line":428},[425,171782,171637],{"class":1155},[425,171784,4739],{"class":701},[425,171786,171787,171790,171792,171794,171796,171798,171800,171802,171804],{"class":427,"line":698},[425,171788,171789],{"class":701},"    nums ",[425,171791,1204],{"class":1155},[425,171793,52981],{"class":701},[425,171795,1367],{"class":691},[425,171797,13434],{"class":701},[425,171799,1235],{"class":691},[425,171801,13434],{"class":701},[425,171803,1229],{"class":691},[425,171805,34001],{"class":701},[425,171807,171808,171811,171813,171815,171817,171819,171821,171824],{"class":427,"line":710},[425,171809,171810],{"class":701},"    index ",[425,171812,1204],{"class":1155},[425,171814,3382],{"class":691},[425,171816,1159],{"class":701},[425,171818,54576],{"class":691},[425,171820,1159],{"class":701},[425,171822,171823],{"class":435},"\"请输入索引:\"",[425,171825,31252],{"class":701},[425,171827,171828,171830],{"class":427,"line":721},[425,171829,32054],{"class":691},[425,171831,171832],{"class":701},"(nums[index])\n",[425,171834,171835,171837,171839],{"class":427,"line":735},[425,171836,171649],{"class":1155},[425,171838,152981],{"class":691},[425,171840,4739],{"class":701},[425,171842,171843,171845,171847,171850],{"class":427,"line":743},[425,171844,32054],{"class":691},[425,171846,1159],{"class":701},[425,171848,171849],{"class":435},"\"索引必须是整数\"",[425,171851,1165],{"class":701},[425,171853,171854,171856,171859],{"class":427,"line":751},[425,171855,171649],{"class":1155},[425,171857,171858],{"class":691}," IndexError",[425,171860,4739],{"class":701},[425,171862,171863,171865,171867,171870],{"class":427,"line":759},[425,171864,32054],{"class":691},[425,171866,1159],{"class":701},[425,171868,171869],{"class":435},"\"索引越界\"",[425,171871,1165],{"class":701},[19,171873,171874],{},"多个异常使用相同处理逻辑：",[416,171876,171878],{"className":31133,"code":171877,"language":31135,"meta":395,"style":395},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[422,171879,171880,171886,171904,171917,171931],{"__ignoreMap":395},[425,171881,171882,171884],{"class":427,"line":428},[425,171883,171637],{"class":1155},[425,171885,4739],{"class":701},[425,171887,171888,171890,171892,171894,171896,171898,171900,171902],{"class":427,"line":698},[425,171889,46348],{"class":701},[425,171891,1204],{"class":1155},[425,171893,3382],{"class":691},[425,171895,1159],{"class":701},[425,171897,54576],{"class":691},[425,171899,1159],{"class":701},[425,171901,156551],{"class":435},[425,171903,31252],{"class":701},[425,171905,171906,171908,171910,171912,171914],{"class":427,"line":710},[425,171907,32054],{"class":691},[425,171909,1159],{"class":701},[425,171911,1594],{"class":691},[425,171913,156801],{"class":1155},[425,171915,171916],{"class":701}," num)\n",[425,171918,171919,171921,171923,171925,171927,171929],{"class":427,"line":721},[425,171920,171649],{"class":1155},[425,171922,2664],{"class":701},[425,171924,155589],{"class":691},[425,171926,13434],{"class":701},[425,171928,171532],{"class":691},[425,171930,31541],{"class":701},[425,171932,171933,171935,171937,171940],{"class":427,"line":735},[425,171934,32054],{"class":691},[425,171936,1159],{"class":701},[425,171938,171939],{"class":435},"\"输入不合法\"",[425,171941,1165],{"class":701},[1099,171943,171945],{"id":171944},"_95-获取异常信息","9.5 获取异常信息",[416,171947,171949],{"className":31133,"code":171948,"language":31135,"meta":395,"style":395},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[422,171950,171951,171957,171971,171982],{"__ignoreMap":395},[425,171952,171953,171955],{"class":427,"line":428},[425,171954,171637],{"class":1155},[425,171956,4739],{"class":701},[425,171958,171959,171961,171963,171965,171967,171969],{"class":427,"line":698},[425,171960,46348],{"class":701},[425,171962,1204],{"class":1155},[425,171964,3382],{"class":691},[425,171966,1159],{"class":701},[425,171968,156635],{"class":435},[425,171970,1165],{"class":701},[425,171972,171973,171975,171977,171979],{"class":427,"line":710},[425,171974,171649],{"class":1155},[425,171976,152981],{"class":691},[425,171978,65359],{"class":1155},[425,171980,171981],{"class":701}," e:\n",[425,171983,171984,171986,171988,171990,171993,171995,171997,171999,172001],{"class":427,"line":721},[425,171985,32054],{"class":691},[425,171987,1159],{"class":701},[425,171989,1210],{"class":1155},[425,171991,171992],{"class":435},"\"出错了:",[425,171994,2043],{"class":691},[425,171996,1232],{"class":701},[425,171998,2093],{"class":691},[425,172000,1400],{"class":435},[425,172002,1165],{"class":701},[19,172004,147212],{},[416,172006,172009],{"className":172007,"code":172008,"language":6187,"meta":395},[6185],"出错了:invalid literal for int() with base 10: 'abc'\n",[422,172010,172008],{"__ignoreMap":395},[1099,172012,172014],{"id":172013},"_96-else和finally","9.6 else和finally",[19,172016,172017,172019],{},[422,172018,2703],{},"：没有异常时执行。",[19,172021,172022,172025],{},[422,172023,172024],{},"finally","：无论是否异常都会执行。",[416,172027,172029],{"className":31133,"code":172028,"language":31135,"meta":395,"style":395},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[422,172030,172031,172037,172055,172063,172073,172079,172100,172106],{"__ignoreMap":395},[425,172032,172033,172035],{"class":427,"line":428},[425,172034,171637],{"class":1155},[425,172036,4739],{"class":701},[425,172038,172039,172041,172043,172045,172047,172049,172051,172053],{"class":427,"line":698},[425,172040,46348],{"class":701},[425,172042,1204],{"class":1155},[425,172044,3382],{"class":691},[425,172046,1159],{"class":701},[425,172048,54576],{"class":691},[425,172050,1159],{"class":701},[425,172052,156551],{"class":435},[425,172054,31252],{"class":701},[425,172056,172057,172059,172061],{"class":427,"line":710},[425,172058,171649],{"class":1155},[425,172060,152981],{"class":691},[425,172062,4739],{"class":701},[425,172064,172065,172067,172069,172071],{"class":427,"line":721},[425,172066,32054],{"class":691},[425,172068,1159],{"class":701},[425,172070,153969],{"class":435},[425,172072,1165],{"class":701},[425,172074,172075,172077],{"class":427,"line":735},[425,172076,2703],{"class":1155},[425,172078,4739],{"class":701},[425,172080,172081,172083,172085,172087,172090,172092,172094,172096,172098],{"class":427,"line":743},[425,172082,32054],{"class":691},[425,172084,1159],{"class":701},[425,172086,1210],{"class":1155},[425,172088,172089],{"class":435},"\"输入正确:",[425,172091,2043],{"class":691},[425,172093,2671],{"class":701},[425,172095,2093],{"class":691},[425,172097,1400],{"class":435},[425,172099,1165],{"class":701},[425,172101,172102,172104],{"class":427,"line":751},[425,172103,172024],{"class":1155},[425,172105,4739],{"class":701},[425,172107,172108,172110,172112,172115],{"class":427,"line":759},[425,172109,32054],{"class":691},[425,172111,1159],{"class":701},[425,172113,172114],{"class":435},"\"程序结束\"",[425,172116,1165],{"class":701},[19,172118,172119,172121],{},[422,172120,172024],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[1099,172123,172125],{"id":172124},"_97-抛出异常","9.7 抛出异常",[19,172127,172128],{},"程序可以主动抛出异常。",[416,172130,172132],{"className":31133,"code":172131,"language":31135,"meta":395,"style":395},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[422,172133,172134,172143,172155,172168,172188,172192,172196],{"__ignoreMap":395},[425,172135,172136,172138,172141],{"class":427,"line":428},[425,172137,32702],{"class":1155},[425,172139,172140],{"class":431}," set_age",[425,172142,162170],{"class":701},[425,172144,172145,172147,172149,172151,172153],{"class":427,"line":698},[425,172146,4101],{"class":1155},[425,172148,16704],{"class":701},[425,172150,2057],{"class":1155},[425,172152,5093],{"class":691},[425,172154,4739],{"class":701},[425,172156,172157,172159,172161,172163,172166],{"class":427,"line":710},[425,172158,104187],{"class":1155},[425,172160,152981],{"class":691},[425,172162,1159],{"class":701},[425,172164,172165],{"class":435},"\"年龄不能为负数\"",[425,172167,1165],{"class":701},[425,172169,172170,172172,172174,172176,172178,172180,172182,172184,172186],{"class":427,"line":721},[425,172171,32054],{"class":691},[425,172173,1159],{"class":701},[425,172175,1210],{"class":1155},[425,172177,162738],{"class":435},[425,172179,2043],{"class":691},[425,172181,70976],{"class":701},[425,172183,2093],{"class":691},[425,172185,1400],{"class":435},[425,172187,1165],{"class":701},[425,172189,172190],{"class":427,"line":735},[425,172191,3400],{"emptyLinePlaceholder":1084},[425,172193,172194],{"class":427,"line":743},[425,172195,3400],{"emptyLinePlaceholder":1084},[425,172197,172198,172201,172203,172205],{"class":427,"line":751},[425,172199,172200],{"class":701},"set_age(",[425,172202,1680],{"class":1155},[425,172204,1367],{"class":691},[425,172206,1165],{"class":701},[19,172208,172209],{},"调用者可以捕获：",[416,172211,172213],{"className":31133,"code":172212,"language":31135,"meta":395,"style":395},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[422,172214,172215,172221,172232,172242],{"__ignoreMap":395},[425,172216,172217,172219],{"class":427,"line":428},[425,172218,171637],{"class":1155},[425,172220,4739],{"class":701},[425,172222,172223,172226,172228,172230],{"class":427,"line":698},[425,172224,172225],{"class":701},"    set_age(",[425,172227,1680],{"class":1155},[425,172229,1367],{"class":691},[425,172231,1165],{"class":701},[425,172233,172234,172236,172238,172240],{"class":427,"line":710},[425,172235,171649],{"class":1155},[425,172237,152981],{"class":691},[425,172239,65359],{"class":1155},[425,172241,171981],{"class":701},[425,172243,172244,172246],{"class":427,"line":721},[425,172245,32054],{"class":691},[425,172247,67754],{"class":701},[1099,172249,172251],{"id":172250},"_98-自定义异常","9.8 自定义异常",[416,172253,172255],{"className":31133,"code":172254,"language":31135,"meta":395,"style":395},"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",[422,172256,172257,172271,172275,172279,172283,172291,172301,172312,172322,172326,172330,172336,172353,172364],{"__ignoreMap":395},[425,172258,172259,172261,172264,172266,172269],{"class":427,"line":428},[425,172260,15691],{"class":1155},[425,172262,172263],{"class":431}," BalanceNotEnoughError",[425,172265,1159],{"class":701},[425,172267,172268],{"class":691},"Exception",[425,172270,31541],{"class":701},[425,172272,172273],{"class":427,"line":698},[425,172274,150292],{"class":1155},[425,172276,172277],{"class":427,"line":710},[425,172278,3400],{"emptyLinePlaceholder":1084},[425,172280,172281],{"class":427,"line":721},[425,172282,3400],{"emptyLinePlaceholder":1084},[425,172284,172285,172287,172289],{"class":427,"line":735},[425,172286,32702],{"class":1155},[425,172288,150941],{"class":431},[425,172290,163567],{"class":701},[425,172292,172293,172295,172297,172299],{"class":427,"line":743},[425,172294,4101],{"class":1155},[425,172296,150897],{"class":701},[425,172298,2107],{"class":1155},[425,172300,163344],{"class":701},[425,172302,172303,172305,172308,172310],{"class":427,"line":751},[425,172304,104187],{"class":1155},[425,172306,172307],{"class":701}," BalanceNotEnoughError(",[425,172309,150992],{"class":435},[425,172311,1165],{"class":701},[425,172313,172314,172316,172318,172320],{"class":427,"line":759},[425,172315,5090],{"class":1155},[425,172317,163574],{"class":701},[425,172319,1680],{"class":1155},[425,172321,150930],{"class":701},[425,172323,172324],{"class":427,"line":770},[425,172325,3400],{"emptyLinePlaceholder":1084},[425,172327,172328],{"class":427,"line":780},[425,172329,3400],{"emptyLinePlaceholder":1084},[425,172331,172332,172334],{"class":427,"line":790},[425,172333,171637],{"class":1155},[425,172335,4739],{"class":701},[425,172337,172338,172340,172342,172345,172347,172349,172351],{"class":427,"line":805},[425,172339,163245],{"class":701},[425,172341,1204],{"class":1155},[425,172343,172344],{"class":701}," withdraw(",[425,172346,1460],{"class":691},[425,172348,13434],{"class":701},[425,172350,2724],{"class":691},[425,172352,1165],{"class":701},[425,172354,172355,172357,172360,172362],{"class":427,"line":818},[425,172356,171649],{"class":1155},[425,172358,172359],{"class":701}," BalanceNotEnoughError ",[425,172361,32138],{"class":1155},[425,172363,171981],{"class":701},[425,172365,172366,172368],{"class":427,"line":831},[425,172367,32054],{"class":691},[425,172369,67754],{"class":701},[19,172371,172372],{},"入门阶段大多数情况使用内置异常即可。",[1099,172374,172376],{"id":172375},"_99-traceback","9.9 traceback",[19,172378,172379],{},"调试时可以输出完整异常堆栈。",[416,172381,172383],{"className":31133,"code":172382,"language":31135,"meta":395,"style":395},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[422,172384,172385,172392,172396,172402,172412,172420],{"__ignoreMap":395},[425,172386,172387,172389],{"class":427,"line":428},[425,172388,31147],{"class":1155},[425,172390,172391],{"class":701}," traceback\n",[425,172393,172394],{"class":427,"line":698},[425,172395,3400],{"emptyLinePlaceholder":1084},[425,172397,172398,172400],{"class":427,"line":710},[425,172399,171637],{"class":1155},[425,172401,4739],{"class":701},[425,172403,172404,172406,172408,172410],{"class":427,"line":721},[425,172405,2985],{"class":691},[425,172407,1159],{"class":701},[425,172409,156635],{"class":435},[425,172411,1165],{"class":701},[425,172413,172414,172416,172418],{"class":427,"line":735},[425,172415,171649],{"class":1155},[425,172417,152981],{"class":691},[425,172419,4739],{"class":701},[425,172421,172422],{"class":427,"line":743},[425,172423,172424],{"class":701},"    traceback.print_exc()\n",[19,172426,172427],{},"日志系统中常把异常堆栈记录到文件。",[1099,172429,172431],{"id":172430},"_910-什么是模块","9.10 什么是模块",[19,172433,172434,172435,126738],{},"模块就是一个 ",[422,172436,147107],{},[19,172438,172439,172440,25611],{},"例如创建 ",[422,172441,172442],{},"my_math.py",[416,172444,172446],{"className":31133,"code":172445,"language":31135,"meta":395,"style":395},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[422,172447,172448,172456,172466,172470,172474,172483],{"__ignoreMap":395},[425,172449,172450,172452,172454],{"class":427,"line":428},[425,172451,32702],{"class":1155},[425,172453,6209],{"class":431},[425,172455,151848],{"class":701},[425,172457,172458,172460,172462,172464],{"class":427,"line":698},[425,172459,5090],{"class":1155},[425,172461,11868],{"class":701},[425,172463,1629],{"class":1155},[425,172465,151859],{"class":701},[425,172467,172468],{"class":427,"line":710},[425,172469,3400],{"emptyLinePlaceholder":1084},[425,172471,172472],{"class":427,"line":721},[425,172473,3400],{"emptyLinePlaceholder":1084},[425,172475,172476,172478,172481],{"class":427,"line":735},[425,172477,32702],{"class":1155},[425,172479,172480],{"class":431}," sub",[425,172482,151848],{"class":701},[425,172484,172485,172487,172489,172491],{"class":427,"line":743},[425,172486,5090],{"class":1155},[425,172488,11868],{"class":701},[425,172490,1680],{"class":1155},[425,172492,151859],{"class":701},[19,172494,172495],{},"在另一个文件中导入：",[416,172497,172499],{"className":31133,"code":172498,"language":31135,"meta":395,"style":395},"import my_math\n\nprint(my_math.add(1, 2))\n",[422,172500,172501,172508,172512],{"__ignoreMap":395},[425,172502,172503,172505],{"class":427,"line":428},[425,172504,31147],{"class":1155},[425,172506,172507],{"class":701}," my_math\n",[425,172509,172510],{"class":427,"line":698},[425,172511,3400],{"emptyLinePlaceholder":1084},[425,172513,172514,172516,172519,172521,172523,172525],{"class":427,"line":710},[425,172515,31170],{"class":691},[425,172517,172518],{"class":701},"(my_math.add(",[425,172520,1367],{"class":691},[425,172522,13434],{"class":701},[425,172524,1235],{"class":691},[425,172526,31252],{"class":701},[1099,172528,172530],{"id":172529},"_911-import导入","9.11 import导入",[14,172532,172534],{"id":172533},"_9111-导入模块","9.11.1 导入模块",[416,172536,172538],{"className":31133,"code":172537,"language":31135,"meta":395,"style":395},"import random\n\nprint(random.randint(1, 10))\n",[422,172539,172540,172546,172550],{"__ignoreMap":395},[425,172541,172542,172544],{"class":427,"line":428},[425,172543,31147],{"class":1155},[425,172545,46083],{"class":701},[425,172547,172548],{"class":427,"line":698},[425,172549,3400],{"emptyLinePlaceholder":1084},[425,172551,172552,172554,172557,172559,172561,172563],{"class":427,"line":710},[425,172553,31170],{"class":691},[425,172555,172556],{"class":701},"(random.randint(",[425,172558,1367],{"class":691},[425,172560,13434],{"class":701},[425,172562,1594],{"class":691},[425,172564,31252],{"class":701},[14,172566,172568],{"id":172567},"_9112-导入指定内容","9.11.2 导入指定内容",[416,172570,172572],{"className":31133,"code":172571,"language":31135,"meta":395,"style":395},"from random import randint\n\nprint(randint(1, 10))\n",[422,172573,172574,172585,172589],{"__ignoreMap":395},[425,172575,172576,172578,172580,172582],{"class":427,"line":428},[425,172577,31492],{"class":1155},[425,172579,58551],{"class":701},[425,172581,31147],{"class":1155},[425,172583,172584],{"class":701}," randint\n",[425,172586,172587],{"class":427,"line":698},[425,172588,3400],{"emptyLinePlaceholder":1084},[425,172590,172591,172593,172596,172598,172600,172602],{"class":427,"line":710},[425,172592,31170],{"class":691},[425,172594,172595],{"class":701},"(randint(",[425,172597,1367],{"class":691},[425,172599,13434],{"class":701},[425,172601,1594],{"class":691},[425,172603,31252],{"class":701},[14,172605,172607],{"id":172606},"_9113-起别名","9.11.3 起别名",[416,172609,172611],{"className":31133,"code":172610,"language":31135,"meta":395,"style":395},"import random as rd\n\nprint(rd.randint(1, 10))\n",[422,172612,172613,172624,172628],{"__ignoreMap":395},[425,172614,172615,172617,172619,172621],{"class":427,"line":428},[425,172616,31147],{"class":1155},[425,172618,58551],{"class":701},[425,172620,32138],{"class":1155},[425,172622,172623],{"class":701}," rd\n",[425,172625,172626],{"class":427,"line":698},[425,172627,3400],{"emptyLinePlaceholder":1084},[425,172629,172630,172632,172635,172637,172639,172641],{"class":427,"line":710},[425,172631,31170],{"class":691},[425,172633,172634],{"class":701},"(rd.randint(",[425,172636,1367],{"class":691},[425,172638,13434],{"class":701},[425,172640,1594],{"class":691},[425,172642,31252],{"class":701},[416,172644,172646],{"className":31133,"code":172645,"language":31135,"meta":395,"style":395},"from random import randint as rint\n\nprint(rint(1, 10))\n",[422,172647,172648,172664,172668],{"__ignoreMap":395},[425,172649,172650,172652,172654,172656,172659,172661],{"class":427,"line":428},[425,172651,31492],{"class":1155},[425,172653,58551],{"class":701},[425,172655,31147],{"class":1155},[425,172657,172658],{"class":701}," randint ",[425,172660,32138],{"class":1155},[425,172662,172663],{"class":701}," rint\n",[425,172665,172666],{"class":427,"line":698},[425,172667,3400],{"emptyLinePlaceholder":1084},[425,172669,172670,172672,172675,172677,172679,172681],{"class":427,"line":710},[425,172671,31170],{"class":691},[425,172673,172674],{"class":701},"(rint(",[425,172676,1367],{"class":691},[425,172678,13434],{"class":701},[425,172680,1594],{"class":691},[425,172682,31252],{"class":701},[14,172684,172686],{"id":172685},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[416,172688,172690],{"className":31133,"code":172689,"language":31135,"meta":395,"style":395},"from random import *\n",[422,172691,172692],{"__ignoreMap":395},[425,172693,172694,172696,172698,172700],{"class":427,"line":428},[425,172695,31492],{"class":1155},[425,172697,58551],{"class":701},[425,172699,31147],{"class":1155},[425,172701,172702],{"class":1155}," *\n",[19,172704,172705],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[1099,172707,172709],{"id":172708},"_912-常用内置模块","9.12 常用内置模块",[14,172711,172713],{"id":172712},"_9121-random","9.12.1 random",[416,172715,172717],{"className":31133,"code":172716,"language":31135,"meta":395,"style":395},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[422,172718,172719,172725,172729,172743,172762],{"__ignoreMap":395},[425,172720,172721,172723],{"class":427,"line":428},[425,172722,31147],{"class":1155},[425,172724,46083],{"class":701},[425,172726,172727],{"class":427,"line":698},[425,172728,3400],{"emptyLinePlaceholder":1084},[425,172730,172731,172733,172735,172737,172739,172741],{"class":427,"line":710},[425,172732,31170],{"class":691},[425,172734,172556],{"class":701},[425,172736,1367],{"class":691},[425,172738,13434],{"class":701},[425,172740,1594],{"class":691},[425,172742,31252],{"class":701},[425,172744,172745,172747,172750,172752,172754,172756,172758,172760],{"class":427,"line":721},[425,172746,31170],{"class":691},[425,172748,172749],{"class":701},"(random.choice([",[425,172751,150643],{"class":435},[425,172753,13434],{"class":701},[425,172755,151691],{"class":435},[425,172757,13434],{"class":701},[425,172759,160486],{"class":435},[425,172761,33898],{"class":701},[425,172763,172764,172766,172769,172771,172773,172775,172777,172779,172781,172783,172785,172787,172789,172791],{"class":427,"line":735},[425,172765,31170],{"class":691},[425,172767,172768],{"class":701},"(random.sample([",[425,172770,1367],{"class":691},[425,172772,13434],{"class":701},[425,172774,1235],{"class":691},[425,172776,13434],{"class":701},[425,172778,1229],{"class":691},[425,172780,13434],{"class":701},[425,172782,1442],{"class":691},[425,172784,13434],{"class":701},[425,172786,1468],{"class":691},[425,172788,112957],{"class":701},[425,172790,1235],{"class":691},[425,172792,31252],{"class":701},[14,172794,172796],{"id":172795},"_9122-time","9.12.2 time",[416,172798,172800],{"className":31133,"code":172799,"language":31135,"meta":395,"style":395},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[422,172801,172802,172808,172812,172819,172827],{"__ignoreMap":395},[425,172803,172804,172806],{"class":427,"line":428},[425,172805,31147],{"class":1155},[425,172807,32584],{"class":701},[425,172809,172810],{"class":427,"line":698},[425,172811,3400],{"emptyLinePlaceholder":1084},[425,172813,172814,172816],{"class":427,"line":710},[425,172815,31170],{"class":691},[425,172817,172818],{"class":701},"(time.time())\n",[425,172820,172821,172823,172825],{"class":427,"line":721},[425,172822,95826],{"class":701},[425,172824,1367],{"class":691},[425,172826,1165],{"class":701},[425,172828,172829,172831,172833,172836],{"class":427,"line":735},[425,172830,31170],{"class":691},[425,172832,1159],{"class":701},[425,172834,172835],{"class":435},"\"1秒后执行\"",[425,172837,1165],{"class":701},[14,172839,172841],{"id":172840},"_9123-datetime","9.12.3 datetime",[416,172843,172845],{"className":31133,"code":172844,"language":31135,"meta":395,"style":395},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[422,172846,172847,172859,172863,172873,172880],{"__ignoreMap":395},[425,172848,172849,172851,172854,172856],{"class":427,"line":428},[425,172850,31492],{"class":1155},[425,172852,172853],{"class":701}," datetime ",[425,172855,31147],{"class":1155},[425,172857,172858],{"class":701}," datetime\n",[425,172860,172861],{"class":427,"line":698},[425,172862,3400],{"emptyLinePlaceholder":1084},[425,172864,172865,172868,172870],{"class":427,"line":710},[425,172866,172867],{"class":701},"now ",[425,172869,1204],{"class":1155},[425,172871,172872],{"class":701}," datetime.now()\n",[425,172874,172875,172877],{"class":427,"line":721},[425,172876,31170],{"class":691},[425,172878,172879],{"class":701},"(now)\n",[425,172881,172882,172884,172887,172890,172892,172895],{"class":427,"line":735},[425,172883,31170],{"class":691},[425,172885,172886],{"class":701},"(now.strftime(",[425,172888,172889],{"class":435},"\"%Y-%m-",[425,172891,157446],{"class":691},[425,172893,172894],{"class":435}," %H:%M:%S\"",[425,172896,31252],{"class":701},[14,172898,172900],{"id":172899},"_9124-os","9.12.4 os",[416,172902,172904],{"className":31133,"code":172903,"language":31135,"meta":395,"style":395},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[422,172905,172906,172912,172916,172923],{"__ignoreMap":395},[425,172907,172908,172910],{"class":427,"line":428},[425,172909,31147],{"class":1155},[425,172911,46060],{"class":701},[425,172913,172914],{"class":427,"line":698},[425,172915,3400],{"emptyLinePlaceholder":1084},[425,172917,172918,172920],{"class":427,"line":710},[425,172919,31170],{"class":691},[425,172921,172922],{"class":701},"(os.getcwd())\n",[425,172924,172925,172927,172930,172933],{"class":427,"line":721},[425,172926,31170],{"class":691},[425,172928,172929],{"class":701},"(os.listdir(",[425,172931,172932],{"class":435},"\".\"",[425,172934,31252],{"class":701},[14,172936,172938],{"id":172937},"_9125-sys","9.12.5 sys",[416,172940,172942],{"className":31133,"code":172941,"language":31135,"meta":395,"style":395},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[422,172943,172944,172951,172955,172962],{"__ignoreMap":395},[425,172945,172946,172948],{"class":427,"line":428},[425,172947,31147],{"class":1155},[425,172949,172950],{"class":701}," sys\n",[425,172952,172953],{"class":427,"line":698},[425,172954,3400],{"emptyLinePlaceholder":1084},[425,172956,172957,172959],{"class":427,"line":710},[425,172958,31170],{"class":691},[425,172960,172961],{"class":701},"(sys.version)\n",[425,172963,172964,172966],{"class":427,"line":721},[425,172965,31170],{"class":691},[425,172967,172968],{"class":701},"(sys.path)\n",[1099,172970,172972,172973,172975,172976,1400],{"id":172971},"_913-if-name-main","9.13 if ",[400,172974,80565],{}," == \"",[400,172977,102813],{},[19,172979,172980,172981,172984],{},"模块被直接运行和被导入时，",[422,172982,172983],{},"__name__"," 的值不同。",[19,172986,172987,172988,25611],{},"创建 ",[422,172989,172990],{},"my_module.py",[416,172992,172994],{"className":31133,"code":172993,"language":31135,"meta":395,"style":395},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[422,172995,172996,173004,173014,173018,173022,173034],{"__ignoreMap":395},[425,172997,172998,173000,173002],{"class":427,"line":428},[425,172999,32702],{"class":1155},[425,173001,6209],{"class":431},[425,173003,151848],{"class":701},[425,173005,173006,173008,173010,173012],{"class":427,"line":698},[425,173007,5090],{"class":1155},[425,173009,11868],{"class":701},[425,173011,1629],{"class":1155},[425,173013,151859],{"class":701},[425,173015,173016],{"class":427,"line":710},[425,173017,3400],{"emptyLinePlaceholder":1084},[425,173019,173020],{"class":427,"line":721},[425,173021,3400],{"emptyLinePlaceholder":1084},[425,173023,173024,173026,173028,173030,173032],{"class":427,"line":735},[425,173025,2544],{"class":1155},[425,173027,31975],{"class":691},[425,173029,102314],{"class":1155},[425,173031,102317],{"class":435},[425,173033,4739],{"class":701},[425,173035,173036,173038,173040,173042,173044,173046],{"class":427,"line":743},[425,173037,32054],{"class":691},[425,173039,167355],{"class":701},[425,173041,1367],{"class":691},[425,173043,13434],{"class":701},[425,173045,1235],{"class":691},[425,173047,31252],{"class":701},[19,173049,173050],{},"作用：",[972,173052,173053,173056],{},[450,173054,173055],{},"直接运行该文件时，执行测试代码。",[450,173057,173058],{},"被其他文件导入时，不执行测试代码。",[19,173060,173061],{},"这是写模块时很常用的习惯。",[1099,173063,173065],{"id":173064},"_914-包","9.14 包",[19,173067,173068,173069,173072],{},"包是包含 ",[422,173070,173071],{},"__init__.py"," 的目录，用于组织多个模块。",[19,173074,173075],{},"目录结构：",[416,173077,173080],{"className":173078,"code":173079,"language":6187,"meta":395},[6185],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[422,173081,173079],{"__ignoreMap":395},[19,173083,173084],{},"导入：",[416,173086,173088],{"className":31133,"code":173087,"language":31135,"meta":395,"style":395},"from utils.file_utils import read_file\n",[422,173089,173090],{"__ignoreMap":395},[425,173091,173092,173094,173097,173099],{"class":427,"line":428},[425,173093,31492],{"class":1155},[425,173095,173096],{"class":701}," utils.file_utils ",[425,173098,31147],{"class":1155},[425,173100,173101],{"class":701}," read_file\n",[19,173103,173104,173106],{},[422,173105,173071],{}," 可以为空，也可以写包初始化逻辑。",[1099,173108,173110],{"id":173109},"_915-第三方包","9.15 第三方包",[19,173112,173113,173114,173116],{},"第三方包通过 ",[422,173115,24825],{}," 安装。",[416,173118,173120],{"className":418,"code":173119,"language":420,"meta":395,"style":395},"pip install requests\n",[422,173121,173122],{"__ignoreMap":395},[425,173123,173124,173126,173128],{"class":427,"line":428},[425,173125,24825],{"class":431},[425,173127,24828],{"class":435},[425,173129,146853],{"class":435},[19,173131,173132],{},"使用：",[416,173134,173136],{"className":31133,"code":173135,"language":31135,"meta":395,"style":395},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[422,173137,173138,173144,173148,173163],{"__ignoreMap":395},[425,173139,173140,173142],{"class":427,"line":428},[425,173141,31147],{"class":1155},[425,173143,146853],{"class":701},[425,173145,173146],{"class":427,"line":698},[425,173147,3400],{"emptyLinePlaceholder":1084},[425,173149,173150,173153,173155,173158,173161],{"class":427,"line":710},[425,173151,173152],{"class":701},"response ",[425,173154,1204],{"class":1155},[425,173156,173157],{"class":701}," requests.get(",[425,173159,173160],{"class":435},"\"https:\u002F\u002Fwww.example.com\"",[425,173162,1165],{"class":701},[425,173164,173165,173167],{"class":427,"line":721},[425,173166,31170],{"class":691},[425,173168,173169],{"class":701},"(response.status_code)\n",[19,173171,173172],{},"查看已安装包：",[416,173174,173176],{"className":418,"code":173175,"language":420,"meta":395,"style":395},"pip list\n",[422,173177,173178],{"__ignoreMap":395},[425,173179,173180,173182],{"class":427,"line":428},[425,173181,24825],{"class":431},[425,173183,119710],{"class":435},[19,173185,173186],{},"导出项目依赖：",[416,173188,173189],{"className":418,"code":147048,"language":420,"meta":395,"style":395},[422,173190,173191],{"__ignoreMap":395},[425,173192,173193,173195,173197,173199],{"class":427,"line":428},[425,173194,24825],{"class":431},[425,173196,147057],{"class":435},[425,173198,27212],{"class":1155},[425,173200,147062],{"class":435},[19,173202,173203],{},"安装项目依赖：",[416,173205,173206],{"className":418,"code":147068,"language":420,"meta":395,"style":395},[422,173207,173208],{"__ignoreMap":395},[425,173209,173210,173212,173214,173216],{"class":427,"line":428},[425,173211,24825],{"class":431},[425,173213,24828],{"class":435},[425,173215,120394],{"class":691},[425,173217,147062],{"class":435},[1099,173219,173221],{"id":173220},"_916-模块搜索路径","9.16 模块搜索路径",[19,173223,173224,173225,173228],{},"Python 导入模块时会在 ",[422,173226,173227],{},"sys.path"," 中查找。",[416,173230,173232],{"className":31133,"code":173231,"language":31135,"meta":395,"style":395},"import sys\n\nfor path in sys.path:\n    print(path)\n",[422,173233,173234,173240,173244,173256],{"__ignoreMap":395},[425,173235,173236,173238],{"class":427,"line":428},[425,173237,31147],{"class":1155},[425,173239,172950],{"class":701},[425,173241,173242],{"class":427,"line":698},[425,173243,3400],{"emptyLinePlaceholder":1084},[425,173245,173246,173248,173251,173253],{"class":427,"line":710},[425,173247,4025],{"class":1155},[425,173249,173250],{"class":701}," path ",[425,173252,27034],{"class":1155},[425,173254,173255],{"class":701}," sys.path:\n",[425,173257,173258,173260],{"class":427,"line":721},[425,173259,32054],{"class":691},[425,173261,169984],{"class":701},[19,173263,173264],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,173266,158378],{},[416,173268,173271],{"className":173269,"code":173270,"language":6187,"meta":395},[6185],"random.py\njson.py\ntime.py\n",[422,173272,173270],{"__ignoreMap":395},[19,173274,173275],{},"这些文件名可能导致导入异常。",[1099,173277,173279],{"id":173278},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,173281,173075],{},[416,173283,173286],{"className":173284,"code":173285,"language":6187,"meta":395},[6185],"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",[422,173287,173285],{"__ignoreMap":395},[19,173289,173290,25611],{},[422,173291,173292],{},"utils\u002Ffile_utils.py",[416,173294,173296],{"className":31133,"code":173295,"language":31135,"meta":395,"style":395},"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",[422,173297,173298,173304,173314,173318,173322,173332,173342,173350,173356,173360,173387,173397,173401,173405,173415,173441],{"__ignoreMap":395},[425,173299,173300,173302],{"class":427,"line":428},[425,173301,31147],{"class":1155},[425,173303,147846],{"class":701},[425,173305,173306,173308,173310,173312],{"class":427,"line":698},[425,173307,31492],{"class":1155},[425,173309,109066],{"class":701},[425,173311,31147],{"class":1155},[425,173313,109071],{"class":701},[425,173315,173316],{"class":427,"line":710},[425,173317,3400],{"emptyLinePlaceholder":1084},[425,173319,173320],{"class":427,"line":721},[425,173321,3400],{"emptyLinePlaceholder":1084},[425,173323,173324,173326,173329],{"class":427,"line":735},[425,173325,32702],{"class":1155},[425,173327,173328],{"class":431}," read_json",[425,173330,173331],{"class":701},"(path):\n",[425,173333,173334,173337,173339],{"class":427,"line":743},[425,173335,173336],{"class":701},"    path ",[425,173338,1204],{"class":1155},[425,173340,173341],{"class":701}," Path(path)\n",[425,173343,173344,173346,173348],{"class":427,"line":751},[425,173345,4101],{"class":1155},[425,173347,39685],{"class":1155},[425,173349,170065],{"class":701},[425,173351,173352,173354],{"class":427,"line":759},[425,173353,15749],{"class":1155},[425,173355,52593],{"class":701},[425,173357,173358],{"class":427,"line":770},[425,173359,3400],{"emptyLinePlaceholder":1084},[425,173361,173362,173364,173366,173369,173371,173373,173375,173377,173379,173381,173383,173385],{"class":427,"line":780},[425,173363,34933],{"class":1155},[425,173365,147546],{"class":691},[425,173367,173368],{"class":701},"(path, ",[425,173370,147556],{"class":435},[425,173372,13434],{"class":701},[425,173374,147561],{"class":6216},[425,173376,1204],{"class":1155},[425,173378,147566],{"class":435},[425,173380,938],{"class":701},[425,173382,32138],{"class":1155},[425,173384,148908],{"class":6216},[425,173386,4739],{"class":701},[425,173388,173389,173391,173393,173395],{"class":427,"line":790},[425,173390,15749],{"class":1155},[425,173392,148919],{"class":701},[425,173394,46109],{"class":6216},[425,173396,1165],{"class":701},[425,173398,173399],{"class":427,"line":805},[425,173400,3400],{"emptyLinePlaceholder":1084},[425,173402,173403],{"class":427,"line":818},[425,173404,3400],{"emptyLinePlaceholder":1084},[425,173406,173407,173409,173412],{"class":427,"line":831},[425,173408,32702],{"class":1155},[425,173410,173411],{"class":431}," write_json",[425,173413,173414],{"class":701},"(path, data):\n",[425,173416,173417,173419,173421,173423,173425,173427,173429,173431,173433,173435,173437,173439],{"class":427,"line":841},[425,173418,34933],{"class":1155},[425,173420,147546],{"class":691},[425,173422,173368],{"class":701},[425,173424,152731],{"class":435},[425,173426,13434],{"class":701},[425,173428,147561],{"class":6216},[425,173430,1204],{"class":1155},[425,173432,147566],{"class":435},[425,173434,938],{"class":701},[425,173436,32138],{"class":1155},[425,173438,148908],{"class":6216},[425,173440,4739],{"class":701},[425,173442,173443,173446,173448,173450,173452,173454,173456,173458,173460,173462,173464],{"class":427,"line":852},[425,173444,173445],{"class":701},"        json.dump(data, ",[425,173447,46109],{"class":6216},[425,173449,13434],{"class":701},[425,173451,147892],{"class":6216},[425,173453,1204],{"class":1155},[425,173455,34742],{"class":691},[425,173457,13434],{"class":701},[425,173459,152767],{"class":6216},[425,173461,1204],{"class":1155},[425,173463,1235],{"class":691},[425,173465,1165],{"class":701},[19,173467,173468,25611],{},[422,173469,155362],{},[416,173471,173473],{"className":31133,"code":173472,"language":31135,"meta":395,"style":395},"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",[422,173474,173475,173486,173490,173503,173523],{"__ignoreMap":395},[425,173476,173477,173479,173481,173483],{"class":427,"line":428},[425,173478,31492],{"class":1155},[425,173480,173096],{"class":701},[425,173482,31147],{"class":1155},[425,173484,173485],{"class":701}," read_json, write_json\n",[425,173487,173488],{"class":427,"line":698},[425,173489,3400],{"emptyLinePlaceholder":1084},[425,173491,173492,173494,173496,173499,173501],{"class":427,"line":710},[425,173493,160471],{"class":701},[425,173495,1204],{"class":1155},[425,173497,173498],{"class":701}," read_json(",[425,173500,152586],{"class":435},[425,173502,1165],{"class":701},[425,173504,173505,173507,173509,173511,173513,173515,173517,173519,173521],{"class":427,"line":721},[425,173506,171289],{"class":701},[425,173508,63434],{"class":435},[425,173510,52192],{"class":701},[425,173512,150643],{"class":435},[425,173514,13434],{"class":701},[425,173516,152227],{"class":435},[425,173518,52192],{"class":701},[425,173520,2136],{"class":691},[425,173522,165907],{"class":701},[425,173524,173525,173528,173530],{"class":427,"line":735},[425,173526,173527],{"class":701},"write_json(",[425,173529,152586],{"class":435},[425,173531,173532],{"class":701},", students)\n",[1099,173534,173536],{"id":173535},"_918-易错点","9.18 易错点",[972,173538,173539,173542,173547,173552,173555,173558],{},[450,173540,173541],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[450,173543,173544,173545,998],{},"能指定异常类型就不要裸写 ",[422,173546,171649],{},[450,173548,173549,173551],{},[422,173550,172024],{}," 无论是否出错都会执行。",[450,173553,173554],{},"模块文件名不要和标准库重名。",[450,173556,173557],{},"导入自己写的模块时，要注意运行目录。",[450,173559,173560],{},"第三方包要安装到当前解释器或虚拟环境中。",[1099,173562,173564],{"id":173563},"_919-本章练习","9.19 本章练习",[972,173566,173567,173570,173573,173579,173586],{},[450,173568,173569],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[450,173571,173572],{},"写函数读取文件，如果文件不存在则返回空字符串。",[450,173574,172987,173575,173578],{},[422,173576,173577],{},"math_utils.py","，实现加减乘除函数并导入使用。",[450,173580,173581,173582,173585],{},"创建一个 ",[422,173583,173584],{},"utils"," 包，把 JSON 读写函数放进去。",[450,173587,173588],{},"写一个程序，捕获除零异常和输入格式异常。",[1074,173590,173591],{},"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":395,"searchDepth":698,"depth":698,"links":173593},[173594,173595,173596,173597,173598,173599,173600,173601,173602,173603,173604,173610,173617,173619,173620,173621,173622,173623,173624],{"id":171446,"depth":698,"text":171447},{"id":171574,"depth":698,"text":171575},{"id":171623,"depth":698,"text":171624},{"id":171772,"depth":698,"text":171773},{"id":171944,"depth":698,"text":171945},{"id":172013,"depth":698,"text":172014},{"id":172124,"depth":698,"text":172125},{"id":172250,"depth":698,"text":172251},{"id":172375,"depth":698,"text":172376},{"id":172430,"depth":698,"text":172431},{"id":172529,"depth":698,"text":172530,"children":173605},[173606,173607,173608,173609],{"id":172533,"depth":710,"text":172534},{"id":172567,"depth":710,"text":172568},{"id":172606,"depth":710,"text":172607},{"id":172685,"depth":710,"text":172686},{"id":172708,"depth":698,"text":172709,"children":173611},[173612,173613,173614,173615,173616],{"id":172712,"depth":710,"text":172713},{"id":172795,"depth":710,"text":172796},{"id":172840,"depth":710,"text":172841},{"id":172899,"depth":710,"text":172900},{"id":172937,"depth":710,"text":172938},{"id":172971,"depth":698,"text":173618},"9.13 if name == \"main\"",{"id":173064,"depth":698,"text":173065},{"id":173109,"depth":698,"text":173110},{"id":173220,"depth":698,"text":173221},{"id":173278,"depth":698,"text":173279},{"id":173535,"depth":698,"text":173536},{"id":173563,"depth":698,"text":173564},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171438,"description":24374},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173631,"title":173632,"body":173633,"description":173796,"extension":1082,"meta":173797,"navigation":1084,"path":173798,"seo":173799,"stem":173800,"__hash__":173801},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173634,"toc":173791},[173635,173638,173641,173644,173655,173657,173731,173734,173737,173740,173743,173746,173749,173752,173755,173758,173761],[10,173636,173632],{"id":173637},"python教程",[19,173639,173640],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,173642,173643],{},"建议学习环境：",[972,173645,173646,173649,173652],{},[450,173647,173648],{},"Python 版本：Python 3.10 及以上。",[450,173650,173651],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[450,173653,173654],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[1099,173656,117833],{"id":117833},[972,173658,173659,173665,173671,173677,173683,173689,173695,173701,173707,173713,173719,173725],{},[450,173660,173661],{},[22,173662,173664],{"href":173663},".\u002Fch1-Python","Python环境与第一个程序",[450,173666,173667],{},[22,173668,173670],{"href":173669},".\u002Fch2","基础语法、变量与字符串",[450,173672,173673],{},[22,173674,173676],{"href":173675},".\u002Fch3","判断语句",[450,173678,173679],{},[22,173680,173682],{"href":173681},".\u002Fch4","循环语句",[450,173684,173685],{},[22,173686,173688],{"href":173687},".\u002Fch5","函数基础",[450,173690,173691],{},[22,173692,173694],{"href":173693},".\u002Fch6","数据容器",[450,173696,173697],{},[22,173698,173700],{"href":173699},".\u002Fch7","函数进阶",[450,173702,173703],{},[22,173704,173706],{"href":173705},".\u002Fch8","文件操作",[450,173708,173709],{},[22,173710,173712],{"href":173711},".\u002Fch9","异常、模块与包",[450,173714,173715],{},[22,173716,173718],{"href":173717},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[450,173720,173721],{},[22,173722,173724],{"href":173723},".\u002Fch11","面向对象基础",[450,173726,173727],{},[22,173728,173730],{"href":173729},".\u002Fch12","综合案例与复习路线",[1099,173732,173733],{"id":173733},"学习路线",[19,173735,173736],{},"第一阶段：能运行程序。",[19,173738,173739],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,173741,173742],{},"第二阶段：能组织数据。",[19,173744,173745],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,173747,173748],{},"第三阶段：能封装逻辑。",[19,173750,173751],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,173753,173754],{},"第四阶段：能做小项目。",[19,173756,173757],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[1099,173759,173760],{"id":173760},"参考资料",[972,173762,173763,173770,173777,173784],{},[450,173764,173765,173766],{},"黑马程序员 Python 入门教程推荐：",[22,173767,173768],{"href":173768,"rel":173769},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[26],[450,173771,173772,173773],{},"Python 官方中文教程：",[22,173774,173775],{"href":173775,"rel":173776},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[26],[450,173778,173779,173780],{},"Python 标准库文档：",[22,173781,173782],{"href":173782,"rel":173783},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[26],[450,173785,173786,173787],{},"pyecharts 文档：",[22,173788,173789],{"href":173789,"rel":173790},"https:\u002F\u002Fpyecharts.org\u002F",[26],{"title":395,"searchDepth":698,"depth":698,"links":173792},[173793,173794,173795],{"id":117833,"depth":698,"text":117833},{"id":173733,"depth":698,"text":173733},{"id":173760,"depth":698,"text":173760},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":24376},"\u002Fwiki\u002F2024-10-10-python",{"title":173632,"description":173796},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331379006]